9

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

我向 REST 服务器发出 ajax 发布请求以创建新模型。此请求的答案将是“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”标头?

升级版:

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

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

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

4

4 回答 4

7

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

Access-Control-Expose-Headers: Location

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

于 2014-07-21T06:38:41.790 回答
2

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

<ExposeHeader>location</ExposeHeader>
于 2016-12-09T01:47:14.877 回答
1

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

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

于 2011-10-08T23:07:23.910 回答
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();

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

于 2011-10-08T23:16:01.667 回答