跨域资源共享GET:'拒绝从响应中得到不安全的标题“etag”

时间:2011-04-28 17:56:47

标签: javascript ajax web-applications rest cors

没有自定义标头的简单GET请求。响应按预期返回。可以访问正文中的数据,但不能访问标题。

当我尝试访问“etag”标题时,浏览器会引发异常:

  

拒绝接受不安全的标题“etag”

Chrome,Safari和Firefox的行为都一样。我没有在IE上测试它。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:80)

使用CORS时只暴露简单的响应头。简单的响应标头定义为hereETag不是简单的响应标头。如果要公开非简单标头,则需要设置Access-Control-Expose-Headers标头,如下所示:

Access-Control-Expose-Headers: ETag

但请注意,我注意到Chrome,Safari和Firefox中的错误会阻止非简单标题正确显示。现在可以修复,我不确定。

您不需要执行预检请求,因为只有非GET / POST http方法或非简单请求标头需要预检(并且您询问响应) 标题)。

答案 1 :(得分:2)

你有没有尝试过AJAX 2.0(跨域共享)是W3C最近推出的一种方法:http://www.w3.org/TR/XMLHttpRequest2/#ref-cors

此外还有另一种方法,即JSON-P,它就像一个JSON请求,但您可以将它用于跨域:http://en.wikipedia.org/wiki/JSONP

如果没有正确设置,两者都可能对网站所有者非常危险。因此在使用时要小心。

[PS] 不确定这是否有帮助:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html