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

时间:2013-08-24 02:58:35

标签: ajax google-chrome xmlhttprequest etag

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

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

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

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

1 个答案:

答案 0 :(得分:4)

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

显然,Chrome defect existed但在Webkit中为fixed,并在2010年左右进入Chromium / Chrome。

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

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