ホームページ  >  記事  >  ウェブフロントエンド  >  HTTP、HTTPS、SPDY、HTTP2を一度に理解する

HTTP、HTTPS、SPDY、HTTP2を一度に理解する

云罗郡主
云罗郡主転載
2018-11-13 16:20:205952ブラウズ


この記事の内容は、HTTP、HTTPS、SPDY、HTTP2 を一度に理解することに関するものであり、一定の参考値があるため、必要に応じて使用してください。お友達の方は参考にしていただければ幸いです。

HTTP、HTTPS、SPDY、HTTP2を一度に理解する

インターネット通信プロトコルのベテランとして、HTTP プロトコルは現在 3 回のバージョン変更を経ており、最新バージョンは HTTP2.0 です。これは誰もがよく知っていると思います。 。今日は HTTP の過去と現在について詳しく説明します。

HTTP/0.9

HTTP の最初のバージョンは 1991 年に誕生しました。この最初のバージョンは現在と比べて非常にシンプルで、HTTP ヘッダーやステータス コードがなく、バージョン番号もありませんでしたが、後に他のバージョンの HTTP と区別するためにバージョン番号が 0.9 に設定されました。 HTTP/0.9 は Get という 1 つのメソッドのみをサポートしており、リクエストは 1 行のみです。

GET /hello.html
応答も非常に単純で、HTML ドキュメント自体が含まれるだけです。

<HTML>
Hello world
</HTML>

TCP 接続が確立されると、サーバーは HTML 形式の文字列をクライアントに返します。送信後はTCP接続を切断してください。ステータス コードやエラー コードがないため、サーバー処理中にエラーが発生した場合は、問題の説明情報を含む特別な HTML ファイルのみが返されます。これは HTTP/0.9 の最も古いバージョンです。

HTTP/1.0

1996 年に HTTP/1.0 バージョンがリリースされ、HTTP の送信内容がテキストに加えて送信できるようになりました。写真、ビデオなど。これがインターネットの発展の基礎を築きました。 HTTP/0.9 と比較すると、HTTP/1.0 には主に次の機能があります。

リクエストと応答は HTTP ヘッダーをサポートし、ステータス コードが追加され、応答オブジェクトの先頭は応答ステータス行になります

プロトコル バージョン HEAD メソッドと POST メソッドをサポートする情報をリクエストとともに送信する必要があります。

HTML ファイル以外の他のタイプのコンテンツの送信をサポートします。

典型的な HTTP/1.0 リクエストは次のようになります:

GET /hello.html HTTP/1.0
User-Agent:NCSA_Mosaic/2.0(Windows3.1)
200 OK
Date: Tue, 15 Nov 1996 08:12:31 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/html
<HTML>
一个包含图片的页面
<IMGSRC="/smile.gif">
</HTML>

HTTP/1.1


HTTP/1.1 は HTTP/1.0 の数か月後にリリースされました。 HTTP/1.1 は、HTTP/1.0 をさらに改良したものです。HTTP1.1 では、主に次の点が改善されています。

接続を再利用できる

パイプラインの追加: HTTP パイプラインは、送信中にサーバーからの応答を待たずに、複数の HTTP リクエストをバッチで送信します。パイプライン メカニズムは、永続的な接続を通じて完了する必要があります。ブラウザによる HTTP リクエストのバッチ送信により、特に送信遅延 (ラグ/レイテンシー) が大きい場合に、ページの読み込み時間を大幅に短縮できます。注意すべき点の 1 つは、GET メソッドや HEAD メソッドなどのパイプラインを使用できるのはべき等リクエストのみであることです。

チャンクエンコーディング送信: このエンコーディングはエンティティをチャンクで送信し、長さが送信の終了を示す 0 ブロックになるまでブロックごとに長さを示します。これは、エンティティの長さが不明な場合に特に便利です (データベースによって動的に生成されるデータなど)

etag、cache-control などのキャッシュ制御メカニズムをさらに導入します。

言語、エンコーディング、タイプなどを含むコンテンツ ネゴシエーション メカニズムを導入します。クライアントとサーバーが最も適切なコンテンツ交換について合意できるようにします。

要求メッセージと応答メッセージの両方が Host ヘッダー フィールドをサポートします。HTTP1.0 では、各サーバーは一意の IP アドレスにバインドされていると見なされます。の場合、リクエスト メッセージ内の URL にはホスト名 (hostname) が渡されません。しかし、仮想ホスト技術の発展により、物理サーバー上に複数の仮想ホスト (マルチホーム Web サーバー) が存在し、IP アドレスを共有できるようになりました。したがって、Host ヘッダーの導入が必要です。

