当前位置: 首页 > 知识库问答 >
问题:

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

应翰飞
2023-06-26

图片.png

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

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

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

我传输的是两个 JPG 图片

图片.png

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

共有1个答案

闻人河
2023-06-26

有时候 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 不会准确表示实际传输的字节数

 类似资料:
  • 我正在尝试设置Azure Application Insights以监视Azure App Services中承载的ASP.NET Core Web App和Web API的以下指标的性能计数器: null 我相当肯定Application Insights的配置是正确的,因为我可以看到门户中显示的其他度量。是不是有什么原因,这些特定的度量似乎没有出现?我甚至尝试使用一个默认的ASP.NET核心模

  • 我正在使用RestTemplate方法将请求发布到endpoint。我在不同的文件中有和,我想把它们传递给POST请求,除此之外,我还想把传递给endpoint。 我能够成功地传递头和请求,但不能传递包含凭据的Http实体 有没有办法让我三样东西都及格 > HttpHeader 要求 这是我的密码 以下代码位于NewHttpHeader中。包含和

  • 我的应用程序中有一个特定的请求需要基本身份验证,所以我需要为该请求设置授权头。我读过关于设置HTTP请求头的内容,但据我所知,它将为该方法的所有请求设置该头。我的代码中有这样的内容: 但我不希望我的每一个帖子请求都发送这个标题。有没有办法只为我想要的一个请求发送标题?还是在我提出请求后必须将其移除?

  • HTTP规范说; HTTP访问身份验证在“HTTP身份验证:基本和摘要访问身份验证”[43]中进行了描述。如果请求经过身份验证并指定了一个领域,则相同的凭据应该对该领域内的所有其他请求有效(假设身份验证方案本身不需要其他凭据,例如根据质询值变化的凭据或使用同步时钟)。 我真的不明白这意味着什么,但这是我的情况,这里有反对 HTTP 规范的东西吗?我使用 Java Rest 服务 客户端使用HTTP

  • 问题内容: 我的JavaScript应用程序需要确定资源的长度, 然后 才能使用Ajax下载资源。通常这不是问题,您只需发出HEAD请求并提取即可。 但是,资源存储在与客户端不同的服务器上。(我控制的服务器)。因此,我正在使用CORS发出跨域Ajax请求,并已设置服务器以使用自定义标头响应HEAD请求和GET / POST请求的预检请求。 总的来说,这很有效,但是在使用CORS时,我似乎找不到一种

  • 问题内容: 我试图将nodejs中的以下代码片段转换为打字稿:如何在Nodejs中进行Http请求 这是我的TypeScript代码: 这是我的测试代码: 如果此方法正常运行(我在Firefox上检查了链接,则返回纯文本随机数),我应该获得一个数字作为纯文本。但是,当我回应时,我什么也没得到。我在这里做错了什么? 问题答案: 尽管可能工作得很好,但Axios是在TypeScript中使用的更好的替