nginx反向代理跨域请求头options问题

来源:赵克立博客 分类: 其它 标签:nginx发布时间:2018-12-14 16:32:34最后更新:2019-04-22 17:31:31浏览:5445
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。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请求返回时邮样要设置跨域的请求头,不然还会报错


微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python