HTTP 1.0と1.1


263

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

HTTP / 1.1(1997-1999)

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

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


これは主な違いのかなり良い要約です:http
Kev

3
ソースに行くためにあなたに良い。その概要を理解していなければ、一般的にネットワーキングについてあまり知らないように思えます。おそらく、それらの用語も調査する必要があります。
Marcin、

4
このことに関してはまだ初心者ですが、私の主な問題は、要約が「ハウ」ではなく「ハウ」をより多く提供することです。
Jason Baker、


回答:


363

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

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

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

例:

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続行に新しい戻りコードがあります。これは、サーバーが要求を処理できるかどうか、または要求の処理を許可されているかどうかがクライアントにわからない場合に、クライアントが大きな要求を送信しないようにするためです。この場合、クライアントはヘッダーのみを送信し、サーバーはクライアントに100続行を伝え、本文に進みます。

はるかに:

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

15
Hostヘッダーを省略すると、HTTP / 1.0が必要であると主張する多くのサーバー/プロキシが非常に混乱することに注意してください。
ポールトンブリン

2
HTTP 1.0は、Content-Encodingヘッダーによる圧縮をサポートしています。Paulが述べたように、Hostヘッダーを送信することは厳密に禁止されておらず、期待どおりに動作することが多いため、どのHTTP / 1.0クライアントにも送信することをお勧めします。それ以外の場合、これは完全に未解決です。
cpm

@Paul Tomblin:この情報を追加してくれてありがとう。
ブライアンR.ボンディ

2
「blahblahlbah.comとhelohelohelo.comの両方が同じIPを指している場合。WebサーバーはHostフィールドを使用して、クライアントマシンが必要とするサイトを区別できます。」では、HTTP 1.0クライアントが区別するホストフィールドを提供しないとどうなるでしょうか。
パセリエ

@Pacerierは通常、ある種のデフォルトのページです。それはサーバーに依存します。
Andrew Lambert

14

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. キャッシュのサポートを追加することで、応答が速くなり、帯域幅が大幅に節約されます。

9

ささいなアプリケーション(たとえば、散発的にWeb対応の温度計から温度値を取得する)の場合、クライアントとサーバーの両方でHTTP 1.0で問題ありません。必要最小限のソケットベースのHTTP 1.0クライアントまたはサーバーを約20行のコードで記述できます。

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


7

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


8
HTTP / 1.1では、HTTP / 1.0互換である必要がありますか?
パセリエ

@Troy-HTTP 1.1要求への応答を送信し、その直後に接続(サーバー上で要求が読み取られたソケット)を閉じることは有効ですか?これは実質的にサーバーがHTTP 1.0を実装していることを意味しています
Guy Avraham

5

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

Webサイトなどのアプリケーションを開発する場合は、違いについてあまり気にする必要はありませんが、少なくとも動詞との違い知っている必要があります。GETPOST

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

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


1
Methinks Jasonは、独自のHTTPサーバー/アプリケーションをゼロから構築することを検討している場合、GETとPOSTの違いをすでに知っています。:)
Kev

1
私は実際には現在HTTP 1.0のみをサポートするWebサーバーでいくつかの作業を行いましたが、1.1サポートの追加に何が関係しているのかと思っていました。
Jason Baker、

2

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

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


1

HTTP 1.1にはその仕様にホストヘッダーが付属していますが、HTTP 1.0には公式にはホストヘッダーがありませんが、ホストヘッダーの追加を拒否していません。

ホストヘッダーは、クライアントがプロキシサーバー全体にメッセージをルーティングできるので便利です。HTTPのバージョン1.0と1.1の主な違いは次のとおりです。

  1. HTTP 1.1には、同じHTTP接続で複数の要求または応答を使用できることを定義する永続的な接続が付属しています。
  2. HTTP 1.0では、リクエストとレスポンスごとに新しい接続を開く必要があります
  3. HTTP 1.0ではプラグマがあり、HTTP 1.1ではCache-Controlがあります。これはプラグマに似ています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.