HTTPプロトコル

HTTPプロトコルとは?

WEBサーバーとクライアント(ブラウザ等)が、相互に通信する為の仕組み
クライアントからの閲覧要求(HTTPリクエスト)
WEBサーバーからの応答(HTTPレスポンス)
から成る。
送信時はリクエストメッセージをWEBサーバーに送り、
受信時はレスポンスメッセージをWEBサーバーから受け取る。
ブラウザはレスポンスメッセージ内のHTMLデータを解釈して画面に表示する。

HTTPリクエスト

メッセージヘッダ リクエストライン メソッド
URI
HTTPバージョン
リクエストヘッダ ユーザーエージェント
リファラ
データ形式
クッキー
メッセージボディ ポストデータ

(1)リクエストライン
メソッドURIHTTPバージョン
(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ファイル .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

仮想環境

前の記事

仮想化技術
JAVA 共通

次の記事

JAVA 環境設定