2011-10-08 51 views
6

我有一个网站和我的REST api服务器。拒绝获取不安全标题“位置”

我做ajax post请求到REST服务器来创建新模型。对此请求的答案将为“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:

网站URL http://www.mydomain.com/

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

原始URI用于AJAX POST请求,这与新的Location头响应。

+0

什么是原始URL,什么是新的位置的URL? –

回答

1

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

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

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

如果这样不行,让我知道:-)

+1

谢谢Stian,但我知道如何使用PHP添加位置标题。问题在于跨域策略或类似的东西。 我得到的错误'不肯不安全头“位置”'在浏览器控制台,而不是通过新的URI去。 –

4

这是因为Location头不暴露于调用客户端(在此事例你的ajax代码)默认情况下(这是'不安全')。要公开它,你必须返回额外的标题:

Access-Control-Expose-Headers: Location 

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

0

对于Amazon S3上传(通过悬浮窗例如),你需要这在CORS配置。

<ExposeHeader>location</ExposeHeader> 
相关问题