【问题标题】:Refused to get unsafe header "Location"拒绝获取不安全的标题“位置”
【发布时间】:2011-12-03 17:59:38
【问题描述】:

我有一个网站和我的 REST api 服务器。

我向 REST 服务器发出 ajax 发布请求以创建新模型。此请求的答案将是“HTTP/1.1 201 Created”响应,标题为“位置:http://myapi.com/some/path/111” 但我收到错误消息Refused to get unsafe header "Location"。我知道这是因为跨域访问策略和其他 bla bla bla。

有人知道怎么解决吗?也许我必须在响应中添加“Access-Controll-Allow-SOMETHINGHERE”标头?

UPD:

网址http://www.mydomain.com/

原始 URI 是 http://api.mydomain.com/model/,新位置 URI 是 http://api.mydomain.com/model/211

原始 URI 用于 ajax POST 请求,该请求使用新的 Location 标头进行响应。

【问题讨论】:

  • 原始 URL 是什么,新的 Location URL 是什么?

标签: php javascript ajax google-closure cross-domain-policy


【解决方案1】:

这是因为 Location 标头默认不暴露给调用客户端(在这种情况下是您的 ajax 代码)(它是“不安全的”)。要公开它,您必须返回额外的标题:

Access-Control-Expose-Headers: Location

这样浏览器会暴露它,所以客户端可以读取它。您可以在那里添加多个逗号分隔的标题。更多关于它hereHere 您可以阅读哪些方法、标头和内容类型是安全的(简单)并且不需要任何额外的配置。

【讨论】:

  • 你能在完整的代码中显示这个吗?
  • @EvanErickson 这取决于您使用的后端语言。对于使用 Servlet 过滤器的 java,您可以使用 HttpServletResponse.setHeader("Access-Control-Expose-Headers", "Location"); 在 PHP 中我相信您可以使用 header('Access-Control-Expose-Headers: Location'); 但是我不推荐这种手动方法。您应该使用一个完整的组件,它在您的应用程序中添加对 CORS 的支持并允许配置允许的方法/标头(对于 Java:github.com/…
  • 是的,很遗憾没有人告诉 BlueSnap。那家公司有一个信用卡 api,它要求您从位置标头中获取响应......为什么他们没有将有效负载放在响应的正文中,我永远不会知道。他们希望您解析标头。糟糕的公司。
【解决方案2】:

对于 Amazon S3 上传(例如通过 Dropzone),您需要在 CORS 配置中使用它。

<ExposeHeader>location</ExposeHeader>

【讨论】:

    【解决方案3】:

    我只是解决它,要么通过调用将新位置作为值返回,要么让客户端代码知道新创建的项目的存储位置。

    另一种选择是为原始域上的调用创建代理。

    【讨论】:

      【解决方案4】:
      header Location: http://myapi.com/some/path/111"
      

      那段代码完全错误。使用它是正确的,或者几乎是正确的。

      试试这个:

      header("Location: http://myapi.com/some/path/111");
      

      header("Location: http://myapi.com/some/path/111"); exit();
      

      如果这不起作用,请告诉我:-)

      【讨论】:

      • 感谢 Stian,但我知道如何使用 PHP 添加 Location 标头。问题出在跨域策略或类似的东西上。我在浏览器控制台中收到错误 Refused to get unsafe header “Location”,而不是通过新的 URI。
      猜你喜欢
      • 2017-01-22
      • 2013-05-06
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2014-03-02
      相关资源
      最近更新 更多