跨域资源共享 GET:从响应中拒绝获取不安全的标题“etag”。

61

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

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

拒绝获取不安全的标头 “etag”

Chrome、Safari 和 Firefox 都表现相同。我没有在 IE 上测试过。

我错过了什么?


更新:只有以下标题可访问:
  • 过期时间
  • 最后修改时间
  • 内容语言
  • 缓存控制
  • 内容类型
- Localist
如果有人想知道这个问题是什么时候被解决的,我已经在webkitchromium中找到了这些错误。 - rvignacio
2个回答

98

当使用CORS时,只有简单的响应头会被暴露出来。这里定义了简单的响应头:点击这里ETag不是一个简单的响应头。如果要暴露非简单的响应头,则需要设置Access-Control-Expose-Headers头,像这样:

Access-Control-Expose-Headers: ETag

请注意,我注意到Chrome、Safari和Firefox存在错误,防止非简单标题正确地显示。这个问题现在可能已经得到修复,但我不确定。

你不需要进行预检请求,因为预检只针对非GET/POST HTTP方法或非简单的请求头部(而你正在询问响应头部)。


4
我确认支持Access-Control-Expose-Headers头信息的功能有缺陷。 - Localist
2
我很想知道为什么Last-Modified比ETag简单。它们不应该支持相同的目的,即缓存优化吗? - Localist
1
你说得很有道理。我不知道背后的动机,但这里有一个提到它的线程(我还没有阅读):http://lists.w3.org/Archives/Public/public-webapps/2010AprJun/0038.html - monsur
1
我在设计可恢复上传协议时遇到了这个问题。'Content-Length' 被认为是一个不安全的头部,在 http "HEAD" 请求中获取它会出现问题;真是太糟糕了。只有 Safari 的夜间版本似乎尊重 'Access-Control-Expose-Headers' 头部。哎呀,万维网。 - Cyclone
谢谢。对我有用。但是当我调用wso2 api管理器的url时,同样的错误会重复出现。你能帮我吗? - Arun M R Nair
显示剩余3条评论

2

2
你看了问题的标题吗?它应该是CORS。 - mplungjan
抱歉,说实话我没有注意到。但仍然可以使用JSONP。 - DarkMantis
当然可以,但了解发生了什么很有趣。特别是因为在处理错误时,JSONP非常糟糕。 - mplungjan
是的,我不能不同意你的看法。然而,由于我没有太多与CORS相关的工作经验,所以我并不是最擅长它的人。不过,我想向他们提供一些阅读材料和一些想法。 - DarkMantis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接