nginx没办法跨域

之前发了一次没人回答,可能是问题描述的不太详细

在nginx服务器配置如下:

add_header Access-Control-Allow-Origin  $http_origin;
add_header Access-Control-Allow-Headers 'Cookie,Set-Cookie,token,x-requested-with,content-type,withcredentials';
add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,DELETE,PUT';
add_header 'Access-Control-Allow-Credentials' 'true';

ajax 也配置了 withCredentials = true

后端接口验证数据 如果验证失败返回httpCode 为 405
如果没有登录或者登录过期返回的httpCode 是 401

但是httpcode 不是200 接口访问就出现了禁止跨域的问题!!
有什么办法解决 服务端返回任意状态码都不会有问题???

阅读 4.6k
5 个回答

解决方案:在 add_header 语句最后加 always
详细说明:nginx add_header 语法:add_header name value [always];,可选的 always 表示无论返回 code 是多少都强制添加。
官方文档:http://nginx.org/en/docs/http...

接口设置代理试试

location /data {
    proxy_pass http://192.xxx.xx.xxx:3000;
}

emmm,看回答好像都是 php相关,那么请忽略。我是前端使用nginx做服务器。

ThinkPHP 5应该可以在中间件直接配置,不用去Nginx那么麻烦。

不知道那些点踩的人是什么心态。

clipboard.png

看了你的补充,发现是你服务端没有返回Access-Control-Allow-Origin这个头,nginx很久没配过了,估计是配置有问题,你可以在程序里做这个返回头的实现测试一下。

看看 $http_origin 这个变量的值是什么啊,这个很重要,况且 cors 一般不用在 webserver 里面配,web 框架里面都有中间件之类的来解决的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题