Skip to content

Instantly share code, notes, and snippets.

@KentarouKanno
Last active August 13, 2016 15:32
Show Gist options
  • Save KentarouKanno/7bae9a708a1404f5249c65302c96f057 to your computer and use it in GitHub Desktop.
Save KentarouKanno/7bae9a708a1404f5249c65302c96f057 to your computer and use it in GitHub Desktop.
HTTP

HTTP (Hyper Text Transfer Protocol)

HTTPリクエスト

① HTTPリクエスト行

・URL WebサイトのURLやパス
・HTTPのバージョン

メソッド 説明
GET 最も一般的に使用されるメソッドです。ブラウザはサーバに対してページの取得を要求します。(データ本体は送られない)
HEAD ヘッダのみの情報を要求します。サーバは GET メソッドと HEAD メソッドは必ずサポートしなければなりません。
POST CGI でよく使用されるメソッドです。method="POST" を指定したフォームに入力したデータをサーバに転送する際に使用されます。
PUT ファイルをサーバにアップロードする際に用いられます。
DELETE 指定したリソースを削除することをサーバに要求します。
CONNECT プロキシサーバを経由して SSL 通信する際などに使用します。
OPTIONS サーバがサポートしているメソッドやオプションを調べる際に用います。
TRACE HTTP要求がどのプロキシサーバを経由して送信されるかなど、HTTPの動作をトレースする際に用います。このメッセージを受け取った最後のサーバは、要求メッセージに含まれるエンティティ(通常はヘッダ+メッセージボディ)をそのまま返します。

② HTTPリクエストヘッダー

フィールド名 説明
Accept 利用可能なアプリケーション・メディアタイプ。複数指定、優先度指定も可能
Accept-Charset 利用可能な文字セット
Accept-Encoding 利用可能なエンコーディング形式(Content Coding形式)
Accept-Language 利用可能な言語コード。複数指定し、優先度を付けることが可能
Authorization ログインに必要な認証情報。ユーザー名とパスワードが格納される
Expect サーバ要求が実装されているかどうかの確認時に期待されるレスポンスを指定する
From 利用ユーザーに固有なメールアドレスなどの情報。ただし無条件にリクエストに付加するのはセキュリティ上の問題でもあり、あまり実装されていない
Host リクエスト先サーバ名。DNS名を利用する。1.1ではプロキシや仮想サーバの利用を前提に、必須としている
If-Modified-Since Dateを指定する。指定したDateより最新のリソースの場合のみデータを取得できるように指示する。ローカルキャッシュの最新確認に使用される
If-Match 指定したエンティティタグに一致する場合のみデータを更新/取得するように指示する
If-None-Match 指定したエンティティタグに一致しない場合のみデータを更新/取得するように指示する。最新情報の取得や競合の排除のために指定される
If-Range 指定されたエンティティタグが最新であれば、それ以外の残りを転送するように指示する。Rangeとともに使用される。または最終更新時刻(Date)を指定してもよい
If-Unmodified-Since Dateを指定する。指定したDate以降リソースが更新されていない場合のみデータを取得できるように指示する
Max-Forwards 経由できるプロキシの最大数
Proxy-Authorization プロキシにログインが必要な場合のための認証情報
Range 取得するデータのバイトレンジ。単位はバイト
Referer 直前にリンクされていたURL
TE 利用可能なエンコーディング形式(Transfer Coding方式)
User-Agent Webブラウザの固有情報

③ データ本体(POSTメソッドなどで使用)


HTTPレスポンス

① レスポンス状態行

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 見つかりません。
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 サーバーで予期しないエラーが発生しました。
501 Not Implemented 実装されていません。
502 Bad Gateway ゲートウェイが不正です。
503 Service Unavailable サービスは利用可能ではありません。
504 Gateway Timeout ゲートウェイがタイムアウトしました。
505 HTTP Version Not Supported このHTTPバージョンはサポートされていません。

② HTTPヘッダー

