【问题标题】:Cookies not in header when file requested by import导入请求的文件时 Cookie 不在标头中
【发布时间】:2017-11-27 22:58:31
【问题描述】:

当我在给定的代码示例(ES6 导入)中使用 chromium 或 firefox 请求我的文件时,我在服务器端收到相应的请求,但与“正常”脚本加载相反(通过带有 src 的脚本标签)标题中没有提供cookie,这正常吗?如果是这样:如果我有基于 cookie 的身份验证,我应该如何将此请求与会话相关联?

不起作用 - 因为浏览器没有随请求发送已建立的 cookie:

<script type="module">
  import '/index.js';
</script>

Works - 浏览器随请求发送 cookie:

<script src="/index.js">
</script>

【问题讨论】:

    标签: javascript cookies session-cookies chromium es6-modules


    【解决方案1】:

    我自己想通了:

    您必须在脚本标签中添加“crossorigin”属性:

    <script type="module" crossorigin>
      import '/index.js';
    </script>
    

    这是因为 es6 模块导入以某种方式在 CORS 下进行,即使对模块脚本的请求转到同源。并且 CORS 不会发送模块脚本请求的凭据。 ...除非你把 crossorigin 属性。

    Jack Archibald 的这篇文章对我帮助很大(提到的浏览器问题自然不再是最新的了):

    https://jakearchibald.com/2017/es-modules-in-browsers/

    【讨论】:

    • 这个答案值得更多的代表
    【解决方案2】:

    您可以将 cookie 放在窗口上以使其可见,否则浏览器只会发送带有请求的标头。比如……

    const window.cookie = document.cookie;

    【讨论】:

    • 我已经按照你的建议做了,并确保在 index.js 的请求发出之前 cookie 位于 window 对象上。但是请求到达服务器时仍然没有会话cookie:(
    • 你是在使用 angular 还是类似的东西?
    • 不,我在客户端只有启用了 jquery 和 modles 标志,在服务器端我有 node.js
    • 只是想说,我还在这里挣扎。在请求从服务器导入文件时,如何确保浏览器发送带有标头的已建立 cookie(如他通常所做的那样)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    • 2013-08-29
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    相关资源
    最近更新 更多