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

IT技术 javascript ajax web-applications rest cors
2021-03-01 18:44:25

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

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

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

Chrome、Safari 和 Firefox 的行为都相同。我没有在 IE 上测试它。

我在这里错过了什么?

2个回答

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

Access-Control-Expose-Headers: ETag

但是,请注意,我注意到 Chrome、Safari 和 Firefox 中的错误会阻止非简单标头正确公开。这可能现在已经解决了,我不确定。

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

你说的对。我不知道它背后的动机,但这里有一个线程提到它(我还没有读过):lists.w3.org/Archives/Public/public-webapps/2010AprJun/...
2021-04-19 18:44:25
我在设计可恢复上传协议时遇到了这个问题。'Content-Length' 被认为是响应 http “HEAD” 请求的“不安全”标头;多么沉重。只有 Safari nightlies 似乎尊重“Access-Control-Expose-Headers”标题。耶万维网。
2021-04-29 18:44:25
我很想知道是什么让 Last-Modified 变得简单而不是 ETag。他们不应该支持缓存优化的相同目的吗?
2021-05-03 18:44:25
我确认对 Access-Control-Expose-Headers 标头的支持有问题。
2021-05-06 18:44:25
谢谢。它为我工作。但是当我调用 wso2 api 管理器 url 时,重复相同的错误。你能帮助我吗
2021-05-09 18:44:25

你有没有试过 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

是的,我不能不同意你的看法。但是,我不是最擅长 CORS 的,因为我没有过多地使用它。我想我会以他们的方式漂浮一些阅读材料和一些想法。
2021-04-21 18:44:25
oop,如果我说实话,我真的没有注意到。但仍然可以使用 JSONP
2021-05-10 18:44:25
你读过问题的标题了吗?它应该是 CORS
2021-05-15 18:44:25
当然,但知道发生了什么很有趣。特别是因为 JSONP 在错误处理方面很糟糕
2021-05-15 18:44:25