【问题标题】:chrome browser not sending 'If-None-Match' for xhrchrome 浏览器没有为 xhr 发送“If-None-Match”
【发布时间】:2013-08-27 04:37:21
【问题描述】:

我正在使用 Angular 服务通过 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 标头的信息?

【问题讨论】:

    标签: ajax google-chrome xmlhttprequest etag


    【解决方案1】:

    如果您在 Chrome 中通过 HTTPS 发出 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 方法按预期收到了 text/html 内容的 304。

    【讨论】:

      猜你喜欢
      • 2014-05-09
      • 2019-08-26
      • 1970-01-01
      • 2012-07-18
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      相关资源
      最近更新 更多