拒绝得到不安全的标题“位置”

时间:2011-10-08 22:23:47

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

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

我向REST服务器发送ajax post请求以创建新模型。此请求的答案将为“HTTP / 1.1 201 Created”响应,标题为“Location: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头进行响应。

4 个答案:

答案 0 :(得分:5)

这是因为默认情况下,位置标头不会向调用客户端(在本例中为您的ajax代码)公开(它不安全')。要公开它,你必须返回额外的标题:

Access-Control-Expose-Headers: Location

这样浏览器就会公开它,所以客户端可以读取它。您可以添加多个逗号分隔的标头。更多关于它hereHere您可以阅读哪些方法,标题&内容类型安全(简单),不需要任何其他配置。

答案 1 :(得分:1)

我只是通过将新位置作为来自呼叫的值返回或让客户端代码知道新创建的项目的存储位置来解决它。

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

答案 2 :(得分:0)

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();

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

答案 3 :(得分:0)

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

<ExposeHeader>location</ExposeHeader>