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 |