我是出现幻觉了吗 我记得 allow-origin/allow-headers 不是被禁止用 * 了吗

2020-06-30 17:49:23 +08:00
 dzdh
记得之前项目需要跨域 php 程序里写 header

access-control-allow-origin: *

chrome console 会报错,大概说 必须明确写明允许哪个 origin ( http://origin-domain) 星号的写法即将被抛弃啥的

刚才在阿里云的 cdn 里试了试 直接在后台配置 http response header 里设置 allow-origin:*, allow-headers:* 居然可以正常在 chrome 里使用,跨域都没问题,也没发起 options 请求 这是什么神奇原理?

chrome 版本:83.0.4103.116
1782 次点击
所在节点    问与答
14 条回复
xiaowei0823
2020-06-30 17:52:39 +08:00
用 Firefox 试试
dzdh
2020-06-30 18:01:45 +08:00
dzdh
2020-06-30 18:02:31 +08:00
@xiaowei0823 没报错。。。network 栏正常 response 内容输出正常 $.ajax 也正常
mxT52CRuqR6o5
2020-06-30 18:41:56 +08:00
@dzdh 简单请求,允许*,复杂请求不行,就是那些会触发 options 的就不行
dzdh
2020-06-30 18:50:43 +08:00
@mxT52CRuqR6o5

https://i.loli.net/2020/06/30/aXKISxj1LGp8Jgu.png

并没有……

chrome 同样……就不发图了
Vegetable
2020-06-30 18:53:32 +08:00
是的,你记错了
是这里
https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Requests_with_credentials
某些特殊情况不能是通配符
Vegetable
2020-06-30 18:55:01 +08:00
附带身份凭证的请求与通配符
对于附带身份凭证的请求,服务器不得设置 Access-Control-Allow-Origin 的值为“*”。

这是因为请求的首部中携带了 Cookie 信息,如果 Access-Control-Allow-Origin 的值为“*”,请求将会失败。而将 Access-Control-Allow-Origin 的值设置为 http://foo.example,则请求将成功执行。
yhxx
2020-06-30 19:06:47 +08:00
只有 withCredentials 的时候才不能是*吧
ihipop
2020-06-30 19:31:13 +08:00
那只是阿里云的配置,不等于实际的响应,不信你 F12 看下真正请求的响应。
fe619742721
2020-06-30 19:31:48 +08:00
Safari 有这个限制
dzdh
2020-07-01 08:50:30 +08:00
@ihipop 看上面截图
dzdh
2020-07-01 08:50:41 +08:00
@fe619742721 实测并没有
dzdh
2020-07-01 08:56:10 +08:00
@Vegetable
确实是, credentials:'include' 就报错了
fe619742721
2020-07-01 09:47:00 +08:00
@dzdh 额,应该是 iOS12 或者 11 的手机 Safari 上有这个限制,之前定位过这个问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/685992

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX