代码之家  ›  专栏  ›  技术社区  ›  jcarpenter2

Content Length为第一个部分内容响应提供整个文件的大小

  •  0
  • jcarpenter2  · 技术社区  · 7 年前

    我在Xampp下托管一个大的(1.8GB)视频文件。我创建了以下HTML文件:

    <!DOCTYPE html>
    <html>
        <head>
        </head>
        <body>
            <video controls width="800" src="test01.mp4" />
        </body>
    </html>
    

    但是,我无法理解发送的HTTP响应。当我最初加载页面时,关于视频的前两个HTTP请求是:

    GET http://localhost:90/movies/test01.mp4
    
    Host: localhost:90
    User-Agent: Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0
    Accept: video/webm,video/ogg,video/*;q=0.9,application/ogg;q=0.7,audio/*;q=0.6,*/*;q=0.5
    Accept-Language: en-US,en;q=0.5
    Referer: http://localhost:90/movies/
    Range: bytes=0-
    DNT: 1
    Connection: keep-alive
    Pragma: no-cache
    Cache-Control: no-cache
    

    HTTP/1.1 206 Partial Content
    Date: Mon, 09 Jul 2018 00:16:32 GMT
    Server: Apache/2.4.29 (Win32) OpenSSL/1.1.0g PHP/7.2.3
    Last-Modified: Fri, 29 Jun 2018 09:00:33 GMT
    ETag: "77ab7f58-56fc414a18560"
    Accept-Ranges: bytes
    Content-Length: 2007727960
    Cache-Control: no-cache, must-revalidate
    Content-Range: bytes 0-2007727959/2007727960
    Keep-Alive: timeout=5, max=99
    Connection: Keep-Alive
    Content-Type: video/mp4
    

    Host: localhost:90
    User-Agent: Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0
    Accept: video/webm,video/ogg,video/*;q=0.9,application/ogg;q=0.7,audio/*;q=0.6,*/*;q=0.5
    Accept-Language: en-US,en;q=0.5
    Referer: http://localhost:90/movies/
    Range: bytes=1992327168-
    DNT: 1
    Connection: keep-alive
    Pragma: no-cache
    Cache-Control: no-cache
    

    第二个响应头:

    HTTP/1.1 206 Partial Content
    Date: Mon, 09 Jul 2018 00:16:35 GMT
    Server: Apache/2.4.29 (Win32) OpenSSL/1.1.0g PHP/7.2.3
    Last-Modified: Fri, 29 Jun 2018 09:00:33 GMT
    ETag: "77ab7f58-56fc414a18560"
    Accept-Ranges: bytes
    Content-Length: 15400792
    Cache-Control: no-cache, must-revalidate
    Content-Range: bytes 1992327168-2007727959/2007727960
    Keep-Alive: timeout=5, max=100
    Connection: Keep-Alive
    Content-Type: video/mp4
    

    Content-Length: 2007727960 它是1.8GB。但是,完整的视频不会被传输——Firefox的网络标签显示传输的数据只有54.75MB。

    Range: bytes=1992327168- 因此,不管怎样,浏览器都可以告诉第一个响应的响应体长度,即使是错误的响应 Content-Length 标题。与第一个响应不同,第二个响应 内容长度 设置正确。

    在第一个请求中,为什么是 内容长度 未设置为响应主体的长度 as it should be ? 那么客户机如何知道响应主体有多长呢?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Julian Reschke    7 年前

    最简单的解释是内容长度确实是正确的,但是Firefox在~54MB之后中止读取操作。

    推荐文章