【问题标题】:Do browsers ignore "Accept-Encoding" header?浏览器会忽略“Accept-Encoding”标头吗?
【发布时间】:2020-09-11 22:16:46
【问题描述】:

我有一个 React 应用程序以这种方式从服务器获取数据:

fetch('http://localhost:5000/records',{
  method:'GET',
  headers:{
      'ACCEPT':'application/json',
      'Content-Type':'application/json'
  }
})
.then(response => response.json())
        .then(data => {
            this.setState({
                records: data,
            });
        });

}

检查网络活动(开发工具 Chrome/Firefox),我看到了:

我可以将“Accept-Encoding”添加到我的请求标头并为其赋予任何值,或者我可以将其从标头中完全删除。无论我做什么,检查网络活动总是显示我的请求标头接受 gzip、deflate 和 br。这是正常的吗?有没有办法让 fetch 告诉服务器它不需要任何响应编码?

我尝试按照here 的描述为 gzip 赋予 0 的 qvalue,但我仍然在网络选项卡中看到相同的结果。

      headers:{
      'ACCEPT':'application/json',
      'Content-Type':'application/json',
      'Accept-Encoding': 'gzip; q=0'
  }

【问题讨论】:

    标签: javascript reactjs react-native fetch


    【解决方案1】:

    接受编码是a Forbidden Header。 JavaScript 无法更改它。

    由于网页的作者不知道浏览器能够解码哪些编码,因此无论如何设置它通常没有用。

    【讨论】:

    • 但是这个怎么样? “当客户端可以处理压缩内容时,客户端必须通过在请求中发送 Accept-Encoding 标头来通知服务器其功能。” - docs.microsoft.com/en-us/aspnet/core/performance/…
    • 那怎么样?这和我说的一点都不矛盾。它特别支持这个答案的第二段。
    • 服务器使用自定义编码实现并返回带有Content-Encoding: mycustomcompression 标头的响应。客户端知道这一点(因为它们都是我的)并提交带有Accept-Encoding: mycustomcompression 标头的请求。但是 accept-encoding 标头似乎被忽略了。我在检查网络流量时看到的只有 gzip、deflate 和 br。
    • 如果你编写了一个支持mycustomcompression的自定义浏览器,那么它应该在Accept-Encoding标头中发送,而不需要客户端JS的干预。如果您还没有编写自定义浏览器,那么我看不出如何在传输层添加对附加编码的支持,这就是 Accept-Encoding 标头所适用的。
    • 所以说,“客户端必须通过在请求中发送 Accept-Encoding 标头来通知服务器它的功能”,它们的意思是“客户端”,就像在浏览器中一样本身,而不是客户端/服务器应用程序,即反应应用程序?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多