【问题标题】:Larger payloads with content and accept encoding headers具有内容并接受编码标头的更大有效负载
【发布时间】:2019-09-13 19:06:12
【问题描述】:

我有一个用例,

  1. 我从客户端服务器向 REST API 发出 POST 请求,负载大小为 20-30MB,请求标头包含设置为 gzip 的内容编码,因此它在 n/w 级别被压缩
  2. 除此之外,我是否需要在 API 级别启用 gzip 压缩?
  3. 现在,假设上述 POST 请求成功地将较大的有效负载写入数据库,并且当我尝试将数据检索回客户端时,这又是一个 POST 请求(这就是它的设计方式,请进行 POST请求检索数据),我是否需要将检索数据的 POST 请求标头设置为接受编码:gzip

REST API 是一个 node/express 应用程序,数据库是 cassandra。

【问题讨论】:

    标签: node.js rest express http-headers


    【解决方案1】:

    我认为您误解了它的工作原理。

    请求标头包含设置为 gzip 的内容编码,因此它在 n/w 级别被压缩

    这意味着您的客户端正在压缩负载。不是网络。 content-encoding HTTP 标头告诉对方发送正文的格式,而不是您希望发送正文的格式。通常,HTTP 客户端、服务器或库会为您处理所有这些。

    除此之外,我是否需要在 API 级别启用 gzip 压缩?

    没有。如果客户端已经在压缩它,在客户端代码中(可能使用标准的 HTTP 库),在你的代码中再次压缩它没有任何好处。

    现在,假设上述 POST 请求成功地将较大的有效负载写入数据库,并且当我尝试将数据检索回客户端时,这又是一个 POST 请求(这就是它的设计方式,请进行 POST请求检索数据),我是否需要将检索数据的POST请求标头设置为accept-encoding:gzip

    如果您的客户端可以处理 gzip,那么它应该自动设置accept-encoding: gzip。然后,如果您的服务器可以提供 gzip 压缩包,它就会提供。 accept-encoding 标头是客户端可以发送的可选信息位,以让服务器知道客户端的功能。这是一个提示(“嘿,我可以接受 gzip 压缩的回复,所以如果你愿意,可以使用它”)并且不是必须遵守的命令(即它不是“你必须以 gzip 格式发送给我")。

    文件在服务器上的实际存储方式完全取决于您的应用程序,但通常会以解压缩的方式存储它,这样它就可以交付给不处理 gzip 的客户端,或者那些处理 gzip 的客户端,或者那些处理其他压缩格式,如 brotli。然后,Web 服务器通常会根据请求中的 accept-encoding 标头即时压缩。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-24
      • 1970-01-01
      • 2020-09-16
      • 1970-01-01
      • 2019-04-03
      • 1970-01-01
      • 2021-09-14
      • 2018-07-09
      相关资源
      最近更新 更多