我正在使用角度服务通过rest api获取资源。服务器将ETag
header 设置为某个值,并且还在响应中设置Cache-Control: no-cache
。
使用Firefox可以正常工作,但是当我使用Chrome浏览器访问同一应用程序时,它没有发送If-None-Match
。我已经尝试在Mac和Ubuntu机器上使用当前的Chrome开发者和稳定版 channel ,并且在Firefox正确添加If-None-Match
时,两者都相同。
现在,有条件地提取了其他非xhr/static资源,并且所有这些请求都正确地获得了304 NOT MODIFIED
响应。
关于Chrome为什么不只为XHR请求发送If-None-Match
header ,我可以做些什么以获得更多信息?
最佳答案
如果您是通过HTTPS在Chrome浏览器中发布Ajax查询,则任何证书错误(例如在API服务器上使用自签名证书)都会阻止响应被缓存。这似乎是设计使然。
显然是Chrome defect existed,但在Webkit中是fixed,并在2010年左右进入了Chromium/Chrome。
另一个question建议使用jQuery的ifModified:true和cache:true选项手动设置If-Modified-Since和If-None-Match header 。不幸的是,这不会超出Chrome的预期行为,即不会缓存具有自签名证书的服务器的HTTPS响应。
使用有效的签名SSL证书在服务器上进行测试为我解决了该问题;使用默认的jQuery AJAX方法,Chrome收到了预期的304的文本/html内容。
关于ajax - chrome浏览器未为xhr发送 'If-None-Match',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18414477/