HTTP (Hypertext Transfer Protocol)

HTTP (Hypertext Transfer Protocol)とは、HTMLなどのテキストファイルや画像の送受信に用いられる通信プロトコルである。

HTTPS

HTTPSは単独の通信プロトコルではなく、SSL/TLSによって提供されるセキュア(安全)な接続の上でHTTPを使うことをHTTPS (HTTP over SSL/TLS) と読んでいる。

HTTPSの階層
階層 通信プロトコル
アプリケーション層 HTTP
SSL/TLS
トランスポート層 TCP

ポート番号

HTTPはTCPポート番号80を使用する。

HTTPSはTCPポート番号443を使用する。

URL

HTTPの仕様ではURLの長さに制限は無い。ただし、WebブラウザやWebサーバの制限がある。

Google ChromeやFirefoxなどのモダンブラウザではURLのサイズは最大32,000文字である。Microsoft Internet ExplorerではURLのサイズは最大2,083文字である。

Apache HTTPサーバではLimitRequestLineディレクティブでHTTPリクエスト行のサイズを制限している。(初期値は8,190)

HTTPレスポンス

HTTP応答は応答状態、HTTPヘッダ及びデータ本体の3つから構成される。

HTTPステータスコード

HTTPステータスコードとは、HTTPリクエストに対する応答の状態を示す。HTTPレスポンスの1行目にあり、HTTPバージョン、ステータスコード及びメッセージから構成される。HTTPステータスコードは3桁の数字で表される。

HTTPステータスコードの例を示す。

HTTP/1.1 200 OK
HTTPステータスコード
分類 ステータスコード 状態
情報 100 Continue 継続
101 Switching Protocols プロトコル切り替え
102 Processing 処理中
成功 200 OK リクエストが成功して、レスポンスが返される。
201 Created リクエストが成功し、リソースの作成が完了した。
202 Accepted 受理
203 Non-Authoritative Information 信頼できない情報
204 No Content 内容なし。
205 Reset Content 内容のリセット。
206 Partial Content 部分的な内容。
207 Multi-Status 複数のステータス
208 Already Reported 既に報告。
226 IM Used IM使用
リダイレクション 300 Multiple Choices 複数の選択。
301 Moved Permanently リソースは恒久的に移動した。
302 Found 発見。
303 See Other 他を参照。
304 Not Modified 文書が変更されていない。
305 Use Proxy プロキシを使用。
307 Temporary Redirect 一時的リダイレクト。
308 Permanent Redirect 恒久的リダイレクト
クライアントエラー 401 Unauthorized ユーザ認証が必要である。
402 Payment Required 支払いが必要である。
403 Forbidden アクセスが禁止されている。
404 Not Found リソースが見つからない。
405 Method Not Allowed 許可されていないメソッド
406 Not Acceptable 受理できない。
407 Proxy Authentication Required プロキシ認証が必要である。
408 Request Timeout リクエストが時間内に完了しない。
409 Conflict 競合
410 Gone 消滅した。
411 Length Required 長さが必要。
412 Precondition Failed 前提条件で失敗した。
413 Payload Too Large ペイロードが大きすぎる。
414 URI Too Long URIが長すぎる。
415 Unsupported Media Type サポートされていないメディアタイプ。
416 Range Not Satisfiable 範囲外にある。
417 Expectation Failed Expectヘッダによる拡張が失敗。
421 Misdirected Request 誤ったリクエスト。
422 Unprocessable Entity 処理できないエンティティ。
423 Locked ロックされている。
424 Failed Dependency 依存関係で失敗。
426 Upgrade Required アップグレード要求。
451 Unavailable For Legal Reasons 法的理由により利用不可。
サーバエラー 500 Internal Server Error サーバ内部エラー
501 Not Implemented 実装されていない。
502 Bad Gateway 不正なゲートウェイ
503 Service Unavailable サービスを利用できない
504 Gateway Timeout ゲートウェイタイムアウト。
505 HTTP Version Not Supported サポートされていないHTTPバージョン。
507 Insufficient Storage 容量不足。
508 Loop Detected ループを検出した。
509 Bandwidth Limit Exceeded 帯域幅の制限を超過した。
510 Not Extended 拡張できない。

201 Created

「201 Created」はリソース作成の操作(PUT又はGET)に対する応答で、リクエストが成功してリソースの作成が完了したことを表すHTTPステータスコードである。新たに作成されたリソースはレスポンスメッセージの本文で返され、その位置はリクエストURLまたはLocationヘッダのコンテンツとなる。

502 Bad Gateway

502(不正なゲートウェイ)ステータス・コードは、サーバがゲートウェイまたはプロキシとして動作しているときに、要求を実行しようとしてアクセスしたインバウンド・サーバーから無効な応答を受信したことを示す。

