当你在 Express 应用中使用 app.use(cors())
且不传递任何配置选项时,CORS 中间件会采用默认配置来处理跨域请求。下面详细介绍其效果、限制以及适用场景:
默认配置的效果
允许所有来源(Origin)
响应头Access-Control-Allow-Origin
会被设置为*
,这意味着任何域名都可以访问你的 API。允许常见 HTTP 方法
默认允许GET
、HEAD
和POST
这三种 HTTP 方法。允许常见请求头
默认允许的请求头包括:Accept
、Accept-Language
、Content-Language
、Content-Type
(仅限application/x-www-form-urlencoded
、multipart/form-data
、text/plain
)。禁用凭证(Credentials)
响应头Access-Control-Allow-Credentials
不会被设置,因此跨域请求无法携带 cookies、HTTP 认证信息等凭证。
示例响应头
对于跨域请求,服务器返回的响应头会是这样的:
1 | Access-Control-Allow-Origin: * |
适用场景
- 开发环境:在本地开发阶段,为了方便调试,允许任何前端域名访问 API。
- 公开 API:如果你提供的是不需要身份验证的公共 API,例如天气数据、开源内容等。
- 简单请求:只处理不包含自定义请求头、不使用特殊 HTTP 方法(如
PUT
、DELETE
)的简单请求。
限制与风险
安全风险
Access-Control-Allow-Origin: *
存在安全隐患,因为任何网站都可以向你的 API 发起请求。- 若你的 API 需要处理敏感数据(如用户信息),这种配置会导致 CSRF(跨站请求伪造)攻击风险。
无法携带凭证
- 由于默认禁用凭证,基于 cookies 的会话管理、HTTP 认证等功能将无法在跨域场景下使用。
有限的方法和头
- 如果你的请求使用了
PUT
、DELETE
等方法,或者包含自定义请求头(如Authorization
),默认配置会阻止这些请求。
- 如果你的请求使用了
与自定义配置的对比
配置项 | 默认配置 | 自定义配置示例 |
---|---|---|
允许的源(Origin) | * |
https://your-frontend.com |
允许的方法 | GET,HEAD,POST |
GET,POST,PUT,DELETE |
允许的头 | 有限的几个标准头 | Content-Type,Authorization |
凭证支持 | 不支持 | 支持(需设置 credentials: true ) |
建议
- 开发环境:可以暂时使用默认配置,但建议指定具体的开发域名,如
http://localhost:3000
。 - 生产环境:必须使用自定义配置,明确指定允许的源,并根据需求配置方法、头和凭证支持。
1 | // 生产环境推荐配置示例 |
总之,app.use(cors())
在不传递参数时提供了最宽松的跨域支持,但在生产环境中,为了安全和功能完整性,建议根据具体需求进行配置。