HTTP: ハイパーテキスト転送プロトコル
HTTP は、HTML などのハイパーメディア文書を送信するためのアプリケーション層のプロトコルです。 これは、ウェブブラウザーとウェブサーバー間の通信のために設計されましたが、それ以外にも、マシン間通信や API へのプログラムによるアクセスなどに使用することもできます。
HTTP は旧来のクライアント・サーバーモデルに則っており、クライアントはサーバーにリクエストを送信するためにポートを開き、サーバー側からのレスポンスが返ってくるまで待機します。 HTTP はステートレスプロトコルであり、これは、2 つのリクエストの間でサーバーがセッションデータを保持しないということを意味します。ただし、後に追加されたクッキーにより、一部のクライアント・サーバー間のやり取りには状態情報が追加されるようになりました。
ガイド
HTTP は拡張可能なプロトコルであり、リソースや統一リソース識別子 (URI) といった概念、基本的なメッセージ構造、およびクライアント・サーバー通信モデルに頼っています。 これらの概念を基盤として、長年にわたり、追加の HTTP メソッドやヘッダーなど、機能や意味づけを追加する数多くの拡張機能が開発されてきました。
HTTP ガイドは、一般的な概要から、特定の用途に特化したトピックへと順に掲載されています。 初心者の方は、より専門的な記事を読む前に、まずは基礎となるガイドから始めることをお勧めします。
- HTTP の概要
-
HTTP の基本的な機能、その役割、ウェブアーキテクチャにおける用途、およびプロトコルスタックにおける位置づけです。
- HTTP の進化
-
HTTP は 1990 年代初頭に作成され、その後何度か拡張されてきました。 この記事では、その歴史を踏んで、HTTP/0.9、HTTP/1.0、HTTP/1.1 から HTTP/2、HTTP/3 に至るまでの各バージョンについて説明するとともに、長年にわたって導入されてきた新機能についても説明します。
- 典型的な HTTP セッション
-
接続の確立、リクエストの送信、レスポンスの受信に至るまでの HTTP セッションのフローについて説明します。
- HTTP メッセージ
-
リクエストやレスポンスとして送信される HTTP メッセージには、定義された構造があります。 この記事では、この一般的な構造、その目的、およびさまざまな種類のメッセージについて説明します。
- MIME タイプ
-
HTTP/1.0 以降、さまざまな種類のコンテンツを送信することが可能になりました。 この記事では、
Content-Typeヘッダーと MIME 標準を用いて、これがどのように実現されるかを説明します。 ウェブ開発者がよく使用する一般的な MIME タイプのリストは、一般的な MIME タイプでご覧いただけます。 - HTTP の圧縮
-
ブラウザーやサーバーは、ネットワーク経由でメッセージを送信する前に圧縮を行い、送信する必要があるデータを縮小することで、転送速度と帯域幅の利用効率を改善します。
- HTTP キャッシュ
-
キャッシュは、ウェブ上で高速な体験をユーザーに提供し、リソースを効率的に活用するための極めて重要な仕組みです。 この記事では、さまざまなキャッシュの方法と、HTTP ヘッダーを使用してそれらを制御する方法について説明します。
- HTTP 認証
-
認証とは、クライアントがサーバーにリクエストを送信する際に、その身元を確認する方法です。 これにより、許可されたユーザーやシステムのみが特定のリソースにアクセス可能になります。
- HTTP クッキーの使用
-
HTTP はステートレスなプロトコルですが、サーバーはレスポンスに
Set-Cookieヘッダーを含めて送信することができます。 その後、クライアントはサーバーへのその後のすべてのリクエストにおいて、Cookieリクエストヘッダーという形でクッキーの値を返します。 これにより、少量のデータを保存・交換する機能が追加され、結果として一部のクライアント・サーバー間のやり取りに状態を加えることができます。 - HTTP のリダイレクト
-
URL リダイレクト(URL 転送とも呼ばれます)とは、ページ、フォーム、ウェブサイト全体、ウェブアプリケーションに対して、複数の URL アドレスを割り当てる手法のことです。 HTTP には、この操作のために、HTTP リダイレクトと呼ばれる特別な種類のレスポンスがあります。
- HTTP 条件付きリクエスト
-
条件付きリクエストでは、リクエストの結果は、そのリクエストに含まれるバリデータの値によって決まります。 この手法は、キャッシュや、ダウンロードの再開、サーバー上のドキュメントを変更する際の更新の喪失防止などの場合で多用されています。
- HTTP 範囲付きリクエスト
-
範囲付きリクエストは、リソース全体ではなく、リソースの特定の部分(または複数の部分)をサーバーからクライアントに送信するようリクエストするものです。 範囲付きリクエストは、クライアントが大きなファイルの一部のみが必要だと分かっている場合や、アプリケーションでユーザーがダウンロードを一時停止・再開することができる場合に役立ちます。
- コンテンツネゴシエーション
-
HTTP では、ブラウザーが推奨する形式、言語、またはエンコード方式を通知する手段として、
Acceptをはじめとする一連のメッセージヘッダーが定義されています。 この記事では、この通知がどのように行われるか、サーバーがどのように反応すべきか、そしてリクエストに対して最適なレスポンスをどのように選択するかについて解説します。 - HTTP/1.x のコネクション管理
-
HTTP/1.1 は、持続的接続とパイプライン処理に対応した最初の HTTP バージョンでした。 この記事では、これら 2 つの概念について、それぞれのメリットとデメリットを含めて記載します。
- プロトコルのアップグレードの仕組み
-
HTTP/1.1 では、
Upgradeヘッダーを使用して、すでに確立された接続を別のプロトコルにアップグレードする仕組みが指定されています。 クライアントは、HTTP/1.1 から HTTP/2 へ、あるいは HTTP(S) 接続から WebSocket (ws/wss) へと接続をアップグレードすることができます。 - プロキシーサーバーとトンネリング
-
プロキシーは、ユーザーのローカルコンピューター上に設置することも、ユーザーのコンピューターとインターネット上の宛先サーバーとの間のどこにでも設置することができます。 このページでは、プロキシーに関する基本的な概要を説明し、いくつか構成オプションをご紹介します。
- HTTP クライアントヒント
-
クライアントヒントとは、サーバーがクライアントに対して、端末、ネットワーク、ユーザー、およびユーザーエージェント固有の環境設定に関する情報を能動的にリクエストするために使用することができる一連のレスポンスヘッダーのことです。 サーバーは、クライアントが指定した情報に基づいて、どのリソースを送信すべきかを判断することができます。
- ネットワークエラーログ記録
-
ネットワークエラーログ記録は、
NELHTTP レスポンスヘッダーを通じて構成可能な仕組みです。 この実験的なヘッダーにより、ウェブサイトやアプリケーションは、対応しているブラウザーから、ネットワーク通信の失敗(あるいは成功)に関するレポートを受信するように設定することができます。 - ユーザーエージェントを使用したブラウザーの検出
-
ユーザーエージェントの検出によるブラウザーの判別を使用することは、ほとんどの場合、よい考えではありませんが、どうしても要求される例外的な場合もあります。 この文書では、やむを得ずこの手法を使用する必要がある場合に、可能な限り適切な方法で実施できるようガイドします。特に、この手法を使用する前に考慮すべき点に重点を置いて解説します。
セキュリティとプライバシー
- 権限ポリシー
-
権限ポリシーは、ウェブ開発者が、そのウェブサイト上で使用できる機能と使用できない機能を明示的に宣言するための仕組みを提供します。 サイト側のコードがアクセスできる API を制限したり、特定の機能に関するブラウザーのデフォルトの動作を変更したりするための「ポリシー」のセットを定義します。
- オリジン間リソース共有 (CORS)
-
サイト間 HTTP リクエストとは、リクエストを送信しているリソースとは異なるドメインにあるリソースに対するリクエストのことです。 今日のウェブページでは、他のサイトのリソースを読み込むことがとても一般的です。例えば、「ドメイン A」 (
http://domaina.example/) にあるページが、img要素を介して「ドメイン B」 (http://domainb.foo/image.jpg) にある画像をリクエストする場合などが挙げられます。 CORS により、ウェブ開発者は、自分のウェブサイトがサイト間リクエストに対してどのように反応するかを制御することができます。 - コンテンツセキュリティポリシー (CSP)
-
CSP を使用すると、ウェブサイト管理者は
Content-Security-Policyレスポンスヘッダーを利用して、指定されたページに対してクライアントが読み込むことをすることができるリソースを制御できます。 CSP ガイドでは、クロスサイトスクリプティング (XSS) やデータ注入攻撃など、特定の種類の攻撃を検知・軽減するのに役立つ、コンテンツセキュリティポリシー (CSP) の仕組み全体を説明しています。 - オリジン間リソースポリシー (CORP)
-
CORP は、ウェブサイトやアプリケーションが、他のオリジンからの特定のリクエスト(
<script>や<img>などの要素を含むものなど)に対する保護を有効にできるようにし、推測型サイドチャネル攻撃を軽減します。 - Mozilla ウェブセキュリティガイドライン
-
運用チームがセキュアなウェブアプリケーションを開発するのに役立つコツをまとめました。
関連リソース
- URI
-
統一リソース識別子 (URI) は、ウェブ上のリソースを記述し、その位置を特定するために使用され、HTTP リクエストにおいて不可欠な要素です。
- Ogg メディア用サーバーの構成
-
このガイドでは、ウェブサーバーが Ogg メディアファイルを正しく配信するために必要となる可能性のある、いくつかのサーバー設定の変更を説明します。 また、サーバーがまだ認識するように設定されていない他のメディア種別に遭遇した場合にも、この情報が役立つかもしれません。
ツールとリソース
HTTP の理解やデバッグに役立つツールやリソースです。
- Firefox 開発者ツール
- HTTP Observatory
-
開発者、システム管理者、およびセキュリティ専門家が、サイトを安全かつ確実に設定できるよう役立つことを目的としたプロジェクトです。
- RedBot
-
キャッシュ関係のヘッダーを検証するツールです。
- nghttp2
-
C 言語で実装された HTTP/2 クライアント、サーバー、プロキシーであり、負荷テストやベンチマークツール、HPACK エンコーダーとデコーダーをつけています。
- curl
-
URL 構文で指定されたデータを転送するためのコマンドラインツールです。 HTTP、HTTPS、WS、WSS をはじめとする多くのプロトコルに対応しています。
- How Browsers Work (2011)
-
ブラウザーの内部処理や、 HTTP プロトコルのリクエスト処理のフローに関してとても詳しく書かれた記事です。ウェブ開発者であれば一読するべき記事になります。
リファレンス
HTTP リファレンスのドキュメントには、ヘッダー、リクエストメソッド、ステータス応答に関する詳細な情報が記載されており、関連する仕様書や標準文書も掲載されています。
- HTTP ヘッダー
-
メッセージヘッダーは、リソースや HTTP メッセージに関するメタデータを送信したり、クライアントやサーバーの動作を説明したりするために使用されます。
- HTTP リクエストメソッド
-
リクエストメソッドは、リクエストの目的と、リクエストが成功した場合に何が期待されるかを示します。 最も一般的なメソッドは、サーバーからのデータ取得に用いられる
GETと、サーバーへのデータ送信に用いられるPOSTですが、それ以外にもさまざまな目的に応じたメソッドがあります。 - HTTP ステータスレスポンスコード
-
HTTP レスポンスコードは、特定の HTTP リクエストが正常に完了したかを示します。レスポンスは通知レスポンス、成功レスポンス、リダイレクション、クライアントエラー、サーバーエラーの 5 つのクラスに分類されます。
- HTTP のリソースと仕様書
-
このページでは、1990 年代初頭に初めて仕様が指定されて以来の HTTP に関する関連リソースが掲載されています。
以下のサブセクションも注目に値します。
- CSP ディレクティブ
-
ウェブサイトの管理者は、
Content-Security-Policy(CSP) レスポンスヘッダーフィールドで、ユーザーエージェントが特定のページで読み込むことが許可されているリソースを制御することができます。いくつか例外はありますが、大元のサーバーやスクリプトのエンドポイントの特定をポリシーとして含んでいることが多いです。 - Permissions-Policy ディレクティブ
-
Permissions-Policyレスポンスヘッダーは、文書内、または文書内の任意の<iframe>要素において、ブラウザー機能の使用を許可または拒否するための仕組みを指定します。 この節では、Permissions-Policy ヘッダーで使用することができるディレクティブを一覧掲載し、各ディレクティブの動作や使用方法について記述した個別のドキュメントページを掲載しています。