【发布时间】:2019-11-08 09:52:03
【问题描述】:
xhr 请求显示“显示临时标头”,而响应具有 CORS 标头:
Access-Control-Allow-Methods: POST
Access-Control-Allow-Origin: *
我也尝试过使用相同的端口(所以技术上不需要 CORS)。问题依然存在。奇怪的是,当我使用域名而不是 ip 时,有时问题会消失(但并非总是如此)。
虽然显示“临时标头”,但请求标头不会将 Accept-Encoding: gzip, deflate 发送到服务器,从而禁用压缩。
让我明确一点,我没有为我的请求设置Accept-Encoding。我说过,Accept-Encoding 在出现“显示临时标题”时不会发送。
【问题讨论】:
-
Accept-Encoding 是一个“禁止的标头名称”fetch.spec.whatwg.org/#forbidden-header-name 这意味着浏览器不会让您在前端 JavaScript 代码中设置它。它是浏览器自己控制的请求标头之一。也就是说,它本质上是一个保留的标头ー由浏览器保留供自己使用。
-
让我明确一点,我没有为我的请求设置 Accept-Encoding。我说过,出现“显示临时标题”时不会发送Accept-Encoding。
-
当您看到“显示临时标头”时,这几乎总是意味着浏览器没有(重新)通过网络发送对资源的请求,而是(重新)加载先前的-从浏览器缓存中缓存响应,否则整个请求将被取消。检查浏览器开发工具中的网络窗格。
-
@sideshowbarker 这是一个 xhr 请求,所以我怀疑它是否被缓存......我也确实收到了数据,只是没有压缩数据。
-
事实上 XHR 请求确实会被浏览器缓存。常常。并且浏览器会缓存未压缩的数据,因为浏览器本身会自动解压。一般来说,当浏览器检索接收到任何压缩响应时,是不会存储原始压缩响应的;相反,它将存储未压缩的结果 ー 因为这避免了每次从缓存重新加载时重新解压缩的成本。
标签: google-chrome cors gzip