Chrome浏览器没有为xhr发送'If-None-Match'

HK_*_*HK_ 8 ajax etag google-chrome xmlhttprequest

我正在使用角度服务来通过rest api获取资源.服务器将ETag标头设置为某个值,并且还设置Cache-Control: no-cache其响应.

这可以使用Firefox正常工作,但是当我使用Chrome访问同一个应用程序时,它不会发送If-None-Match.我已经在Mac和Ubuntu盒子上尝试了当前的Chrome开发者和稳定的频道,两者都是一样的,而Firefox If-None-Match正确添加了.

现在,有条件地获取其他非xhr /静态资源,所有这些请求都正确获得304 NOT MODIFIED响应.

我是否可以采取任何措施来获取有关Chrome为何If-None-Match仅针对XHR请求发送标头的更多信息?

Dar*_*ren 5

如果您是通过HTTPS在Chrome浏览器中发布Ajax查询,则任何证书错误(例如在API服务器上使用自签名证书)都会阻止响应被缓存。这似乎是设计使然。

显然存在Chrome缺陷 但已在Webkit 中修复了缺陷,并在2010年左右将其纳入Chromium / Chrome。

另一个问题建议使用jQuery的ifModified:true和cache:true选项手动设置If-Modified-Since和If-None-Match标头。不幸的是,这不会超越Chrome的预期行为,即不缓存具有自签名证书的服务器的HTTPS响应。

使用有效的签名SSL证书在服务器上进行测试为我解决了该问题;Chrome使用默认的jQuery AJAX方法收到了预期的304文本/ html内容。