当导入请求文件时,Cookie 不在 header 中
Cookies not in header when file requested by import
当我像在给定的代码示例(ES6 导入)中那样使用 chromium 或 firefox 请求我的文件时,我在 server-side 上收到了相应的请求,但与 "normal" 脚本加载相反(通过带有 src 的脚本标签)header 中未提供 cookie,这正常吗?如果是这样:如果我有基于 cookie 的身份验证,我应该如何将此请求与 session 相关联?
不起作用 - 因为浏览器没有发送已建立的 cookie 和请求:
<script type="module">
import '/index.js';
</script>
有效 - 浏览器随请求发送 cookie:
<script src="/index.js">
</script>
您可以将 cookie 放在 window 上以使其可见,否则浏览器只会发送 headers 请求。像...
const window.cookie = document.cookie;
我自己想出来了:
您必须将 "crossorigin" 属性添加到脚本标签中:
<script type="module" crossorigin>
import '/index.js';
</script>
这是因为 es6 模块导入以某种方式在 CORS 下进行,即使对模块脚本的请求是同源的。并且 CORS 不会发送模块脚本请求的凭据。 ...除非你把 crossorigin 属性。
Jack Archibald 的这篇文章对我帮助很大(自然提到的浏览器问题已经不是最新的了):
当我像在给定的代码示例(ES6 导入)中那样使用 chromium 或 firefox 请求我的文件时,我在 server-side 上收到了相应的请求,但与 "normal" 脚本加载相反(通过带有 src 的脚本标签)header 中未提供 cookie,这正常吗?如果是这样:如果我有基于 cookie 的身份验证,我应该如何将此请求与 session 相关联?
不起作用 - 因为浏览器没有发送已建立的 cookie 和请求:
<script type="module">
import '/index.js';
</script>
有效 - 浏览器随请求发送 cookie:
<script src="/index.js">
</script>
您可以将 cookie 放在 window 上以使其可见,否则浏览器只会发送 headers 请求。像...
const window.cookie = document.cookie;
我自己想出来了:
您必须将 "crossorigin" 属性添加到脚本标签中:
<script type="module" crossorigin>
import '/index.js';
</script>
这是因为 es6 模块导入以某种方式在 CORS 下进行,即使对模块脚本的请求是同源的。并且 CORS 不会发送模块脚本请求的凭据。 ...除非你把 crossorigin 属性。
Jack Archibald 的这篇文章对我帮助很大(自然提到的浏览器问题已经不是最新的了):