nginx反向代理跨域请求头options问题
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2019-04-22 17:31:31
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
问题描述
在项目中遇到一个问题,axios跨域请求的时候会先发一个options请求来验证可以使用的请求头,然后再发送真证的请求,服务器是使用的php开的的。。响应的options的请求代码如下
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Headers: Authorization,Access-Token, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-Requested-With'); header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE'); header("HTTP/1.0 200 OK"); exit(0); }
直接返回头信息,不用输出内容。然后本地测试的时候就可以啦。。。于是上线到服务器使用,但是出问题啦。options这个请求老是报错也没有看到响应的上面设置的头信息,于是就调试输出看 $_SERVER['REQUEST_METHOD'] 到底输出什么东西,options请求服务器居然输出啦 GET 请求 ,然后才想到服务器里用啦 nginx 反向代理,
解决方法
在nginx中设置options的响应请求,配置如下
server { listen 80; server_name www.aaaaa.com; location / { if ( $request_method = 'OPTIONS' ) { add_header Access-Control-Allow-Origin $http_origin; add_header Access-Control-Allow-Headers Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Data-Type,X-Requested-With; add_header Access-Control-Allow-Methods GET,POST,OPTIONS,HEAD,PUT; add_header Access-Control-Allow-Credentials true; add_header Access-Control-Allow-Headers X-Data-Type,X-Auth-Token; return 200; } proxy_pass http://www.bbbi.com:8080; index index.html index.php index.htm; } }
注意事项
跨域请求的时候options请求可以直接返回对应的跨域头后就结束脚本,当第二次请求真正的数据get/post请求返回时邮样要设置跨域的请求头,不然还会报错