【问题标题】:Refused to set unsafe header "Cookie" error in browser yet request is successful拒绝在浏览器中设置不安全的标头“Cookie”错误但请求成功
【发布时间】:2017-02-16 02:19:24
【问题描述】:

我正在使用 Angularjs。当我使用 xhr.setRequestHeader() 设置 Cookie 标头时,我在 Chrome 上收到以下错误:

Refused to set unsafe header "Cookie"

但是,Cookie 包含在请求中并成功发送到服务器。我似乎已经正确配置了一切,以允许服务器和客户端上的 Cookie 标头:

对于服务器,我有这些:

Header add Access-Control-Allow-Credentials "true"

对于客户,我指定这些:

withCredentials

为什么会出现这个错误?

【问题讨论】:

  • 我猜是浏览器自己处理cookie头。
  • 嘿,谢谢,这是什么意思? :)
  • 我知道 Chrome 不允许你设置内容长度。它为你做到了。所以我想这可能与 cookie 标头相同。
  • @Mouser,我想就是这样!在我从代码中删除 setRequestHeader() 后,Cookie 标头仍会传递给服务器。谢谢!祝你好运!
  • @Maximus:你是怎么解决这个问题的?你能发布你的代码吗

标签: javascript angularjs


【解决方案1】:

您会从 Chrome 中收到该错误,因为根据 the XHR specificationsetRequestHeader 方法不应使用 forbidden header name 设置标头。

根据规范:

这些是被禁止的,所以用户代理仍然可以完全控制它们。

相反,对于 Angular 1.x,set the cookie 使用 $cookies,它将包含在后续的 xhr 请求中。

【讨论】:

    【解决方案2】:

    这个“模板”适合我


    打开开发者工具并尝试运行$.ajaxsetRequestHeader 放在beforeSend 方法中。
    <?php
      header('Content-Type: text/html; charset=UTF-8');
      header('Access-Control-Allow-Origin: *');
      header('Access-Control-Allow-Headers: *');
      header('Access-Control-Expose-Headers: *');
      header('Access-Control-Allow-Credentials: true');
    ?><!doctype html>
    <html lang="en-US">
      <head>
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
      </head>
      <body>
        <script defer="defer" src="https://code.jquery.com/jquery-git.js"></script>
      </body>
    </html>
    

    取自 Liberated HTML5W3C's Cross-Origin Resource Sharing

    【讨论】:

      【解决方案3】:

      如果您将 cookie 发送过来,我认为这就足够了。具有“跨域:真, withCredentials: 真 "解决了我也遇到的"拒绝设置不安全的标头"Cookie""的问题。即使警报消息仍然存在,但是我已经发送了cookie并得到了正确的响应。

      【讨论】:

      • 是的,一切正常,只是烦人的消息
      猜你喜欢
      • 2013-07-24
      • 2016-01-13
      • 2018-01-17
      • 1970-01-01
      • 2016-11-30
      • 2023-03-03
      • 2012-05-02
      • 2019-06-01
      相关资源
      最近更新 更多