【これだけは覚えておきたい】おさらいと復習をかねてHTTPステータスコードのエラーを簡単に解説
はじめに
皆様はじめまして!
この度初めてブログを書かせていただきました、24卒システムソリューション部のミコトです。
ニックネームは思いつかなかったので母親から頂きました。
今回は主に私が業務内で重要性を感じた、ステータスコードの中でもエラーコードと呼ばれる 4XX、5XX について解説したいと思います。
↑エラーコードとは、上の画像でいうところの401です!
解説するにあたって、サーバー内に記録されているアクセスログの見本からステータスコードを見ていきますが、なじみのない方は普段こんなの見ながらアクセスの解析してるんだなぁ、程度に軽く眺めていただけば幸いです。
ちなみにアクセスログについて気になった方は、ぜひこちらをご参照ください!
【Apache】アクセスログの見方をやさしく解説!※ 2024年更新
【nginx】アクセスログの見方・設定・場所等を解説
そもそもステータスコードとは?
ステータスコードとは、HTTPリクエストに対してWebサーバーが返す3桁の数字のことで、この数字から自分が送ったリクエストの状態を確認することができます!
デベロッパーツール(Chromeでいうところの検証ツール)から確認できるので、よければちらっとのぞいてみてください。
↑赤枠の部分がステータスコードです!
ステータスコードは、情報提供(1XX)、成功(2XX)、リダイレクション(3XX)、クライアントエラー(4XX)、サーバーエラー(5XX)という5つのカテゴリに分類されます。これにより、アクセスが正常に行われたか、またはうまくいかなかった場合にはどの部分に問題があったのかを明確に理解することができます。
二種類のエラーコード
4XX - クライアントエラー
4から始まるステータスコードは、主にクライアント側(ユーザー)に問題があることを示しています。リクエストの内容に誤りがあったり、アクセスが許可されていなかったりなどの理由からサーバーが処理できなかったときに見られます。
例えば、以下のようなものをよく見かけます。
▼400 Bad Request:
127.0.0.1 - - [25/Dec/2023:14:25:00 +0900] "GET /api/data?date=2023-12-33 HTTP/1.1" 400 172 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
これは、クライアントが送信したリクエスト形式が不適切であったために 400 エラーが返っています。
例えば、上記の例だとクライアントが '/api/data' に対して無効な日付(2023年 12月23日)を入力しているため、400 エラーが発生していたことがわかります。
▼401 Unauthorized:
127.0.0.1 - - [25/Dec/2023:13:15:00 +0900] "POST /login HTTP/1.1" 401 187 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
このエラーは、クライアントが適切な認証資格を提供していない状況を表しています。
上の例では、/login に対して POST リクエストを行い、401 エラーが発生したことから正しいユーザー名やパスワードなどを送信していない可能性が高いことがわかります。
▼403 Forbidden:
127.0.0.1 - - [25/Dec/2023:13:20:00 +0900] "GET /admin/settings HTTP/1.1" 403 249 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30"
Forbidden とは「禁止の」という意味の英単語で、その名の通り限られたユーザーのみがアクセスできるパスにリクエストを送った際に表示されることがあるエラーコードになります。
例のエラーでは権限を持っていないクライアントが /admin/settings にGETリクエストを送信したが、403エラーが返されていることがわかります。
▼404 Not Found:
127.0.0.1 - - [25/Dec/2023:13:25:00 +0900] "GET /about-us HTTP/1.1" 404 210 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1"
この 404 エラーはサーバーがリクエストされたリソースを見つけることができなかった場合に返されることがあります。これは、いくつか発生原因が考えられます。
- ユーザーがURLを誤って入力した
- 指定されたページが古く、すでに存在していなかった
- サーバーの設定ミスにより、正しいURLが設定されていなかった
- リソースが一時的に移動または削除された
5XX - サーバーエラー
5から始まるステータスコードは、サーバー側に問題があることを示しています。クライアントからのリクエストには成功している物の、何らかの理由でサーバーが処理できなかった時に見られます。
例えば、以下のようなものがあります。
▼500 Internal Server Error:
127.0.0.1 - - [25/Dec/2023:14:00:00 +0900] "GET /dashboard HTTP/1.1" 500 215 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
サーバー内部にエラーが発生し、リクエストを処理できない場合に返されるエラーコードです。
このエラーと対面した場合は、一度サーバー内の設定の中で直近で編集したものを見直してみると原因がわかったりします!
また、何らかの設定変更を行ったうえでのエラー発生の場合は、あらかじめとっていたバックアップで切り戻しを行うと解決したりもしますよ!
▼503 Service Unavailable:
127.0.0.1 - - [25/Dec/2023:14:15:00 +0900] "GET /reports HTTP/1.1" 503 212 "-" "Mozilla/5.0 (iPad; CPU OS 13_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.2 Mobile/15E148 Safari/604.1"
サーバーが一時的にリクエストを処理できない状態であることを示します。これは、メンテナンス中であるか、過負荷によるものである可能性があります。
例えば、アクセスが急増した場合に、サーバーが処理しきれなくなって 503 エラーを返す、なんてこともあります!
▼504 Gateway Timeout:
127.0.0.1 - - [25/Dec/2023:14:20:00 +0900] "GET /video/stream HTTP/1.1" 504 160 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36"
何らかの影響でサーバーの負荷が高くなってしまい、ゲートウェイ/プロキシサーバーが、上流サーバーからの応答を待っている間に決められた時間内(タイムアウト値)が過ぎてしまった場合に見られます。
タイムリミットまでにユーザーからのリクエストに応答することが困難になってしまっている状態です。
また、ミドルウェアの再起動をして一時的に接続をリセットすることで治ることもありますが、再発防止のためにそれだけ処理に時間が掛かってしまう原因を調べる必要があります。
(タイムアウト値を引き延ばすことも解決方法の一つですが、業務中にそれで解決した例は見たことないです、、、)
原因の例としては、以下のようなものが挙げられます。
- 何か重い処理をしていて詰まっている
- リソースを多く消費するような大規模データベース操作をした
- ネットワークに問題がある
- 上流サーバーに何か障害が起こっている
小ネタ
▼418 I'm a teapot:
この 418 エラーをご存じですか?
約20年前のエイプリルフールで定義されたステータスコードで、
ティーポットにコーヒーを注ごうとしたら拒否された、というエラーになります。
実はHTTP通信じゃなくて、HTCPCP(Hyper Text Coffee Pot Control Protocol)通信のステータスコードとして存在していて、検証ツールでもステータスが 418 になるんです。
興味のある方はこちらから是非お確かめください…!
また、HTCPCPも 418 と同様にエイプリルフールネタになっていますので調べてみてください!
まとめ
以上、ステータスコードの中でもエラーコードと呼ばれるものの紹介でした!
これ以外にも、例えば 499 など特定のミドルウェアで出力されるエラーコードなんかも存在するので、気になった方は是非調べてみてください!
インフラエンジニアとして働いている一年目の今、ステータスコードは本当によく出てくるので興味のある方は勉強することをお勧めします。(私は何も知らずに入りましたが)
ご覧いただきありがとうございました!
参考:
【よく見るものを一覧で解説】HTTPステータスコードとは?コード番号別に詳しく解説
HTTPステータスコード一覧と詳細ガイド
HTTP レスポンスステータスコード
httpのステータスコード 418 とは?