iframe设置CDN_CREDENTS Cookie后,跨域加载cdn.js时的Cookie读写咨询
嘿,我来帮你拆解这两个关于跨域Cookie和资源加载的问题,结合浏览器的同源策略和Cookie机制给你讲清楚:
问题1:加载cdnsite.com/cdn.js时,后端能从请求头读到CDN_CREDENTS吗?
答案是不能,核心原因在于跨域请求的Cookie规则:
- 你在
cdnsite.com的iframe里设置的CDN_CREDENTS确实是属于cdnsite.com域的Cookie,但differentsite.com去加载cdnsite.com/cdn.js是典型的跨域资源请求——发起请求的页面是differentsite.com,资源归属域是cdnsite.com。 - 浏览器对于
<script>标签发起的跨域资源请求,默认不会携带目标域的Cookie。而且和XMLHttpRequest/fetch不同,<script>标签没法设置withCredentials来强制携带Cookie,哪怕你把Cookie的SameSite设为None并加上Secure属性也没用。所以后端处理cdn.js的请求时,请求头里不会有这个Cookie,自然读不到。
问题2:返回cdnsite.com/cdn.js时,后端能通过响应头设置cdnsite.com的Cookie吗?
可以,但得满足几个浏览器的Cookie策略要求:
- 首先,响应头的
Set-Cookie要指定正确的Domain(比如Domain=cdnsite.com),如果不指定,默认就是资源所在的cdnsite.com,也没问题。 - 如果你的站点用的是HTTPS,必须给Cookie加上
Secure属性,不然浏览器会拒绝设置。 - 因为是从
differentsite.com发起的跨域请求,Cookie的SameSite属性得设为None——不然浏览器会因为第三方Cookie的限制而不生效。 - 另外要注意,现在很多浏览器默认限制第三方Cookie,可能需要用户手动允许,或者你的
cdnsite.com属于浏览器认可的可信第三方(比如正规CDN),才能顺利设置。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

