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)#
PUT
、PATCH
、OPTIONS
、DELETE
を追加します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...