【问题标题】:Larger payloads with content and accept encoding headers具有内容并接受编码标头的更大有效负载
【发布时间】:2019-09-13 19:06:12
【问题描述】:
我有一个用例,
- 我从客户端服务器向 REST API 发出 POST 请求,负载大小为 20-30MB,请求标头包含设置为 gzip 的内容编码,因此它在 n/w 级别被压缩
- 除此之外,我是否需要在 API 级别启用 gzip 压缩?
- 现在,假设上述 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 标头即时压缩。