【図解/初心者向け】httpフォーマットとメソッド/ステータスコード一覧 ~getとpostの違い,よく使われるものとか原因とか~

http のメソッドとステータスコード

http はクライアントからメソッドで要求 (リクエスト) を投げ、サーバ側でリクエスト内容と状況に応じたステータスコードを応答 (レスポンス) します。

メソッド

よく使われるメソッドGETPOST です。

GET はサーバ上のファイルなどのデータをダウンロードを要求するメソッドです。html ファイルだけでなく txt でも pdf でも取得可能です。一般的にはブラウザ上に表示されますが、ブラウザの設定によっては pdf 等は Adobe Reader 等が起動することもあります。

POSTデータをアップロードするためのメソッドです。主に掲示板への投稿などを行うことができます。送り込むデータはリクエストヘッダ内に含めても良いし、メッセージボディ内に含めても構いません。

ステータスコード

また、よく使われるステータスコード200 です。これは処理が正常に完了したことを示します

GET に対してのレスポンスのステータスコードが『200』であれば、メッセージの中に GET で要求したファイルがペイロードに含まれています。

POST に対してのレスポンスのヘッダーにスタータスコード『200』があれば、POST で送られたデータが無事サーバ側で受け取れたことを示しています。メッセージの中には完了後の表示画面用のファイルが含まれます。サーバはデータを受け取って処理を行いますが、その結果が表示されるかどうかは、POSTでデータを送ったスクリプトファイル次第です。

http のフォーマット

http のフォーマットは「スタートライン」と「ヘッダフィールド」と「メッセージボディ」の3つから構成されます。リクエスト(クライアント⇒Webサーバ)の場合、「スタートライン」は特に「リクエストライン」と呼ばれ、ここにはメソッドが書かれます。同様にレスポンスのスタートラインは「ステータスライン」と呼ばれ、ここにはステータスコードが書かれます。

GET 等のリクエストの多くは一般にはメッセージボディは使われません。

http のバージョン1 や 1.1 では全て ascii コードでやり取りされるため、パケットキャプチャで見ると以下のように見えます。

[リクエストの場合]

ASCII で 47=G, 45=E, 54=T ですので、47 45 54 が "GET" という文字列であることが分かります。

[レスポンスの場合]

バージョン2以降ではフォーマットが変わり、ascii だけではなくなりましたが、リクエストやレスポンスの大枠は変わらず残り続けています。

http のバージョン変化や最新バージョンについては以下も併せて参照下さい。

関連記事

インターネットの普及に貢献してきた HTTP プロトコル、その新バージョンである HTTP/3 (http バージョン3) の仕様策定が進行中です。2019/4/23 に draft version 20 が公開されています。 本記事[…]

REST API 等で利用される GET と POST について

http は REST API で利用するデータを伝達するプロトコルとしても利用されており、クライアントからだけではなくサーバ間で連携してデータをやり取りするときにも使われます。

データを送り込む実装としては POST はもちろん、GET でも送り込むことができます。

GET の場合は例えば api.php というスクリプトに testval=hoge を送り込みたいときは GET /api.php?testval=hoge というように URL にデータを含めてしまうのです。

また、POST の場合ではメッセージボディで送ることもできますが、ヘッダフィールドに載せてもデータを送信できます。このあたりはサーバアプリケーションの仕様に依存します。

データ量が大きいときには POST のほうが無難です。(URL が長いとアプリ側の対応が必要になる可能性もあるため)

メソッドの種類

メソッドには以下の種類があります。(参考 https://tools.ietf.org/html/rfc7231)

Method 説明 リクエストラインの構文例 構文例の内容
GET 対象ファイルを
ダウンロード
GET /index.html HTTP/1.1 index.htmlを
ダウンロードする
HEAD 対象ファイルを
GETした時の
ヘッダ情報取得
HEAD /index.html HTTP/1.1 index.htmlをGET
した時のヘッダ(メタ
情報)だけを取得する
(index.htmlファイル
の中身は取得しない
POST データ送信 POST /form.php HTTP/1.1
~~
[メッセージボディ] val=hoge
form.phpに
"val=hoge"を送る
(form.phpがその
データを受け取り
処理する
PUT ファイル生成 PUT /new.html HTTP/1.1
~~
[メッセージボディ] hogeratta
new.htmlの中身
をhogerattaという
データを持つ
new.htmlを新規作成
(既存同一ファイルが
あれば置き換え)
(主にWebDAV用)
DELETE ファイル削除 DELETE /new.html HTTP/1.1 new.htmlを削除する
(主にWebDAV用)
CONNECT https通信を
プロキシ経由
でトンネル
CONNECT www.google.com:443
HTTP/1.1
ブラウザ等で設定
しているプロキシ
サーバに対し
www.google.com
へのhttps通信を
トンネルさせる
OPTIONS サーバがサポート
しているメソッド
やオプション
の情報を取得
OPTIONS /index.html HTTP/1.1 index.htmlを扱う
にあたり、サーバが
サポートしている
メソッドやオプション
の情報を取得する
TRACE ループバック試験
(デバッグ用)
TRACE /index.html HTTP/1.1 リクエストと同じ
内容のレスポンス
を受信する

ステータスコードの種類

ステータスコードには 3 桁の数字で示され、種類は非常に多くあります。

3 桁目の数字が大枠の内容を示しており、100 番台は情報提供、200 番台は成功、300 番台はリダイレクト (別のページに自動で移動)、400 番台はクライアント側のエラー、500 番台はサーバ側のエラーを示します。

まずはよく使うものだけをリストします。

Status
Code
ステータス 説明 Webサーバの気持ち (例)
1XX Informational 情報提供
100 Continue 継続 今のところ問題無いね。
経過観察してるよ。
2XX Successful 成功
200 OK 処理完了 処理がきちんと完了したよ!
206 Partial Content 部分的に成功 ajaxで継続処理が必要かも
だから待ってるよ!
3XX Redirection リダイレクト
301 Moved Permanently 恒久的移動 そのURLはこっちに引っ越したよ!
302 Found 一時的移動 そのURL、ちょっと今はこっちに
移動してるんだ。
304 Not Modified 更新無し そのURL、更新してないからブラウザ
のキャッシュから表示してちょ。
4XX Client Error クライアント側のエラー
400 Bad Request 不正な要求 リクエストがフォーマット通りじゃ
ないよ。ルールは守ってね。
401 Unauthorized 未認証 認証が必要だから資格情報(ID
パスワード)を入力してね。
それを見て200か403を返すからね。
403 Forbiden 禁止 君には見せられないな。
404 Not Found 見つからない そのURLのコンテンツファイル,無いよ?
408 Request Timeout 要求タイムアウト リクエスト待ってたけど来ないから
エラーにしちゃった。
5XX Server Error サーバ側のエラー
500 Internal Server Error 内部エラー サーバ側でアプリの処理でエラーが
出ちゃった
502 Bad Gateway 不正なGW (プロキシ/リバプロの気持ち)
なんかアクセス先のWebサーバから
訳分からん応答が来たんだけど。。
途切れ途切れでうまく聞こえんし。
503 Service Unavailable サービス
利用不可
負荷が閾値以上に上がってるから
受け付けいったん止めますね。
また、他にも以下の種類があります。(参考 https://tools.ietf.org/html/rfc7231)

Status
Code
ステータス 説明 Webサーバの気持ち (例)
1XX Informational 情報提供
100 Continue 継続 今のところ問題無いね。
経過観察してるよ。
101 Switching
Protocols
プロトコル変更 HTTP/1.1からHTTP/2に
切り替えたいの?OK!
2XX Successful 成功
200 OK 処理完了 処理がきちんと完了したよ!
201 Created 作成完了 PUTメソッドでファイル
新規作成したよ!
202 Accepted 受付完了 受け付けは完了したよ!
処理は今やってるからね!
203 Non-Authoritative
Information
信頼性欠如 (プロキシの気持ち)
昔のキャッシュの情報だから
気を付けてね。
204 No Content 内容なし 返すデータが無いから画面更新
しないでいいよ!
205 Reset Content 内容のリセット リクエストは受け付けたよ!
画面は初期化してね!
206 Partial Content 部分的に成功 ajaxで継続処理が必要かも
だから待ってるよ!
3XX Redirection リダイレクト
300 Multiple Choices 複数選択 そのURLのコンテンツ、実は2つ
あるんだ。どっちがいい?
301 Moved Permanently 恒久的移動 そのURLはこっちに引っ越したよ!
302 Found 一時的移動 そのURL、ちょっと今はこっちに
移動してるんだ。
303 See Other 他を参照 ちょっとこっちのコンテンツ見てみ。
304 Not Modified 更新無し そのURL、更新してないからブラウザ
のキャッシュから表示してちょ。
305 Use Proxy プロキシ利用 プロキシ使ってアクセスしてちょ。
306 (Unused) 未使用 将来用に予約してるよ!
307 Temporary Redirect 一時的移動 そのURL、ちょっと今はこっちに移動
してるんだけど、メソッドは絶対に
変えるなよ!いいか?俺は302の
ように甘くないからな?
絶対変えるなよ?
4XX Client Error クライアント側のエラー
400 Bad Request 不正な要求 リクエストがフォーマット通りじゃ
ないよ。ルールは守ってね。
401 Unauthorized 未認証 認証が必要だから資格情報(ID
パスワード)を入力してね。
それを見て200か403を返すからね。
402 Payment Required 支払え 金払えよ?
403 Forbiden 禁止 君には見せられないな。
404 Not Found 見つからない そのURLのコンテンツファイル,無いよ?
405 Method Not Allowed メソッド不許可 おいおい、DELETEなんてできるわけ
なかろう?
406 Not Acceptable 受付不可 gzip圧縮は対応してないから
受け付けないよ。
407 Proxy Authentication
Required
要プロキシ認証 プロキシ認証が必要だよ。
408 Request Timeout 要求タイムアウト リクエスト待ってたけど来ないから
エラーにしちゃった。
409 Conflict 競合 PUT受け付けようとしたけど今
別のクライアントからPUTされ
てるから受け付けられないよ。
410 Gone 完全撤収 そのURL、確かに前まであったよ。
でももう無いし、今後も絶対に
戻さないからね。
411 Lenth Required Lenthが必要 Content-Length ヘッダフィールドを
付けてね。
413 Payload Too Large ペイロード
大きすぎ
お前、話が長すぎ。切るよ。
414 URI Too Long URI 長すぎ チョ☆チョニッシーナマッソコぶれッ
シュ☆エスボ・・・なんて?
415 Unsupported
Media Type
メディアタイプ
未サポート
そのContent-Type,未サポートっす。
417 Expectation Failed 予想失敗 Expect ヘッダフィールドに
「100 Continue」入れられても・・
サポートしてないからFailな。
426 Upgrade Required Upgrade要求 HTTP/1.1からHTTP/2に切り替えて
下さいな。
5XX Server Error サーバ側のエラー
500 Internal Server Error 内部エラー サーバ側でアプリの処理でエラーが
出ちゃった
501 Not Implemented 未実装 MOVEメソッドとか実装してないから
使えないよごめんね。
502 Bad Gateway 不正なGW (プロキシ/リバプロの気持ち)
なんかアクセス先のWebサーバから
訳分からん応答が来たんだけど。。
途切れ途切れでうまく聞こえんし。
503 Service Unavailable サービス
利用不可
負荷が閾値以上に上がってるから
受け付けいったん止めますね。
504 Gateway Timeout GWタイムアウト (プロキシ/リバプロの気持ち)
アクセス先のWebサーバからの応答
を待ってたんやが来ないから
タイムアウトや。
505 HTTP Version
Not Supported
httpバージョン
未サポート
http/999 ってなんやねん。

 

IT/インフラエンジニアの地位とスキル向上のために

関連記事

IT 技術の進化はとどまることを知りません。矢継ぎ早に新たな技術が出てきたり、数年前の技術が時代遅れになったりと、IT エンジニアは勉強し続ける運命のようです。 それをどう思うかはあなた次第。 ビジネスの基本は『付加価値を与える[…]

IMG
関連記事

nesuke の考える NW エンジニアの2つの道 ネットワークエンジニアには 2 つの道があります。 1 つはネットワーク構築一筋で、L4 までをひたすらきっちりと構築していく道。 もう 1 つはネットワークを軸として深堀し[…]

IMG