【问题标题】:HTTP Content length less than File byte-size, did it fully download?HTTP 内容长度小于文件字节大小,是否已完全下载?
【发布时间】:2013-08-09 03:58:05
【问题描述】:

尝试确定用户是否确实从网站下载了可执行文件。我检查了 pcap,发现 Content-Length 字段 = 784,536,但 Server->User 是 430,380 字节。这告诉我用户没有完全下载文件。我自己也下载了文件,发现它是 766 KB。如果下载了该 EXE 文件(本地文件大小),基于 HTTP 标头的内容长度值是否可能不等于该文件的大小?它是否正确?

数据包捕获数据(我无法发布屏幕截图)

GET /ChromasLite211Setup.exe HTTP/1.1
Host: www.technelysium.com.au
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:17.0) Firefox/17.0
Accept: text/html, application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us
Accept-Enconding: gzip, deflate
Connection: keep-alive
Referrer: http://technelysium.com.au/

HTTP/1.1 200 OK
Date: Thu, 01 Aug 2013 17:28:17 GMT
Server: Apache
Last-Modified: Mon, 15 Apr 2013 08:29:57 GMT
Accept-Ranges: bytes
Content-Length: 784536
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/x-msdownload

MZP........................@.............................!..L..This program must be run under Win32


Entire Conversation (430722 bytes)
Users IP -> Server IP (342 bytes)
Server IP -> Users IP (430380)

当我从网站下载文件时,它显示为“二进制文件 (766 KB)”

【问题讨论】:

  • 文件大小(以字节为单位)是多少? Content-Length 字段以八位字节(字节)计算。

标签: http http-headers fileinfo


【解决方案1】:

将字节转换为千字节

784,536/1024 = 766.14

【讨论】:

  • 对。所以,当我自己下载文件时,我看到它是 766KB。但是为什么 pcap 不显示整个对话 = 内容长度?这是否意味着它没有下载?文件大小是否必须与内容长度匹配?
  • 我不确定我是否理解您的问题... Content-Length 指示服务器响应(文件)的大小...它与是否下载成功传输...有些服务器甚至不回复内容长度或将内容长度设置为零(这就是为什么在下载时我们有时会看到下载时间/状态未知,因为浏览器无法知道有多大它正在获取的文件...)
  • 是的,传输文件的大小应该与Content-Length中的字节完全一致。有几件事可以改变它,即:如果它是以 gzip 编码发送的,那么传输的字节数将不等于解压缩后的文件大小(当然),但 Content-Length 标头必须显示确切的HTTP 响应正文中的字节数。如果没有 Content-Length 标头,那么它可能使用了类似分块编码的东西。 Content-Length: 0 标头意味着必须发送 0 个字节。
【解决方案2】:

没有。用户没有下载所有字节。

如果服务器发送 Content-Length 标头,这正是它打算作为 HTTP 响应正文发送的内容字节数。如果发送的数量少于该数量,则发生了一些事情(客户端终止连接、客户端超时等)

【讨论】:

    猜你喜欢
    • 2015-02-18
    • 2017-12-27
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    相关资源
    最近更新 更多