フィールド名 内容
Server ウェブサーバの名前とバージョン情報。
Date 現在の日付(グリニッジ標準時)
Last-Modified データの最終更新日時
Content-Length 出力のバイト単位の長さ バイナリデータも含みます。
Content-Type 出力のMIMEタイプ
Expires リソースの有効期限 この日付以降は無効です。キャッシュは破棄されます。
Location リダイレクト URL 情報 Location で指定されたリソースが送信されます。単独ヘッダとして出力されます。
Pragma リソースのキャッシングを有効/無効にする「Pragma: no-cache」と指定すると、リソースのキャッシュを無効にします。
Status リクエストのステータス単独ヘッダとして出力されます。
WWW-Authenticate 認証データ。認証に必要なユーザー名やパスワードなどの情報が含まれます。
Refresh 指定されたドキュメントを再ロードする。
Set-Cookie データをクライアント側に保存する。
Etag サーバー固有の情報が付与され、ブラウザキャッシュを再利用するかどうか判断させます。

③ データ本体


HTTP一般ヘッダー

フィールド名 説明
Cache-Control キャッシュのコントロールに必要な指示や情報
Connection 接続の永続性情報。'none'が指定されると、レスポンス後の接続は解除される
Date 日付情報。RFC822形式、RFC850形式、ANSI C形式などを受け入れる必要がある
Pragma 関連するクライアント/プロキシ/サーバそれぞれに認識させるための特殊な追加情報を記述する(例えば、'no-cache'で無条件で最新リソースを強制転送させる、など)
Trailer チャンク形式エンコーディングで使用されるフィールドを記述する
Transfer-Encoding 利用されている転送エンコーディング形式(Transfer Coding:形式)。1.1ではチャンク形式が定義されている
Upgrade HTTPの上位バージョンやその他プロトコルに移行する際に、取り得るプロトコルを指定する
Via 経由した主にプロキシの情報を格納する。主にループの検知に使用される。
Warning レスポンス・ステータスコードの付加的なコード番号やテキスト情報

エンティティ・ヘッダフィールド

フィールド名 説明
Allow 利用可能なリクエスト・メソッドの一覧
Content-Encoding リソース・コンテンツのエンコード方法(Content Coding方式)。1.1では、gzip、compress、deflate、identity(エンコードなし)が定義されている
Content-Language リソース・コンテンツの使用言語コード
Content-Length リソース・コンテンツのサイズ。単位はバイト
Content-Location リソース・コンテンツの固有位置を示すURI
Content-MD5 リソース・コンテンツのMD5検証値。チェックサムとして利用できる
Content-Range 転送されたデータがあるリソース・コンテンツの一部だった場合にデータのレンジを示す
Content-Type リソース・コンテンツのアプリケーション・メディアタイプ。MIMEのメディアタイプと同様
Expires リソース・コンテンツの有効期限。Date値
Last-Modified リソース・コンテンツの最終更新時刻。Date値

MIME Type

参考URL:
MIME Content-Type 表
MIMEタイプ一覧

MIME type ファイル形式 一般的な拡張子
text/plain テキスト .txt
text/html HTML文書 .htm .html
text/xml XML文書 .xml
image/gif GIFイメージ .gif
audio/wav WAV .wav
video/x-flv Flashビデオ .flv
application/xml XML文書 .xml
application/x-shockwave-flash Flash .swf
MIMEタイプ (MIME type) / コンテンツタイプ (Content-Type)

MIMEタイプとは、電子メールに文字以外のデータを含める方式を定めたMIMEで、データ形式を識別するためのコードの体系。転じて、Webのデータ送受信を行うHTTPなどでもデータの種類を表すコードとして利用されている。

「type/subtype」の形式で記述され、例えば

プレーンテキスト … text/plain
HTML文書 … text/html
JPEG画像 … image/jpeg
などと定められている。typeに指定できるものには

text (文字)
image (画像)
video (動画)
audio (音声)
application (アプリケーション固有)
message (メールメッセージ)
multipart (複数形式が混在)  multipart/form-data
などの種類がある。

RFCなどに登録されていない非公式なsubtype … 接頭辞「x-」を付け「application/x-lzh」のような形式
企業などの自社固有のデータ形式 … 接頭辞「vnd.」を付け「application/vnd.ms-word」のような形式
データ形式が不明あるいは任意のバイナリ形式 … 「application/octet-stream」
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment