皆さんこんにちは、江嵜です。
今回は Web 系のプログラミングをしている際に必要となる知識、 HTTP ステータスコードを見てみます!
…とは言ってもとても数が多いので、とりあえず 4xx 番台の内容だけ見ていきましょう。
そもそも HTTP ステータスコードって? 4xx 番台って?
HTTP とは通信方法の一種ですが、その通信の結果を分かりやすく返すため、
あらゆる状態について番号が割り当てられています。
その番号(コード)が HTTP ステータスコードと呼ばれるものですね。
皆さんがよく知っているものとしては、見ようとしたページがなくなっていた時の
404 Not Found
でしょうね!
例えば https://www.google.co.jp/404 みたいな感じで、存在しないページを開こうとするとこのエラーが返ってきます。
その他にも通信が成功したときの 200 Success
等いろいろあるのですが…
今回は番号が 4xx
と、 百の位が 4
になっている番号を見ていきます!
この 4xx
番はクライアントエラーと呼ばれていまして、
リクエストした側に問題があるときのエラーとなっています。
( 404 も、ページがないところにアクセスした → リクエストする側が URL を間違えているよ!という解釈ですね)
ちなみにこの 4xx
番エラーは 28 種類もある(!)ので、それぞれサックリと行きますね。
(ついでに WebDAV 用のエラーも飛ばします)
各エラーの遭遇頻度についても軽く触れますが、これは私の肌感覚で、統計等取ったわけではないのであしからず。
さぁ、みなさんはいくつ見たことがあるでしょうか!
4xx ステータスコード、ドン!
400 Bad Request
不正なリクエスト
なんか良くわからんけど、そんなリクエストじゃアカンよ!と、最初にしてなんとふんわりしたエラーなんでしょうか。
この後紹介するステータスコードがどれも当てはまりそうにないときに活躍するコードです。
401 Unauthorized
未認証
認証してからじゃないと見せられないよ、というエラーですね。
いわゆる会員ページ等々によく使われるエラーですが、最近ではそのままログインページに飛ばすのが主流です。
このエラーのページそのものを見る、という機会はないですね。
402 Payment Required
支払いが必要
文字のままですが、まだ「将来的にこういう意味として使おうね」と予約されているだけ。まだ実際には使われていないです。
オンライン決済が日常的に行われるようになった今、近いうちにお目見えすることになるかもしれませんね。
403 Forbidden
権限なし
401 に近いですが、 401 は「誰だか分からないから認証して!」に対して、
403 は「お前に見せるコンテンツはない!」という意味になります。
実際 401 の代わりに 403 を使っているサイトも結構ある気はしますが。
サーバー側の設定ミスで、誰にも公開しない設定にしてしまった場合も出現するので、
もしかしたら 404 に次いでよく見るかもしれないですね。
404 Not Found
見つからない
インターネットをしていてよく見るエラー No.1。
アドレスの打ち間違えの場合や、サイト作成者のリンクの貼り間違え、
元々あった記事が削除されたときなどに出てきますね。
インターネットに詳しくない人でも知っているエラーの王様(?)的存在です。
405 Method Not Allowed
許可されていないメソッド
ちょっとこれは難し目です。
HTTP はリクエストを送るときに、データを取得したいのか、投稿したいのか、削除したいのか、という情報をくっつけることになっているのですが、
これは例えば取得しかできないデータに対して、削除のリクエストを投げた時等、許されていない行動をしようとしたときに発生します。
もしかしたら Web プログラマーなら時々見かけるかも、なレベルの出現度。
406 Not Acceptable
受諾できない
これもちょっとメンドウ。
リクエストを送る際に、例えば言語等を「これで送って!」とサーバー側にお願い出来るのですが、
その要求をサーバーが満たせない場合に発生します。
例えば英語しか返却できないサーバーに、日本語で送って!とお願いした場合などですね。
普段はブラウザがよしなにやってくれるので、これも見る頻度はほぼなし。
407 Proxy Authentication Required
プロキシで認証が必要
リクエストを送る際に直接対象のサーバーへアクセスせず、別のサーバーを通してアクセスする際、そのサーバーをプロキシと呼びます。
その、中継地点としているサーバーが、認証を要求している場合に発生するエラーですね。
これは…どこで見るんでしょうか?私は見たことがないです。
多分、プロキシを提供するサービスが存在するので、そのようなサービスが使うエラーなのでしょう。
普通にインターネットをしている分には遭遇しないエラーですね。
408 Request Timeout
リクエストが時間切れ
サーバー側が決めている時間内にリクエストに対して返事を返せなかった場合、
サーバー側の負荷が上がり続けることを避けるために、途中でこのエラーを返してリクエストを終了させます。
あまりにも大きなファイルをアップロードした場合とかですかね。
あとは、サーバー側の処理がうまくいっていなくてこのエラーになることも。
いわゆる「バズった」りしたときに、アクセスが集中して見られなくなるのも、サーバー側の処理が追い付いていなくて 408 になりますね。
そういう意味では、他のエラーと比べれば割と出現確率が高いエラーと言えるのではないでしょうか。
409 Conflict
競合
サーバー側の情報と競合してしまった場合のエラーです。
例えば、サーバー側が持っているデータより古いデータを送って更新作業をしたときなど…
これも普通は見ないですね。
410 Gone
消失した
リクエストした内容がない場合、という意味では 404 と同じなのですが、
こちらは、元々記事などがあって → それが永久に削除された という意味になります。
…が、 404 で代用できますし、わざわざ元々記事があったかどうかなんて管理するの面倒なので、
410 を使う例はほぼないですね。
ということでこれもかなりレアなエラー。
411 Length Required
長さが必要
ここからかなりマイナーな内容になっていきますよ。
こちらはサーバーへ情報を送る際に、「送る内容は 〇〇 バイトの長さですよ」と伝える必要があるのですが、
その情報が欠落している場合に返されます。
412 Precondition Failed
前提条件で失敗
例えばキャッシュを更新しようとした場合に、
既に持っているリクエスト側が持っているキャッシュがサーバーの内容よりも新しい場合等ですね。
サーバーのデータが更新されていないので、キャッシュを更新する必要がない → 前提条件で必要なし
となるわけです。
413 Payload Too Large
データ量が多すぎる
サーバー側で定めるより大きなデータが送られてきた場合に、サーバーの処理能力を落とさないように
リクエスト自体を無効にする、ということですね。
画像等のアップロードでまれに目にすることがある…かもしれないです。
414 URI Too Long
URI が長すぎる
ここで登場した URI とは URL の事だと思っていただいて(厳密には違いますが)。
URL が長すぎる、ということですね。
URL にはいろいろな情報を載せることができるのですが、情報が多すぎたときに返されるエラーです。
415 Unsupported Media Type
サポートされていないメディアタイプ
mediaタイプとは、画像とか、動画とか、HTML も一つのメディアタイプですね。
例えば動画が欲しいとリクエストしたが、静止画しかないよ!といった場合に発生するエラー。
416 Range Not Satisfiable
範囲が満たされない
リクエストで「ここからここまでください!」とお願いされたが、その範囲にデータがない場合。
417 Expectation Failed
Expect ヘッダーのオプションが不正
サーバーへのリクエスト時に、サーバーの動作に対してのオプションが指定できるのですが、
その内容がサーバー側で取り扱えなかった場合に使用されます。
418 I’m a teapot
私はティーポットです
私はティーポットです!
ちょっと何を言っているか分からないですが、実はこれ 1998 年のエイプリルフールのネタです。
Hyper Text Coffee Pot Control Protocol という、コーヒーポットを制御するための通信方法について、
ティーポットに対してコーヒーを淹れさせようとした、というエラーです。
技術屋さんはこういうネタ好きですよね。
ちなみに「意味不明な内容で貴重な番号を無駄にするな」という理由で、今でもちょくちょく議論になってます。
421 Misdirected Request
宛先が誤っているリクエスト
リクエストをサーバーに振り分ける際、不適切なところへ割り当てられてしまった場合に発生するようです。
私は出会ったことがないですね…
422, 423, 424
こちらは WebDAV 用なのでパス。
(気になる方は調べてみてね!)
426 Upgrade Required
アップグレードを要求
HTTP の取り決めにもいろいろなバージョンがあるのですが、古いバージョンで接続された際には
サーバーは新しいバージョンの HTTP の方式で接続するよう要求しなおすことが出来ます。
こちらも私は出会ったことがないタイプ。
428 Precondition Required
前提条件が必要
こちらは 412 Precondition Failed に似ていますね。
412 では前提条件でリクエストを失敗した場合ですが、こちらではそもそも前提条件が付いていなかった場合。
429 Too Many Requests
リクエストが多すぎる
一度に大量のリクエストが送られた際に、サーバーの性能が低下しないようにリクエストを制限することができます。
多分 DDoS 攻撃が来た時なんかに見るエラーなんじゃないでしょうか。
431 Request Header Fields Too Large
リクエストヘッダーフィールドが大きすぎる
前提条件等を格納する場所がヘッダーですが、ヘッダーに格納されている情報が多すぎる場合に出現します。
こちらも常識的な使い方をしている限りは、まず見ないでしょうね。
451 Unavailable For Legal Reasons
法的理由によって使用できない
こちらは生まれたのが 2015 年 12 月ととっても最近のコードですね。
今の所あまり目にすることはないですが、インターネットの使用に検閲が入る場合では見ることがあるかも。
将来的には著作権に関わるページ等々で使用されるようになるかもしれないですね。
今はまだ 403 Forbidden で代用可能なので、ほとんど見かけないでしょう。
まとめてみて
こうやって見るとたくさんのコードがありますね。
ちなみにこれで 4xx 番台のみなので、他のものを含めるともっとあるということになります。
単純に Web ページを見る側としてはあまり気にしていませんが、エラーの理由を分かりやすくするために
作る側の人はエラーコードまで配慮して作っていきたいですね
(なんでもかんでも 404 ではダメですよ!)
ちなみに今回は https://developer.mozilla.org/ja/docs/Web/HTTP/Status のページを参照にして記事を作成しました。
4xx 番台以外のコードも紹介されているので、興味があればぜひ見てみてくださいね。