我正在使用角度服务通过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
标头的更多信息?
答案 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内容。