Skip to content

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 GMT

CORS 跨域处理

前端跨域请求会被同源策略拦截(协议、域名、端口三者必须一致)。后端需设置响应头放行。

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/jsonAuthorization
携带凭证cookies、HTTP 认证