close
  • 简体中文
  • server.cors

    • 类型: boolean | import('cors').CorsOptions
    • 默认值:
    const defaultAllowedOrigins =
      /^https?:\/\/(?:(?:[^:]+\.)?localhost|127\.0\.0\.1|\[::1\])(?::\d+)?$/;
    
    const defaultOptions = {
      // 默认允许:
      // - localhost
      // - 127.0.0.1
      // - [::1]
      origin: defaultAllowedOrigins,
    };
    • 版本: >= 1.1.11

    为开发服务器和预览服务器配置 CORS 选项,基于 cors 中间件实现。

    • object:启用 CORS 并使用指定的选项。
    • true:启用 CORS 并使用默认选项(允许所有 origin,不推荐)。
    • false:禁用 CORS。
    Warning

    使用 cors: truecors.origin: '*' 会使你的开发服务器对所有 origin 开放,这可能会危及源代码的安全性,建议使用 origin 选项指定一个受信任 origins 的白名单。

    示例

    • 为特定 origin 启用 CORS:
    rsbuild.config.ts
    export default {
      server: {
        cors: {
          // 配置 `Access-Control-Allow-Origin` CORS 响应头
          origin: 'https://example.com',
        },
      },
    };
    • 保留 Rsbuild 默认的 origin 配置,并添加额外的 origin:
    rsbuild.config.ts
    // `defaultAllowedOrigins` 为 Rsbuild 默认的 origin 值
    import { defaultAllowedOrigins } from '@rsbuild/core';
    
    export default {
      server: {
        cors: {
          origin: [defaultAllowedOrigins, 'https://example.com'],
        },
      },
    };
    • 仅为开发服务器启用 CORS:
    rsbuild.config.ts
    const isDev = process.env.NODE_ENV === 'development';
    
    export default {
      server: {
        cors: isDev ? { origin: 'https://example.com' } : false,
      },
    };
    • 禁用 CORS:
    rsbuild.config.ts
    export default {
      server: {
        cors: false,
      },
    };
    • 为所有 origin 启用 CORS(不推荐):
    rsbuild.config.ts
    export default {
      server: {
        // 等价于 `{ origin: '*' }`
        cors: true,
      },
    };

    选项

    cors 选项可以是一个对象,与 cors 中间件的选项相同。

    默认配置等同于:

    const defaultCorsOptions = {
      origin: '*',
      methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
      preflightContinue: false,
      optionsSuccessStatus: 204,
    };

    origin

    • 类型:
    type StaticOrigin = boolean | string | RegExp | Array<boolean | string | RegExp>;
    
    type CustomOrigin = (
      requestOrigin: string | undefined,
      callback: (err: Error | null, origin?: StaticOrigin) => void,
    ) => void;
    
    type Origin = StaticOrigin | CustomOrigin;

    origin 选项用于配置 Access-Control-Allow-Origin 头:

    rsbuild.config.ts
    export default {
      server: {
        cors: {
          origin: 'https://example.com',
        },
      },
    };

    通过数组指定多个允许的 origin:

    rsbuild.config.ts
    export default {
      server: {
        cors: {
          origin: [
            /^https?:\/\/(?:(?:[^:]+\.)?localhost|127\.0\.0\.1|\[::1\])(?::\d+)?$/,
            'https://example.com',
          ],
        },
      },
    };

    使用正则表达式来允许所有匹配的 origin:

    rsbuild.config.ts
    export default {
      server: {
        cors: {
          origin: /\.example\.com$/,
        },
      },
    };

    origin 设置为函数,可以动态决定允许的 origin,函数接收两个参数:

    • origin:当前请求的 origin,undefined 表示该请求没有 origin。
    • callback:一个回调函数,用于设置允许的 origin。
    rsbuild.config.ts
    export default {
      server: {
        cors: {
          origin: (origin, callback) => {
            // loadMyOrigins is an example call to load a list of origins
            loadMyOrigins((error, origins) => {
              callback(error, origins);
            });
          },
        },
      },
    };