golang 做服务端, nginx做跨域设置, get行 post不行

发布于 2022-09-11 22:13:53 字数 1134 浏览 26 评论 0

server {
    listen       80;
    server_name  dev.ss.soholly.com;

    error_log  /usr/local/etc/nginx/logs/dev_coupon.log;

    location / {
        proxy_connect_timeout 1000;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host            $http_host;
        proxy_http_version 1.1;
        proxy_set_header Connection "";

        if ($http_origin ~ soholly\.com(:\d+)?$) {
            add_header 'Access-Control-Allow-Origin' "$http_origin";
            add_header 'Access-Control-Allow-Credentials' "true";
        }

        proxy_pass http://http_ss_soholly;
    }
}
upstream http_ss_soholly {
    server 127.0.0.1:7000;

    keepalive 256;
}

如上是我的nginx内容, get请求可以访问, post请求就跨域了, 好奇怪

屏幕快照 2019-09-05 上午10.21.26
clipboard.png

屏幕快照 2019-09-05 上午10.22.47
clipboard.png

屏幕快照 2019-09-05 上午10.23.46
clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

爱人如己 2022-09-18 22:13:53

POST请求之前会有一次OPTIONS请求,因此你需要加一条配置:

add_header Access-Control-Allow-Methods 'POST,OPTIONS,GET';

另外,你要看一下客户端请求有没有自定义请求头,如果自定义了请求头,还需要加一条:

add_header Access-Control-Allow-Headers "需要的请求头";

如果你不需要客户端提交 cookie ,需要删除:

add_header 'Access-Control-Allow-Credentials' "true";

实际的配置应该是:

add_header 'Access-Control-Max-Age' 60;
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD";
add_header "Access-Control-Allow-Headers" "Accept,User-Agent,X-Requested-With,Content-Type";

你可以参考这篇文章: https://segmentfault.com/a/11...

眉黛浅 2022-09-18 22:13:53

nginx少了几个响应头,完整的如下,包跨域成功

add_header "Access-Control-Allow-Origin" "$http_origin";
add_header "Access-Control-Allow-Credentials" "true";
add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, DELETE, PATCH, PUT, HEAD";
add_header "Access-Control-Allow-Headers" "DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type";
月野兔 2022-09-18 22:13:53

浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。

非简单请求的CORS请求,会在正式通信之前,增加一次HTTP查询请求,称为"预检"请求(preflight)。

"预检"请求用的请求方法是OPTIONS,表示这个请求是用来询问的。头信息里面,关键字段是Origin,表示请求来自哪个源。

具体看下这篇文章就明白了:跨域资源共享 CORS 详解

简美 2022-09-18 22:13:53

加一条 Access-Control-Allow-Methods的配置试试

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文