HTTPプロトコル
目次
HTTPプロトコルとは?
WEBサーバーとクライアント(ブラウザ等)が、相互に通信する為の仕組み
クライアントからの閲覧要求(HTTPリクエスト)
WEBサーバーからの応答(HTTPレスポンス)
から成る。
送信時はリクエストメッセージをWEBサーバーに送り、
受信時はレスポンスメッセージをWEBサーバーから受け取る。
ブラウザはレスポンスメッセージ内のHTMLデータを解釈して画面に表示する。
HTTPリクエスト
| メッセージヘッダ | リクエストライン | メソッド |
| URI | ||
| HTTPバージョン | ||
| リクエストヘッダ | ユーザーエージェント | |
| リファラ | ||
| データ形式 | ||
| クッキー | ||
| メッセージボディ | ポストデータ | |
(1)リクエストライン
メソッド、URI、HTTPバージョン
(2)メッセージヘッダー
日付、クライアントが扱えるデータ種類、言語、圧縮方式、ソフトウェア名称、ソフトウェアバージョン、データの有効期限等、ブラウザによって異なる。
(3)メッセージボディ
POSTメソッドでデータを送る際のパラメーター等
HTTPリクエストライン
「何を」「どうする?」というメッセージを、クライアントからサーバーに送信する。
「何を」= URI
「どうする?」= メソッド(GET/POST等)
URL欄に直接アドレスを記入した場合は自動的に「GET」命令
ボタン押下等のプログラムが実行された場合は、多くの場合「POST」命令が実行される様にプログラムされている。
メソッド
GET
WEBサーバーからデータを取得する
この時、メッセージボディにはデータ無し
パラメータをWEBサーバーに送る場合はURLの末尾に付加される。
(例)https://office-yone.com/~?prm1=100&prm2=AAA
POST
WEBサーバーへデータを渡す
この時、メッセージボディにサーバーに渡すデータが設定される
URI
「OSI参照モデル プレゼンテーション/アプリケーション層/URI」参照
HTTPバージョン
HTTP 1.0
HTTP 1.1
HTTP 2.0(予定)
HTTPリクエストヘッダー
ユーザーエージェント
(User-Agent)
ブラウザの種類やOSの情報。
多くの場合ブラウザ
リファラ
Referer
(※英語としてReferrerが正しいが↑を用いる)
リファラ例(1)
ページAのリンクをクリック
↓
ページBへ遷移
ページBへのHTTPリクエスト
リファラ=ページAのURI
リファラ例(2)
ページCを表示(画像有り)
↓
内部で画像のみ再リクエスト
リファラ:ページCのURI
クッキー
Cookie
セッション情報を表すテキストデータ
過去ではIDやパスワード、
現在ではセッションID
データ形式
画像の種類、言語、文字コード
HTTPレスポンス
| メッセージヘッダ | ステータスライン | HTTPバージョン |
| ステータスコード | ||
| レスポンスヘッダ | コンテンツタイプ | |
| 再利用期限 | ||
| データの最終更新日時(Last-Modified)やエンティティ情報(ETag) | ||
| 移動先 | ||
| メッセージボディ | HTML、JSON、CGI・WEBアプリ実行結果 | |
(1)ステータスライン
HTTPバージョン、ステータスコード、レスポンスフレーズ(ステータスの説明文)
(2)レスポンスヘッダー
リクエストメッセージにおけるメッセージヘッダーと同じ
(3)メッセージボディ
(レスポンスボディ)
HTML文、CGIアプリケーションの出力結果、画像・映像データ等
HTTPステータスコード
| 分類 | 番号 | メッセージ | 説明 |
|---|---|---|---|
| 情報 | 100 | Continue | 処理を継続しています。続きのリクエストを送信してください。 |
| 101 | Switching Protocols | Upgrade ヘッダで指定したプロトコルに変更して再要求してください。 | |
| 成功 | 200 | OK | 成功しました。リクエスト受信成功。レスポンス送信済み |
| 201 | Created | Location ヘッダで指定した場所に新しいコンテンツが作成されました。 | |
| 202 | Accepted | 要求は受理されました。ただし処理は完了していません。 | |
| 203 | Non-Authoritative Information | 応答ヘッダはオリジナルサーバーが返したものとは異なりますが、処理は成功です。 | |
| 204 | No Content | コンテンツはありませんが、処理は成功しました。 | |
| 205 | Reset Content | 要求を受理したので、現在のコンテンツ(画面)を破棄してください。。 | |
| 206 | Partial Content | コンテンツを一部のみ返却します。 | |
| 転送 | 300 | Multiple Choices | コンテンツ入手方法について複数の選択肢があります。 |
| 301 | Moved Permanently | Location ヘッダで指定された別の場所に移動しました。 | |
| 302 | Found | Location ヘッダで指定された別の場所に見つかりました。そちらを見てください。 (リクエスト先サーバーで移動先を指定している場合) |
|
| 303 | See Other | Location ヘッダで指定された他の場所を見てください。 | |
| 304 | Not Modified | 更新されていません。If-Modified-Since ヘッダを用いた場合に返却されます。 | |
| 305 | Use Proxy | Location ヘッダで指定したプロキシを使用してください。 | |
| 306 | (Unused) | 未使用。 | |
| 307 | Temporary Redirect | 別の場所に一時的に移動しています。 | |
| クライアントエラー | 400 | Bad Request | 要求が不正です。 |
| 401 | Unauthorized | 認証されていません。 ユーザー認証失敗 |
|
| 402 | Payment Required | 支払いが必要です。 | |
| 403 | Forbidden | アクセスが認められていません。 アクセス禁止 |
|
| 404 | Not Found | 見つかりません。 リクエストされたURIが無い(アクセス権限が無い) |
|
| 405 | Method Not Allowed | 指定したメソッドはサポートされていません。 | |
| 406 | Not Acceptable | 許可されていません。 | |
| 407 | Proxy Authentication Required | プロキシ認証が必要です。 | |
| 408 | Request Timeout | リクエストがタイムアウトしました。 | |
| 409 | Conflict | リクエストがコンフリクト(衝突・矛盾)しました。 | |
| 410 | Gone | 要求されたコンテンツは無くなってしまいました。 | |
| 411 | Length Required | Content-Length ヘッダを付加して要求してください。 | |
| 412 | Precondition Failed | If-… ヘッダで指定された条件に合致しませんでした。 | |
| 413 | Request Entity Too Large | 要求されたエンティティが大きすぎます。 | |
| 414 | Request-URI Too Long | 要求された URI が長すぎます。 | |
| 415 | Unsupported Media Type | サポートされていないメディアタイプです。 | |
| 416 | Requested Range Not Satisfiable | 要求されたレンジが不正です。 | |
| 417 | Expectation Failed | Expect ヘッダで指定された拡張要求は失敗しました。 | |
| サーバーエラー | 500 | Internal Server Error | サーバーで予期しないエラーが発生しました。 内部エラー (CGIエラー、.htaccess等設定ファイル記述ミス) |
| 501 | Not Implemented | 実装されていません。 | |
| 502 | Bad Gateway | ゲートウェイが不正です。 | |
| 503 | Service Unavailable | サービスは利用可能ではありません。 サービス提供不可(サーバーメンテナンス時、過負荷時等) |
|
| 504 | Gateway Timeout | ゲートウェイがタイムアウトしました。 | |
| 505 | HTTP Version Not Supported | このHTTPバージョンはサポートされていません。 |
HTTPレスポンスヘッダー
コンテンツタイプ
(Content-Type)
データがHTMLなのか画像なのかや、文字コードなどの情報。
| ファイル形式 | 拡張子 | MIME |
|---|---|---|
| テキストファイル | .txt | text/plain |
| HTML | .htm,.html | text/html |
| CSVファイル | .csv | text/comma-separated-values |
| TSVファイル | .txt, .tsv | text/tab-separated-values |
| XMLファイル | .xml | text/xml |
| Microsoft Wordファイル | .doc, .docx | application/msword |
| Microsoft Excelファイル | .xls, xlsx | application/msexcel |
| Microsoft PowerPointファイル | .ppt, pptx | application/mspowerpoint |
| PDFファイル | application/pdf | |
| ビットマップファイル | .bmp | image/bmp |
| GIFファイル | .gif | image/gif |
| JPEGファイル | .jpg | image/jpeg |
| PNGファイル.png | .png | image/png |
| ZIPファイル | .zip | application/zip |
| LZHファイル | .lzh | application/lha |
| スタイルシートファイル | .css | text/css |
| JavaScriptファイル | .js | text/javascript |
| VBScriptファイル | .vbs | text/vbscript |
| 実行ファイル | .exe | application/octet-stream |
再利用期限
(Expires)
取得したデータを再度サーバーに問い合わせなくてもブラウザが再利用して良い期限
データの最終更新日時(Last-Modified)やエンティティ情報(ETag)
いつ更新されたものかの情報
サーバー上のファイルの場所ID
ファイルのサイズ
更新日時などから算出した更新チェック情報。
次回同じデータをリクエストする際に、これらの情報を使って更新されているかどうかを確認
移動先
(Location)
リクエストと違う場所からデータを取得するように示す指示。
リダイレクト先URI
タイムアウト
| 種類 | 内容 | ステータス |
|---|---|---|
| コネクション タイムアウト |
接続時 | 408 |
| リクエスト タイムアウト |
408 | |
| リード タイムアウト |
要求~応答まで | |
| セッション タイムアウト |
同一セッションを維持できる時間 | |
| ゲートウェイ タイムアウト |
504 |

