Node.js 响应头 & 请求头 & CORS
常见响应头
Access-Control-Allow-Origin: *
Cache-Control: public, max-age=0
Content-Type: text/html; charset=utf-8
Server: nginx
Date: Mon, 08 Jan 2024 18:32:47 GMTCORS 跨域处理
前端跨域请求会被同源策略拦截(协议、域名、端口三者必须一致)。后端需设置响应头放行。
1. 允许指定源访问
js
app.use('*', (req, res, next) => {
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:5500')
next()
})2. 允许自定义请求头
CORS 默认只支持 9 个请求头,Content-Type: application/json 不在其中,需要显式声明:
js
res.setHeader('Access-Control-Allow-Headers', 'Content-Type')3. 允许额外请求方法
CORS 默认只支持 GET POST HEAD OPTIONS,如要使用 PATCH/DELETE:
js
res.setHeader('Access-Control-Allow-Methods', 'POST,GET,OPTIONS,DELETE,PATCH')完整 CORS 中间件
js
app.use('*', (req, res, next) => {
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:5500')
res.setHeader('Access-Control-Allow-Headers', 'Content-Type,Authorization')
res.setHeader('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE,PATCH,OPTIONS')
next()
})OPTIONS 预检请求
以下情况会触发浏览器自动发送 OPTIONS 请求(预检):
| 触发条件 | 示例 |
|---|---|
| 非简单请求方法 | PUT、DELETE、PATCH 等 |
| 自定义请求头 | Content-Type: application/json、Authorization 等 |
| 携带凭证 | cookies、HTTP 认证 |