OPTIONS、PUT、DELETE、TRACE、CONNECT メソッドを追加

HTTP/1.1 は多くの点で最適化されており、最も広く使用されているプロトコル バージョンとして、すでに多くのネットワークを満足させることができます。 Web ページがますます複雑になり、独立したアプリケーションに進化するにつれて、HTTP/1.1 ではいくつかの問題が徐々に明らかになります:

データを送信するときは、毎回接続を再確立する必要があります。不親切です

送信内容はプレーンテキストであり、安全性が十分ではありません

ヘッダーの内容が大きすぎ、リクエストのたびにヘッダーがあまり変更されないため、無駄が発生します

サービスへのキープアライブ 最後にはパフォーマンスへのプレッシャーがもたらされる

これらの問題を解決するために、HTTPS と SPDY が登場しました。

SPDY

実際、SPDY は新しいプロトコルではなく、HTTP の前のセッション層です。

2010 年から 2015 年にかけて、Google は実験的な SPDY プロトコルを実装することで、クライアントとサーバーの間でデータを交換する代替方法を実証しました。ブラウザーとサーバーサイドの開発者の注目を集め、応答量の増加を明確にし、データ転送の複雑さを解決します。 SPDY プロジェクトを開始するときのデフォルトの目標は、

ページ読み込み時間 (PLT) を 50% 削減することです。

Web サイトの作成者がコンテンツを変更する必要はありません。

ネットワーク インフラストラクチャを変更せずに、展開の複雑さを最小限に抑えます。

オープンソース コミュニティと協力して、この新しいプロトコルを開発しています。

実際のパフォーマンス データを収集して、この実験プロトコルが有効かどうかを検証します。

ページの読み込み時間を短縮するという目標を達成するために、SPDY は新しいバイナリ フレーミング データ レイヤーを導入して、多方向のリクエストと応答を可能にし、優先順位を付け、不要なネットワーク遅延を最小限に抑え、ネットワーク遅延をより効率的に利用することを目的としています。基礎となる TCP 接続。

HTTP/2.0

2015 年に HTTP/2.0 が登場しました。まず HTTP/2.0 の特徴を紹介します。

バイナリ フレーム層を使用する: HTTP のセマンティクス、ステータス コード、 URI およびヘッダー フィールドは、HTTP1.1 のパフォーマンス制限を突破し、送信パフォーマンスを向上させ、低遅延と高スループットを実現します。バイナリ フレーム層では、HTTP2.0 は送信されるすべての情報を小さなメッセージとフレームに分割し、バイナリ形式でエンコードします。HTTP1.x のヘッダー情報はヘッダー フレームにカプセル化され、リクエストの本文はヘッダー フレームにカプセル化されます。データフレーム。

バイナリ フレーミング

多重化: HTTP/1.x では、長時間の接続が有効になっている場合でも、帯域幅が十分な場合、リクエストはシリアルに送信されます。 HTTP/2.0 では、帯域幅の使用率を向上させるために複数のリクエストを並行して送信できる多重化方式が採用されています。

多重化

データ フローの優先順位: リクエストは同時に送信できるため、ブラウザーが主要な CSS または JS ファイルがページのレンダリングを完了するのを待っている場合、サーバー画像リソースの送信に重点を置いていますか? HTTP/2.0 では、データ フローの優先順位値を設定できます。この優先順位値により、クライアントとサーバーがさまざまなフローを処理するために使用するさまざまな優先順位戦略が決まります。

サーバー側プッシュ: HTTP/2.0 では、サーバーはリクエスト以外のコンテンツをクライアントに送信できます。たとえば、ページがリクエストされると、サーバーはページ関連のロゴ、CSS をプッシュします。サーバーはクライアントがこれらを使用すると考えるため、リクエストが来るまで待ってから送信するのではなく、他のファイルをクライアントに直接送信します。これは、すべてのリソースを 1 つの HTML ドキュメントに集めるのと同じです。

ヘッダー圧縮: ヘッダー テーブルを使用して、以前に送信されたキーと値のペアを追跡し、各リクエストと応答で同じコンテンツが送信されることはありません。

上記は、HTTP、HTTPS、SPDY、および HTTP2 を一度に理解するための完全な入門書です。Html5 チュートリアル について詳しく知りたい場合は、PHP 中国語 Web サイトに注目してください。 。



以上がHTTP、HTTPS、SPDY、HTTP2を一度に理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。