Nginx解决个别接口CORS跨域

前端Ajax或Axios等XMLHttpRequest请求一个第三方的接口时,会出现跨域问题。

简单请求与复杂请求的差别是复杂请求会自动发出一个 OPTIONS 的预检请求,当请求得到确认后,才开始真正发送请求。

综上,我们要解决两个问题:

  • OPTIONS 请求的正确响应
  • 跨域请求正确响应

Nginx解决个别接口CORS跨域_第1张图片

解决方案

只需在Nginx侧过滤掉OPTIONS请求,不转发给第三方接口,直接在Nginx就返回前端。前端就会认为OPTIONS请求成功了继续发送POST请求,此时Nginx将此次的POST请求真正转发给第三方接口。


location /test {
    if ($request_method = OPTIONS) {
        add_header Access-Control-Allow-Origin $http_origin; # 必须要有
        add_header Access-Control-Allow-Headers *; # 必须要有
        add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
        add_header Access-Control-Allow-Credentials true;
        return 200; # 204也可以,只要返回成功码即可
    }
    proxy_pass  http://abc.com/def;
}

你可能感兴趣的:(nginx,线上故障,nginx,前端,http)