jinzhe

jinzhe

github
email

httpの歴史

http は、TCP/IP ベースのアプリケーション層通信プロトコルであり、クライアントとサーバー間の通信規則を定義するために使用されます。

http/0.9(1991)#

http の最初の記録されたバージョンは、1991 年に提案されたhttp/0.9であり、これは史上最もシンプルなプロトコルです。

  • リクエストヘッダーはありません
  • GETメソッドのみをサポートします
  • HTMLのみを返すことができます
GET /index.html

サーバーは以下の情報を返す可能性があります

(res body)
(connection closed)

http/1.0(1996)#

  • リクエストヘッダーとレスポンスヘッダーをサポートします(ステータスコード、キャッシュ、認証、文字セットなどを含む)
  • HEADおよびPOSTメソッドを追加でサポートします
  • 動画、テキスト、画像など、さまざまなレスポンス形式をサポートします

Warning

http/1.0 の主な欠点の 1 つは、1 つの接続に複数のリクエストを持つことができないことです。すべてのリクエストは新しい接続上で行われる必要があり、三方握手によるパフォーマンスの浪費が発生する可能性があります。

GET /index.html HTTP/1.0
Host: jinzhe.cc
Accept: */*

サーバーは以下の情報を返す可能性があります

HTTP/1.0 200 OK 
Content-Type: text/plain
Server: Apache 0.84

(res body)
(connection closed)

http/1.1(1999)#

  • PUTPATCHOPTIONSDELETEを追加します
  • Connectionリクエストヘッダーを追加し、クライアントとサーバーが接続のオプションを指定できるようにします。
  • パイプライニングにより、クライアントは同じ接続で複数のリクエストをサーバーに送信し、サーバーはリクエストを受け取った順序で応答を送信する必要があります。クライアントはContent-Lengthを使用して終了位置を識別する必要があります。
  • チャンク転送は、サーバーがContent-Lengthを正確に見つけることができない場合に使用され、各チャンクにContent-Lengthが付けられます。サーバーはヘッダーTransfer-Encoding: chunkedを含みます。

Warning

Content-Lengthだけでは持続的な接続の問題を完全に解決することはできません。データが動的であり、サーバーがコンテンツの長さを把握できない場合、クライアントはデータの終了時刻を把握することができません。
ヘッドオブラック

SPDY(2009)#

  • マルチプレクシング
  • 圧縮
  • 優先度
  • セキュリティ

SPDY の登場は HTTP を置き換えるものではなく、HTTP のリクエストを送信する前に変更するものです。それは事実上の標準となり、ほとんどのブラウザが実装し始めました。2015 年になると、Google は競合する 2 つの標準を避けたかったため、SPDY を HTTP/2.0 に統合し、SPDY を廃止することを決定しました。

http/2.0(2015)#

HTTP/2は、低遅延のコンテンツ転送を目的として設計されたものです。

  • バイナリ形式で、各HTTP/2リクエストとレスポンスには一意のストリーム ID が割り当てられます。ストリームはフレームの集合であり、各フレームにはフレームタイプ、ストリーム ID、フレーム長などの情報が含まれます。
  • マルチプレクシングにより、すべての接続のリクエストとレスポンスが同じ TCP 接続上で完了します。クライアントは非同期に送信し、サーバーは非同期に応答し、ストリーム ID で識別します。
  • HPACKヘッダー圧縮は、ハフマン符号化を使用します。
  • サーバープッシュ。クライアントのリクエストなしにリソースをクライアントにプッシュします。
  • リクエストの優先度を変更できます。
  • セキュリティ。HTTP/2は仕様上は暗号化を要求しませんが、デフォルトでは強制されています。

三方握手#

Mermaid Loading...
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。