503 Service Unavailable

503(サービスを利用できない)ステータス・コードは、一時的な過負荷またはスケジュールされた保守のために、サーバが現在要求を処理できないことを示す。この状態は、ある程度の遅延の後に軽減される可能性がある。

HTTPリクエストヘッダ

HTTPリクエストヘッダ
項目 説明
Cache-Control キャッシュに関する指示
Connection キープアライブ
Content-Length コンテンツの長さ(バイト)
Content-Type コンテンツの種別
Cookie クッキーをHTTPサーバへ送信する。
Date 応答を返した時刻
Last-Modified エンティティが最後に更新された時刻
Location エンティティの場所が移動したときなど、ブラウザが要求したURLとは別のURLに転送されたとき、そのURL
Pragma その他の情報
Referer 要求元のURL

HTTPレスポンスヘッダ

HTTPレスポンスヘッダ
項目 説明
Access-Control-Allow-Origin CORS (Cross-Origin Resource Sharing) でアクセスを許可するドメインを指定する。
Accept-Ranges Range要求において使用可能な単位
Age エンティティが生成されてからの予測経過時間(秒)
Cache-Control キャッシュに関する指示
Connection キープアライブ
Content-Disposition コンテンツがインラインか添付ファイルかを示す。
Content-Length コンテンツの長さ(バイト)
Content-Security-Policy IMG要素、SCRIPT要素及びLINK要素などの読み込み先を制限する。
Content-Type コンテンツの種別
Date 応答を返した時刻
Last-Modified エンティティが最後に更新された時刻
Location エンティティの場所が移動したときなど、ブラウザが要求したURLとは別のURLに転送されたとき、そのURL
Policy-Key-Pins SSL証明書が偽造されたものでないかチェックする。
Pragma その他の情報
Server サーバ情報
Set-Cookie クッキーをHTTPクライアントへ送信する。
Strict-Transport-Security HTTPSでのアクセスを強制する。
X-Content-Type-Options nosniffの場合、Internet ExplorerのContent Sniffingを無効にする。
Content Sniffingとは、Content-Typeでメディアタイプが指定されていても、
それを無視してコンテンツの内容や拡張子からデータ形式を推定する機能である。
IEのContent Sniffingは、画像やJSONなどをHTMLと誤判定することがある。
X-Frame-Options denyの場合、ページをフレーム内に表示できない。
sameoriginの場合、自分と生成元が同じフレーム内に限り、ページを表示できる。
allow-from urlの場合、指定された生成もとに限り、ページをフレーム内に表示できる。
X-Px CDNetworks独自のHTTPヘッダ
X-XSS-Protection 1の場合、ウェブブラウザのクロスサイトスクリプティング(XSS)検証・防御機能を有効にする。
0の場合、XSS検証・防御機能を無効にする。

Content-Disposition

Content-Dispositionとは、コンテンツがインライン(ウェブページまたはウェブページの一部としてブラウザに表示される)か添付ファイル(ダウンロードしてローカルに保存する)かを示すHTTP応答ヘッダである。

HTTP応答ヘッダに「Content-Disposition: attachment」が付加されているかどうかによって、Internet Explorer 11(Internet Explorer 9以降)でファイルをダウンロードするときに表示される画面が異なる。

COMで開けるファイル COMで開けないファイル
attachmentあり 通知バー 通知バー
attachmentなし ダウンロードダイアログ 通知バー

COM (Componet Object Model)で開けるファイルには、Officeのドキュメント(Word文書、Excelワークブック、PowerPointプレゼンテーション)やWindows Explorerで開けるアーカイブ(*.zipや*.cab)などがある。

構文

インラインの場合

Content-Disposition: inline

添付ファイルの場合

Content-Disposition: attachment

添付ファイルかつファイル名を指定する場合

Content-Disposition: attachment; filename="filename"
filename

ダウンロード時のデフォルトのファイル名。日本語のファイル名の場合は、URLエンコードする必要がある。

Content-Type

リソースのメディアタイプを示すのに用いられる。

構文

Content-Type: media-type; charset=charset
media-type

リソースのMIMEタイプ

charset

文字コードのキャラクタセット

Content-Type: text/html; charset=utf-8

:authority

HTTP/2の「:authority」疑似ヘッダー・フィールドには、ターゲットURIのauthority部分が含まれる。

:authority: segakuin.com
:method: GET
:path: /network/http.html
:scheme: https

参考文献

IETF (1999) RFC2616 Hypertext Transfer Protocol -- HTTP/1.1

IETF (2011) RFC6265 HTTP State Management Mechanism

IETF (2014) RFC7231 Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content

IETF (2015) RFC7540 Hypertext Transfer Protocol Version 2 (HTTP/2)