ajax - chrome浏览器未为xhr发送 'If-None-Match'

标签 ajax google-chrome xmlhttprequest etag

我正在使用角度服务通过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/

相关文章:

docker - 使用 docker 安装 google-chrome-stable

ajax - Firefox 插件 - 如何在 Chromeworker 中使用 XMLHttpRequest?

XMLHttpRequest 中表单数据的 Javascript 二进制字符串连接

javascript - 脚本未在 Ajax 回发时执行

javascript - 如何在不使用阻止默认值的情况下停止表单执行?

在函数完成之前触发 Javascript 回调(无 jQuery)

javascript - 如何从主选项卡在新选项卡上运行功能? (谷歌浏览器)

html - CSS 渐变在 Chrome 49 中不起作用

c# - 如何在 AJAX 回调(回发)期间生成 JavaScript,然后在浏览器上执行它?

javascript - 同一域(localhost)上的XHR跨域错误