HTTPプロトコルは、World Wide Web(www)でデータを送信するための主要なプロトコルです。
IT業界の標準によって長い間開発され、バージョン1.0の仕様は1996年に、現在のバージョン1.1は1999年(
RFC 2616 )に公開されました。
1日のhttpトラフィックの合計量は計算できません。 この送信データのほとんどがHTTPヘッダーであり、ほとんど不要であるという点で問題があります。
これは、高速で無制限の関税の時代にはそれほど重要ではないと言う人もいるかもしれませんが、一部は正しいでしょう。 しかし、他の考慮事項があります。
ブラウザが送信するもの
たとえば、yandex.ruを検討してください。
最初にメインページをロードすると、ブラウザはHTTPプロトコルを使用して19のリソースをロードし、合計ボリュームは44 KBです(ブラウザに応じてヘッダーを追加します)。 Yandexのエンジニアは、負荷を最適化するのに良い仕事をしたと言えます。 しかし、大まかな推定によると、見出しの情報の10%(約4〜5Kb)は不要です。
10%は重要ではないように見えますが、さまざまな角度から見ることができます。
ユーザー側では、ページの読み込みが10%加速されます(ダイヤルアップの領域にこんにちは)。
サイト所有者の側からは、トラフィックを10%削減できます。これは、10%のユーザーにサービスを提供できることを意味します。クラスターシステムを考慮すると、10台ではなく9台のサーバーを購入できます。
また、Web開発者との関係では、一般的に見苦しいです。PNGを可能な最小サイズ(たとえば)250バイトに圧縮すると、ヘッダーに同じ量のトレーラーが表示されます。
以下は、最新のブラウザーによって送信されるヘッダーです(たとえば、メインページyandex.ruを取得しました)。 さらに低いのは、この主題に関するさらなる考えです。
Firefox 3.0GET / HTTP / 1.1
ホスト:yandex.ru
ユーザーエージェント:Mozilla / 5.0(Windows; U; Windows NT 5.1; ru; rv:1.9.0.6)Gecko / 2009011913 Firefox / 3.0.6
許可:text / html、application / xhtml + xml、application / xml; q = 0.9、* / *; q = 0.8
Accept-Language:ru、en-us; q = 0.7、en; q = 0.3
Accept-Encoding:gzip、deflate
Accept-Charset:windows-1251、utf-8; q = 0.7、*; q = 0.7
キープアライブ:300
接続:キープアライブ
IE7GET / HTTP / 1.1
受け入れる:image / gif、image / x-xbitmap、image / jpeg、image / pjpeg、application / x-shockwave-flash、application / xaml + xml、application / vnd.ms-xpsdocument、application / x-ms-xbap、 application / x-ms-application、* / *
Accept-Language:ru
UA-CPU:x86
Accept-Encoding:gzip、deflate
ユーザーエージェント:Mozilla / 4.0(互換性あり; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
ホスト:yandex.ru
接続:キープアライブ
Safari 3.1GET / HTTP / 1.1
ユーザーエージェント:Mozilla / 5.0(Windows; U; Windows NT 5.1; ru-RU)AppleWebKit / 525.19(KHTML、Geckoなど)バージョン/ 3.1.2 Safari / 525.21
Accept-Encoding:gzip、deflate
許可:text / xml、application / xml、application / xhtml + xml、text / html; q = 0.9、text / plain; q = 0.8、image / png、* / *; q = 0.5
Accept-Language:en-RU
接続:キープアライブ
ホスト:yandex.ru
Opera 9GET / HTTP / 1.1
ユーザーエージェント:Opera / 9.63(Windows NT 5.1; U; ja)Presto / 2.1.1
ホスト:yandex.ru
受け入れる:text / html、application / xml; q = 0.9、application / xhtml + xml、image / png、image / jpeg、image / gif、image / x-xbitmap、* / *; q = 0.1
Accept-Language:ru-RU、ru; q = 0.9、en; q = 0.8
Accept-Charset:iso-8859-1、utf-8、utf-16、*; q = 0.1
Accept-Encoding:deflate、gzip、x-gzip、identity、*; q = 0
キャッシュ制御:キャッシュなし
接続:キープアライブ、TE
TE:deflate、gzip、chunked、identity、trailers
クロムGET / HTTP / 1.1
ユーザーエージェント:Mozilla / 5.0(Windows; U; Windows NT 5.1; en-US)AppleWebKit / 525.19(KHTML、Geckoなど)Chrome / 1.0.154.48 Safari / 525.19
許可:text / xml、application / xml、application / xhtml + xml、text / html; q = 0.9、text / plain; q = 0.8、image / png、* / *; q = 0.5
Accept-Encoding:gzip、deflate、bzip2、sdch
Accept-Language:ru-RU、ru、en-US、en
Accept-Charset:windows-1251、*、utf-8
ホスト:yandex.ru
接続:キープアライブ
これは、各リソース(htmlページ、javascript、css、写真)を読み込むときにブラウザーが送信するものです。 これにさらに多くのcookie(cookie)を追加します。これらはしばしば存在します。
なぜなら HTTPプロトコルには状態(ステートレスプロトコル)がないため、リクエストごとにヘッダーを繰り返す必要があります。
これにより、最小の「有効な」HTTP / 1.1リクエストは次のようになります。
GET / HTTP / 1.1
ホスト:yandex.ru
受け入れる:* / *
Accept-Encoding:gzip、deflate
接続:キープアライブ
HTTP / 1.0リクエストとそれ以下:
GET / HTTP / 1.0
しかし、それを使用することは実用的ではありません。 圧縮、プロキシなどはサポートされていません。
ヘッダーの詳細な解析
User-Agent-歴史的に常に存在し、理論的にはブラウザのタイプを決定できます。 しかし、何らかの理由で、「
MSIE 7.0.5730.13 」行の代わりに、ブラウザは、原則として誰も使用しないデータを含む非常に長い行を送信します。
Acceptは不要なヘッダーです。 このパラメータで着信リクエストをフィルタリングする少なくとも12のサイトを示します(これがどこで役立つかさえわかりません)。 アイデアは、ブラウザが処理できるファイルの種類をサーバーへのポインタとして使用することです。 ほとんどの場合、「
* / * 」が送信されます。これは、ブラウザーがファイルを受け入れる準備ができていることを意味し、ヘッダーが無意味になります。
Accept-Language-多言語サイトのデフォルト言語を指定するために渡すのが理にかなっています。 実際には、この値がサイトで使用されることはまれであり、googleのような巨人でさえ、ジオロケーション(geoIP)を使用して表示言語を決定します。
Accept-Charset-また、実際には使用されません。 実際には、ブラウザーは、リストにない文字セットを含め、すべての文字セットを受け入れます。
おわりに
ブラウザの開発者が送信されたhttpリクエストから不要なヘッダーを除外して、インターネットのエントロピーを必要以上に増加させないようにすれば素晴らしいでしょう。
厳しい監督者はそのような自由を止めると思います。
Web開発者には、最適化するという1つの方法があります。 これがないと、悲惨な結果になる可能性があります(ページの読み込み時に50個の小さな画像を読み込むと、かなりの遅延が発生します)。 最適化方法の詳細については、
webo.inなどを
ご覧ください。ところで、この記事で提供される情報は、実際のブラウザと見分けがつかないWebパーサー(ロボット、クローラー)の開発者にとって有用な場合があります。 「
User-Agent:crawler 」を正直に送信することをお勧めしますが、実際のリクエストと同一のリクエストを送信する必要がある場合があります。