为什么 HTTP 请求中的传输和请求头中的 content-length 不一样?

图片.png

我想判断一个 HTTP 请求一次传输了多少字节的数据

这个时候,我看到了两个,一个是传输大小,一个是 content-length

为什么这两个值不一样?是因为请求压缩了吗?

我传输的是两个 JPG 图片

图片.png

即便是开了压缩,但是 JPG 应该已经是压无可压了呀?

阅读 3.2k
1 个回答

有时候 Content-Length 的值可能与实际传输的数据量不一致。以下是一些可能导致 Content-Length 和传输数据量不一致的情况:

编码问题:Content-Length 是以字节为单位计算的,而某些字符可能占用多个字节进行编码。例如,在使用 UTF-8 编码时,某些特殊字符可能占用多个字节。如果请求中包含这样的字符,Content-Length 可能不会准确反映请求正文的实际长度。

压缩传输:如果请求正文经过压缩,例如使用 gzip 或 deflate 等压缩算法,那么 Content-Length 将指示压缩前的原始数据长度,而不是压缩后的传输数据长度。因此,在传输期间,数据将以压缩格式进行传输,所以实际传输的字节数将少于 Content-Length 中指定的字节数。

分块传输编码(Chunked Transfer Encoding):分块传输编码是一种在 HTTP 响应中常用的传输机制,可以将响应分割为一系列块,每个块都包含一段数据和其大小的描述。在使用分块传输编码时,Content-Length 将不会被发送,而是使用 Transfer-Encoding 头字段来指示使用了分块编码。因此,Content-Length 不会准确表示实际传输的字节数

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