我在后端代码在响应头中设置了
Access-Control-Allow-Credentials : true
Access-Control-Allow-Origin:*
按照 CORS 的规则: https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS#附带凭证信息的请求 ,这个响应应该会失败。
但实际上结果是这样的
Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:*
Connection:keep-alive
Content-Length:2514
Content-Type:application/json
响应也成功了。
请大佬指教- -
1
ferrum 2017-02-15 15:15:43 +08:00 via iPhone
不太懂在问什么,但后端设置了这样的 header ,跨域请求时, withCredentials 为 true 的请求应该会带上 cookies 的。
|
2
Arrowing 2017-02-15 15:16:25 +08:00
如果是需要带 cookie 等验证信息的请求,请加上
xhrFields: { withCredentials: true } 参数,参照 jQuery1.5.1+的文档 http://www.css88.com/jqapi-1.9/jQuery.ajax/ |
3
ppy OP @ferrum 目的是想通过 CORS 的规则,让前端请求接口的时候带上 cookies ,所以设置了 Access-Control-Allow-Credentials : true 这样的响应头,同时之前设置的 Access-Control-Allow-Origin:*。这里按照文档应该会导致前端的这次请求失败,但结果是没有。
withCredentials:true 是 jq 里面请求带上验证信息,这我知道。 |
4
ppy OP @Arrowing 嗯 withCredentials: true 前端这样设置了,的确将 cookies 信息传递上来了,但我困惑的是 CORS 规则里面说到:给一个带有 withCredentials 的请求发送响应的时候, 服务器端必须指定允许请求的域名,不能使用'*'.如果响应头是这样的:Access-Control-Allow-Origin: * ,则响应会失败.
|
5
ferrum 2017-02-15 15:37:56 +08:00
噢,这个问题我以前也遇到过,正常情况下,浏览器会把响应拦截了,你是通过浏览器访问的吗,还是浏览器做了如 Chrome 的 disable-web-security 的设置?
|
6
ppy OP @ferrum Chrome 的 disable-web-security 的设置。
哦你这么一说这个设置我知道为什么我会困惑了,其实没有发生跨域的问题。 服务端这么设置了,前端开发的时候使用了 Chrome 的 disable-web-security 的设置,所以浏览器没有拦截响应。 而我访问已经上线的前端页面时,因为前后端都是部署在同一个 host 上的所以不存在跨域的问题。 那我还想在问一个问题,前端在本地开发的时候,会跨域,服务端的 Access-Control-Allow-Origin 应该如何设置呢, 前端的文件在浏览器都是电脑内文件的地址。 |
7
cfy 2017-02-15 16:32:38 +08:00
我最近也遇到 CORS 的问题,
如果服务端是 Nginx 的话,可以参考 https://gist.github.com/pauloricardomg/7084524 if ($http_origin ~* ( https?://.*\.example\.com(:[0-9]+)?$)) { add_header Access-Control-Allow-Origin: $http_origin; } |