web-dev-qa-db-ja.com

HTTP 1.0と1.1

HTTP 1.0とHTTP 1.1の違いについて簡単に概要を教えてもらえますか?私は両方のRFCでしばらく時間を費やしましたが、それらの間の多くの違いを引き出すことができませんでした。ウィキペディアはこう言っています:

HTTP/1.1(1997-1999)

現行版;永続的な接続はデフォルトで有効になっており、プロキシでうまく機能します。また、要求のパイプライン化をサポートし、複数の要求を同時に送信できるため、サーバーがワークロードに備えて、要求されたリソースをより迅速にクライアントに転送できます。

しかし、それは私にはあまり意味がありません。私はこれがやや複雑な主題であることを理解しているので、完全な答えを期待していませんが、誰かが少し低いレベルで違いの簡単な概要を教えてもらえますか?
これにより、HTTPサーバーまたはアプリケーションを実装するために知っておく必要がある情報を探しているということです。私は主に正しい方向のナッジを探しているので、自分で判断することができます。

240
Jason Baker

プロキシサポートとホストフィールド:

HTTP 1.1には、仕様により必要なHostヘッダーがあります。

HTTP 1.0は公式にHostヘッダーを必要としませんが、追加するのに問題はなく、多くのアプリケーション(プロキシ)はプロトコルバージョンに関係なくHostヘッダーを表示することを期待しています。

例:

GET / HTTP/1.1
Host: www.blahblahblahblah.com

このヘッダーは、プロキシサーバーを介してメッセージをルーティングできること、およびWebサーバーが同じサーバー上の異なるサイトを区別できるため便利です。

つまり、blahblahlbah.comとhelohelohelo.comの両方が同じIPを指している場合です。 Webサーバーは、ホストフィールドを使用して、クライアントマシンが必要とするサイトを区別できます。

永続的な接続:

HTTP 1.1では、永続的な接続を使用できます。つまり、同じHTTP接続で複数の要求/応答を行うことができます。

HTTP 1.0では、リクエスト/レスポンスのペアごとに新しい接続を開く必要がありました。そして、各応答の後、接続は閉じられます。これは、 TCPスロースタート のために、いくつかの大きな効率の問題につながります。

OPTIONSメソッド:

HTTP/1.1はOPTIONSメソッドを導入しています。 HTTPクライアントはこのメソッドを使用して、HTTPサーバーの機能を判別できます。主に、Webアプリケーションでのクロスオリジンリソース共有に使用されます。

キャッシュ:

HTTP 1.0は、ヘッダーIf-Modified-Sinceを介したキャッシュをサポートしていました。

HTTP 1.1は、「エンティティタグ」と呼ばれるものを使用することで、キャッシュサポートを大幅に拡張します。 2つのリソースが同じ場合、それらは同じエンティティタグを持ちます。

HTTP 1.1は、If-Unmodified-Since、If-Match、If-None-Match条件付きヘッダーも追加します。

Cache-Controlヘッダーなど、キャッシングに関連する追加機能もあります。

100継続ステータス:

HTTP/1.1 100 Continueに新しい戻りコードがあります。これは、サーバーがリクエストを処理できるかどうか、またはリクエストの処理を許可されているかどうかが不明な場合に、クライアントが大きなリクエストを送信しないようにするためです。この場合、クライアントはヘッダーのみを送信し、サーバーはクライアント100に続行を伝え、本文を続けます。

その他:

  • ダイジェスト認証とプロキシ認証
  • 追加の新しいステータスコード
  • チャンク転送エンコード
  • 接続ヘッダー
  • 圧縮サポートの強化
  • はるかに。
335
Brian R. Bondy

HTTP 1.0(1994)

  • まだ使用中です
  • チャンク(または圧縮)サーバー応答を処理できないクライアントが使用できます。

HTTP 1.1(1996- 2015)

  • バージョン1.0の多くの拡張機能を正式化
  • 永続的なパイプライン接続をサポート
  • チャンク転送、圧縮/解凍をサポート
  • 仮想ホスティング(複数のドメインをホストする単一のIPアドレスを持つサーバー)をサポートします
  • 複数の言語をサポート
  • バイト範囲の転送をサポートします。中断されたデータ転送を再開するのに便利

HTTP 1.1は、HTTP 1.0の拡張機能です。以下に、4つの主要な改善点を示します。

  1. 単一のIPアドレスから複数のドメインにサービスを提供できるため、IPアドレスを効率的に使用できます。

  2. Webブラウザーが単一の永続的な接続を介して複数の要求を送信できるようにすることで、応答が高速になります。

  3. チャンクエンコーディングのサポートにより、動的に生成されたページの応答が速くなります。これにより、全長がわかる前に応答を送信できます。
  4. キャッシュサポートを追加することにより、応答が速くなり、帯域幅が大幅に節約されます。
12
i_th

些細なアプリケーション(たとえば、Web対応の温度計から散発的に温度値を取得する)では、HTTP 1.0はクライアントとサーバーの両方に適しています。約20行のコードで、最低限のソケットベースのHTTP 1.0クライアントまたはサーバーを作成できます。

より複雑なシナリオでは、HTTP 1.1が最適です。より複雑なHTTP 1.1プロトコルの複雑さを処理するために、コードサイズが3〜5倍に増加することを期待してください。 HTTP 1.1では、さまざまなヘッダーを作成、解析、および応答する必要があるため、主に複雑さが生じます。クライアントにHTTPライブラリを使用させるか、サーバーにWebアプリケーションサーバーを使用させることで、この複雑さからアプリケーションを保護できます。

8

重要な互換性の問題は、 永続的な接続 のサポートです。私は最近、HTTP/1.1を「サポート」するサーバーで作業しましたが、クライアントがHTTP/1.0リクエストを送信したときに接続を閉じることができませんでした。 HTTP/1.1をサポートするサーバーを作成する場合、HTTP/1.0のみのクライアントでも動作することを確認してください。

7
Troy J. Farrell

私が頭から思い出すことができる最初の違いの1つは、同じサーバーで実行されている複数のドメイン、部分的なリソース取得です。これにより、リソースのダウンロードを取得して高速化できます(ほとんどすべてのダウンロードアクセラレータが行うことです)。

ウェブサイトなどのようなアプリケーションを開発する場合、違いについてあまり心配する必要はありませんが、should少なくともGETおよびPOST動詞。

ブラウザーを開発する場合は、はい、HTTPサーバーを開発しようとしている場合と同様に、完全なプロトコルを知る必要があります。

HTTPプロトコルを知りたいだけなら、1.0ではなくHTTP/1.1から始めることをお勧めします。

5
Leandro López

HTTP 1.1は、インターネットのTCP/IPプロトコルスイートの上で実行されるWorld Wide WebアプリケーションプロトコルであるHypertext Transfer Protocolの最新バージョンです。 HTTP 1.0と比較して、HTTP 1.1は元のHTTPよりも高速なWebページの配信を提供し、Webトラフィックを削減します。

Webトラフィックの例:たとえば、サーバーにアクセスしている場合。同時に、非常に多くのユーザーがデータのためにサーバーにアクセスしているため、サーバーがハングする可能性があります。これはWebトラフィックです。

2
Krishna Mohan

1.0と比較して、1.1はWebトラフィックを削減します

0
Ram MVS