【发布时间】:2011-08-14 22:40:31
【问题描述】:
没有自定义标头的简单 GET 请求。响应按预期返回。可以访问正文中的数据,但不能访问标题。
当我尝试访问“etag”标头时,浏览器会引发异常:
拒绝获取不安全的标头“etag”
Chrome、Safari 和 Firefox 的行为都相同。我没有在IE上测试过。
我在这里错过了什么?
【问题讨论】:
标签: javascript ajax web-applications rest cors
没有自定义标头的简单 GET 请求。响应按预期返回。可以访问正文中的数据,但不能访问标题。
当我尝试访问“etag”标头时,浏览器会引发异常:
拒绝获取不安全的标头“etag”
Chrome、Safari 和 Firefox 的行为都相同。我没有在IE上测试过。
我在这里错过了什么?
【问题讨论】:
标签: javascript ajax web-applications rest cors
使用 CORS 时仅公开简单的响应标头。简单的响应标头定义为here。 ETag 不是一个简单的响应头。如果要暴露非简单的标头,则需要设置Access-Control-Expose-Headers 标头,如下所示:
Access-Control-Expose-Headers: ETag
但是,请注意,我注意到 Chrome、Safari 和 Firefox 中的错误会阻止非简单标头正确公开。这可能现在已经解决了,我不确定。
您不需要进行预检请求,因为只有非 GET/POST http 方法或非简单的 request 标头才需要预检(并且您正在询问 response 标题)。
【讨论】:
您是否尝试过 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
【讨论】: