已知服务端配置了 access-control-allow-origin 为 * ,不允许带凭证的跨源请求,但是从 a.com:123 网页点击按钮后,经过 options 预检还是成功向 a.com:456/api 发送了带凭证的 post ,我自己用 fetch 伪造的时候就被 cors 拦截,提示 access-control-allow-origin 不能配置为*。
最后手动禁用 Chrome 的安全检查后才可以,想请教下这是什么原因,是网页自身代码不需要 cors 检查吗?
1
hhhfffhhh 44 天前
|
2
lyxxxh2 44 天前
如果请求需要身份验证(例如 Cookies ),则不能使用 *。在这种情况下,服务器必须返回特定的域名,而不是通配符。 -- 来自 gpt
猜测你 fetch 带了 cookie,我都没注意过这些问题。 别用*,恶心人的东西,增加心智负担。 请求头有来源地址,直接原样返回。 |
3
CLMan 44 天前
因为 fetch 和 超链接跳转 是两种不同的跨源网络访问,对浏览器而言,会采取不同的跨源安全访问限制策略。前者由脚本触发,后者由用户点击跳转,所以浏览器对于前者会更严。
更细节的需要爬文档: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS 。以及多做测试,CORS 涉及到安全,不同品牌的浏览器在一些细节上存在差异,需要自己整理。 |