默认行为与问题

  • 默认行为:add_header指令仅在2xx/3xx成功响应中添加头部
  • 问题场景:当后端返回4xx/5xx错误时,默认情况下跨域头会被丢弃
  • 浏览器表现:前端收到错误响应但缺少Access-Control-Allow-Origin头时,会触发CORS错误
# 错误示例:缺少always参数,4xx/5xx响应无跨域头
location /api {
  add_header 'Access-Control-Allow-Origin' '*';
  proxy_pass http://backend;
}

always参数的解决方案

  • 强制生效:添加always后,跨域头会在所有响应中存在
  • 配置语法:
nginx
复制
add_header 'Header-Name' 'value' always;

典型应用场景:跨域配置

基础跨域配置

nginx
复制
location /api {
  # 核心跨域头(必须带always)
  add_header 'Access-Control-Allow-Origin' 'http://frontend.com' always;
  add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
  add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization' always;
  proxy_pass http://backend;
}

处理预检请求(OPTIONS)

nginx
复制
location /api {
  # 跨域头配置...
  if ($request_method = 'OPTIONS') {
    return 204;
  }
  proxy_pass http://backend;
}
posted on 2026-05-29 14:41  李白菜  阅读(3)  评论(0)    收藏  举报