この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 9827|答える: 0

HTTPプロトコル転送エンコーディング(チャンク)

[リンクをコピー]
掲載地 2019/09/24 18:07:57 | | | |
1. 背景:

  • 永続的な接続の問題:非永続的な接続の場合、ブラウザは接続がダウンしているかどうかによってリクエストまたは応答エンティティの境界を定義できます。 連続的な接続の場合、この方法は明らかに機能しません。 時には、すべてのデータを送ったにもかかわらず、ブラウザが開いている接続で新しいデータが入ってくるかどうか分からず、ただ待つこともあります。
  • 内容長で解く:エンティティの長さを計算し、相手に頭を通して伝えます。 ブラウザはContent-Lengthの長さ情報によって応答エンティティが上にあることを判別できます
  • コンテンツ長に関する新たな問題:コンテンツ長フィールドはエンティティの長さを真に反映している必要があるため、動的に生成されたコンテンツの長さはコンテンツが作成されるまで知られません。 この時点で正確に長さを算出するには、十分な大きさのバッファを開いて、すべてのコンテンツが生成されるのを待ってから計算できます。 しかし、これによりメモリオーバーヘッドが増え、クライアントがより長く待つことになります。
  • ヘッダーの長さに依存しず、エンティティの境界を知る新しい仕組みが必要です。Transfer-Encoding: チャンク化。

2. 転送エンコーディング(チャンク)

  • トランスファーエンコーディングとは、HTTPヘッダーフィールド(レスポンスヘッダーフィールド)であり、文字通り「転送エンコーディング」を意味します。 最新のHTTP仕様では、エンコーディングトランスポートの一種はチャンクのみを定義しています。
  • チャンク転送エンコーディングは、ハイパーテキスト転送プロトコル(HTTP)におけるデータ転送メカニズムであり、ウェブサーバーからクライアントに送信されるHTTPデータを複数の部分に分割することを可能にします。 ブロックトランスポート符号化はHTTPプロトコルバージョン1.1(HTTP/1.1)でのみ利用可能です。
  • データは一連のチャンクに分割され、1つ以上のチャンクに送られるため、サーバーは送信されたコンテンツの総サイズを事前に知らずにデータを送信できます。


具体的な方法

  • ヘッダーにTransfer-Encoding: チャンクを追加すると、パケットはチャンクされたことを意味します。 この場合、パケット内のエンティティは一連のチャンクで送信する必要があります。
  • 各チャンクには16進数の長さ値とデータが含まれており、長さ値は1行に限定され、長さにはその末尾のCRLFやチャンクデータの末尾のCRLFは含まれません。
  • 最後のチャンク長値は0でなければならず、対応するチャンクデータには内容がなく、エンティティの終わりを示します。




asp.net コアテストコード:







先の:Httpプロトコルのコンテンツ長
次に:Chromeを否定する理由が3つあります
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com