サンプルHTTP範囲要求セッション


91

範囲リクエストを含むサンプルHTTPセッションを表示することは可能ですか?リクエストとレスポンスのヘッダーはどうなるのですか?


2
数か月前に、HTTP / 1.1標準の新しいバージョンが公開されました。範囲リクエスト用の特別なRFCがあります。これは、多くのアイテムの例を含む古い仕様よりもはるかに読みやすくなっています。tools.ietf.org
html

回答:


135

次の交換は、Chromeと静的Webサーバー間で行われ、MP4ビデオを取得します。

最初のリクエスト-ビデオ用。Accept-Rangesサーバーが範囲ヘッダーをサポートしていることを示す応答ヘッダーに注意してください。

GET /BigBuckBunny_320x180.mp4
        Cache-Control: max-age=0
        Connection: keep-alive
        Accept-Language: en-GB,en-US,en
        Host: localhost:8080
        Range:
        Accept: text/html,application/xhtml+xml,application/xml,*/*
        User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.7 ...
        Accept-Encoding: gzip,deflate,sdch
        Accept-Charset: ISO-8859-1,utf-8,*
200 OK
        Content-Type: video/mp4
        Connection: keep-alive
        Last-Modified: Wed,14 Dec 2011 15:50:59 GMT
        ETag: A023EF02BD589BC472A2D6774EAE3C58
        Transfer-Encoding:
        Content-Length: 64657027
        Accept-Ranges: bytes
        Server: Brisket/1.0.1
        Date: Wed,14 Dec 2011 16:11:24 GMT

以前の応答の範囲ヘッダーが検出されました-サポートを確認するための範囲が制限されていない後続の要求。レスポンスは206ステータスとContent-Rangeヘッダーを返し、レスポンス本文に存在するバイトを示します。

GET /BigBuckBunny_320x180.mp4
        Connection: keep-alive
        Accept-Language: en-GB,en-US,en
        Host: localhost:8080
        Range: bytes=0-
        Accept: */*
        User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.7 ...
        Referer: http://localhost:8080/BigBuckBunny_320x180.mp4
        Accept-Encoding: identity
        Accept-Charset: ISO-8859-1,utf-8,*
206 Partial Content
        Content-Type: video/mp4
        Connection: keep-alive
        Last-Modified: Wed,14 Dec 2011 15:50:59 GMT
        ETag: A023EF02BD589BC472A2D6774EAE3C58
        Transfer-Encoding:
        Content-Length: 64657027
        Accept-Ranges: bytes
        Server: Brisket/1.0.1
        Date: Wed,14 Dec 2011 16:11:25 GMT
        Content-Range: bytes 0-64657026/64657027

ファイルの終わりをキャプチャするための後続の範囲リクエスト(おそらく末尾のメタデータをキャプチャするため):

GET /BigBuckBunny_320x180.mp4
        Connection: keep-alive
        Accept-Language: en-GB,en-US,en
        Host: localhost:8080
        Range: bytes=64312833-64657026
        Accept: */*
        If-Range: A023EF02BD589BC472A2D6774EAE3C58
        User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.7 ...
        Referer: http://localhost:8080/BigBuckBunny_320x180.mp4
        Accept-Encoding: identity
        Accept-Charset: ISO-8859-1,utf-8,*
206 Partial Content
        Content-Type: video/mp4
        Connection: keep-alive
        Last-Modified: Wed,14 Dec 2011 15:50:59 GMT
        ETag: A023EF02BD589BC472A2D6774EAE3C58
        Transfer-Encoding:
        Content-Length: 344194
        Accept-Ranges: bytes
        Server: Brisket/1.0.1
        Date: Wed,14 Dec 2011 16:11:25 GMT
        Content-Range: bytes 64312833-64657026/64657027

ユーザーがダウンロードした範囲を超えてビデオプログレスバーをクリックした場合-選択した位置から再生を開始するために範囲リクエストが発行されます。

GET /BigBuckBunny_320x180.mp4
        Connection: keep-alive
        Accept-Language: en-GB,en-US,en
        Host: localhost:8080
        Range: bytes=1073152-64313343
        Accept: */*
        If-Range: A023EF02BD589BC472A2D6774EAE3C58
        User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.7 ...
        Referer: http://localhost:8080/BigBuckBunny_320x180.mp4
        Accept-Encoding: identity
        Accept-Charset: ISO-8859-1,utf-8,*
206 Partial Content
        Content-Type: video/mp4
        Connection: keep-alive
        Last-Modified: Wed,14 Dec 2011 15:50:59 GMT
        ETag: A023EF02BD589BC472A2D6774EAE3C58
        Transfer-Encoding:
        Content-Length: 63240192
        Accept-Ranges: bytes
        Server: Brisket/1.0.1
        Date: Wed,14 Dec 2011 16:11:25 GMT
        Content-Range: bytes 1073152-64313343/64657027

7
空のTransfer-Encodingヘッダーは、HTTP通信がキャプチャされた方法のアーティファクトですか、それともこのヘッダーに空の値を生成する実際のHTTPサーバーがありますか?
swl10 14

7
最初のケースでは、サーバーが64657027バイトのコンテンツを返しているようです。では、何が起こっているのでしょうか。クライアントはそのコンテンツを破棄し、その後、本当に必要なパーツの範囲要求を発行していますか?または、クライアントのメッセージに何かをしないと言っているため、サーバーがコンテンツを返さないのでしょうか。もしそうなら、それは何ですか?
Morrie、2015年

3
@Morrie-それ自体が範囲要求をサポートしていることを知っているサーバーは、Accept-Ranges: bytesヘッダーを介して「範囲要求を受け入れる」ことをクライアントに伝えますが、クライアントが上限の範囲要求を行うことができるように、リソースのコンテンツ長も送信しますバウンド。クライアントのメッセージには、私が知る限りこれを行うとは書かれていません。サーバーは「リソース全体です」または「範囲要求を受け入れる」で応答することを選択できますAccept-Ranges。これもヘッダーの存在です。とにかくそれは私の理解です。
Simon Whitehead

4
ただし、最初の応答のContent-Lengthが64657027であることは、ヘッダーに続くペイロードのバイト数が実際に多く、接続がキープアライブであるためにクライアントが消費する必要があることを意味していませんか?私はその応答メッセージで実際にはペイロードがないと言っているのだろうかと思います。
モリー

1
@Morrie Keep-aliveはクライアントからのリクエストであり、クライアントは接続を使用し続ける義務はありません。私は自分の作業で、少なくともChromeでは、範囲「0-」の最初のGETリクエストは、HEADリクエストを使用する代わりに、ヘッダーが受信されるとすぐに即座に中止されると結論付けました。これは、HEAD動詞を正しく実装しない可能性のあるサーバーの問題を回避する方法だと思います。
Zoomulator
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.