401エラー 【HTTP 401 Unauthorized】
概要
401エラー(HTTP 401 Unauthorized)とは、Webサーバで起きるエラーの種類の一つで、ユーザー認証が必要であることを示すもの。認証手続きをに必要な制御情報(WWW-Authenticate)と共に送られ、Webブラウザが認証ダイアログを表示する。WebサーバとWebブラウザなどのクライアントの間ではHTTP(Hypertext Transfer Protocol)という通信規約(プロトコル)でデータ伝送を行っている。クライアントからの要求(リクエスト)に対してサーバは応答(レスポンス)を返すが、その際に現在の状態を示すHTTPステータスコードを通知する。
ステータスコードの400番台は要求に応じられなかったエラーを表しており、401番のエラーメッセージは “Unauthorized” (認可されていない)である。リクエストされた資源にはアクセス権限の確認が必要であることを表しており、保護された資源への初回のアクセスや、認証に失敗した場合に返される。
例えば、Webサーバ上に設けられたCMS(コンテンツマネジメントシステム)の管理画面など、認証で保護された領域にアクセスしようとすると、401エラーが返される。このとき、認証に必要な情報が「WWW-Authenticate:」ヘッダでブラウザに伝達される。
ブラウザはエラーページ上に認証ダイアログをポップアップ表示し、IDとパスワードの入力を求める。利用者が入力した情報から認証用の「Authorization:」ヘッダを作成し、再度同じページの取得リクエストを送信する。サーバは受け取った認証データを検証し、正しければ認証成功となりページが送り返される。認証に失敗すると再び401エラーが返される。
似たステータスコードに「403エラー」(HTTP 403 Forbidden)がある。これはアクセスしようとした資源および実行しようとした操作に対する権限が無いことを示しており、認証が必要なのに未認証の場合や、認証済みだがその資源に対するアクセス権は与えられていない場合などに返される。
(2024.3.5更新)
HTTPステータスコード一覧
コード | 意味 | 初出 |
---|---|---|
100番台:Informational (情報) | ||
100 Continue | 継続 | HTTP/1.1 |
101 Switching Protocols | プロトコル切替 | HTTP/1.1 |
102 Processing | 処理中 | RFC 2518 |
103 Early Hints | 予想ヘッダの先行送信 | RFC 8297 |
200番台:Success (成功) | ||
200 OK | 成功 | HTTP/1.0 |
201 Created | 作成完了 | HTTP/1.0 |
202 Accepted | 受理 | HTTP/1.0 |
203 Non-Authoritative Information | 非公式な情報 | HTTP/1.1 |
204 No Content | 内容が空 | HTTP/1.0 |
205 Reset Content | 表示を初期化せよ | HTTP/1.1 |
206 Partial Content | 内容の一部を送る | HTTP/1.1 |
207 Multi-Status | 複数ステータスが混在 | RFC 4918 |
208 Already Reported | 以前に通知済み | RFC 5842 |
226 IM Used | 差分符号化されている | RFC 3229 |
300番台:Redirection (転送) | ||
300 Multiple Choices | 複数の候補がある | HTTP/1.1 |
301 Moved Permanently | 恒久的に移転 | HTTP/1.0 |
302 Found *1 | 別の場所で見つけた | HTTP/1.0 |
303 See Other | 別の場所を探せ | HTTP/1.1 |
304 Not Modified | 変更なし | HTTP/1.0 |
305 Use Proxy | 中継サーバを通せ | HTTP/1.1 |
307 Temporary Redirect | 一時的な転送 | HTTP/1.1 |
308 Parmanent Redirect | 恒久的な転送 | RFC 7538 |
400番台:Client Error (クライアントエラー) | ||
400 Bad Request | 不正なリクエスト | HTTP/1.0 |
401 Unauthorized | 未認証 | HTTP/1.0 |
402 Payment Required | 有料である | HTTP/1.1 |
403 Forbidden | アクセス権がない | HTTP/1.0 |
404 Not Found | 存在しない | HTTP/1.0 |
405 Method Not Allowed | そのメソッドは不可 | HTTP/1.1 |
406 Not Acceptable | 受理不可 | HTTP/1.1 |
407 Proxy Authentication Required | プロキシの認証が必要 | HTTP/1.1 |
408 Request Timeout | 時間切れ | HTTP/1.1 |
409 Conflict | 競合 | HTTP/1.1 |
410 Gone | 消滅した | HTTP/1.1 |
411 Length Required | 長さを指定せよ | HTTP/1.1 |
412 Precondition Failed | 前提条件不整合 | HTTP/1.1 |
413 Content Too Large *2 | 受信データが長すぎる | HTTP/1.1 |
414 URI Too Long *3 | URIが長すぎる | HTTP/1.1 |
415 Unsupported Media Type | データ形式非対応 | HTTP/1.1 |
416 Range Not Satisfiable *4 | 要求範囲が誤っている | HTTP/1.1 |
Expectヘッダの処理に失敗した | HTTP/1.1 | |
(かつてジョークRFCで使われた) | RFC 2324 | |
送信先が間違っている | HTTP/2 | |
受信データは処理できない | RFC 4918 | |
要求リソースはロックされている | RFC 4918 | |
依存関係の解決に失敗 | RFC 4918 | |
TLSのEarly-Data処理に失敗 | RFC 8470 | |
新しいバージョンのHTTPを使え | HTTP/1.1 | |
条件付きリクエストにせよ | RFC 6585 | |
短時間に要求を送りすぎである | RFC 6585 | |
長過ぎる要求ヘッダ項目がある | RFC 6585 | |
法的な理由で拒否 | RFC 7725 | |
500番台:Server Error (サーバエラー) | ||
500 Internal Server Error | サーバ内部のエラー | HTTP/1.0 |
501 Not Implemented | 機能が未実装 | HTTP/1.0 |
502 Bad Gateway | 中継サーバのエラー | HTTP/1.0 |
503 Service Unavailable | サービス停止中 | HTTP/1.0 |
504 Gateway Timeout | 中継サーバの要求が時間切れ | HTTP/1.1 |
505 HTTP Version Not Supported | HTTPバージョンが非対応 | HTTP/1.1 |
506 Variant Also Negotiates | 版指定で循環参照が発生 | RFC 2295 |
507 Insufficient Storage | ストレージ容量が不足 | RFC 4918 |
508 Loop Detected | 要求処理中に無限ループが発生 | RFC 5842 |
510 Not Extended | HTTP拡張機能には非対応(廃止済み) | RFC 2774 |
511 Network Authentication Required | キャプティブポータルで認証を受けよ | RFC 6585 |
*2 413はHTTP/1.1では「Request Entity Too Long」、RFC 7231では「Payload Too Long」だった。
*3 414はHTTP/1.1では「Request-URI Too Long」だった。
*4 416はHTTP/1.1では「Requested Range Not Satisfiable」だった。
*5 418は1998年エイプリルフールのジョークRFC 2324で「I'm a teapot」として定義されていた。