401と403の違い|401は「名乗ってください」、403は「名乗っても入れない」。パスワードの入れ直しで直るのは401だけ
401と403は、どちらも「入れません」のエラーだが意味が違う。
401は認証が足りないだけで、正しいIDとパスワードで通る見込みがある。403は権限や設定で断られていて、入れ直しても変わらない。
このサイトで403が返る場所と、404で存在を隠す考え方もまとめた。
401と403は、どちらも「入れません」という意味のエラーだが、言っていることが違う。
401は「誰なのか名乗ってください」で、IDとパスワードを入れ直せば通る見込みがある。
403は「名乗ってもらっても、ここには入れられない」で、パスワードを何度入れ直しても結果は変わらない。
この記事は、MDN と HTTP の仕様書(RFC 9110)を読んで整理したものだ。
このサイトで実際に403が返ってくる場所も、2026年10月27日に curl で確かめて載せた。
「僕は〜と思う」と書いたところだけが、僕の意見になる。
401は「名乗ってください」
MDN の説明では、401 Unauthorized は「有効な認証資格情報が不足している」ことを示すステータスだ。
名前は Unauthorized(許可されていない)だが、中身は「まだ誰だか分からない」に近い。
401には決まった相棒がいる。WWW-Authenticate というレスポンスヘッダーで、「この方法で名乗ってください」という案内が入っている。
RFC 9110 では、401を返すサーバーはこのヘッダーを必ず付けることになっている。
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="members"ブラウザはこれを受け取ると、たいていIDとパスワードを入れる窓を出す。
MDN の「HTTP 認証」のページにも、クライアントは通常ユーザーにパスワードの入力を求め、Authorization ヘッダーを付けて送り直す、と書いてある。
Basic認証のかかったページで小さな入力窓が出てくるのは、この流れだ。
403は「名乗っても入れない」
403 Forbidden は、サーバーがリクエストを理解したうえで、処理を断ったことを示す。
MDN には、401との違いは「認証または再認証を行っても違いがないこと」だと書いてある。
RFC 9110 はもう少し細かい。
リクエストに資格情報が付いていたなら、サーバーはそれでは足りないと判断した、という意味になる。
クライアントは同じ資格情報のまま自動で送り直すべきではない、とも書いてある。
そして、資格情報とは関係のない理由で断られることもある、と添えてある。
この最後の一文が大事だと僕は思う。
403は「ログインの問題」とは限らない。
そもそも誰にも見せない設定になっている場所でも、403は返ってくる。
このサイトで403が返る場所を確かめた
2026年10月27日に、このサイトのいくつかのURLへ curl でリクエストを送って、ステータスだけを見た。
curl -s -o /dev/null -w "%{http_code}" -I https://autocamp.website/.htaccess
403
curl -s -o /dev/null -w "%{http_code}" -I https://autocamp.website/uploads/
403.htaccess はサーバーの設定ファイルで、外から読まれては困るものだ。/uploads/ は記事の画像を置いているフォルダで、フォルダそのものを開くと中身の一覧が出てしまう作りもある。
どちらもパスワードの入力窓は出ず、いきなり403が返ってきた。
ここで401が返らないのは、名乗る方法がそもそも用意されていないからだ、と僕は理解している。
誰が来ても見せない場所なので、「名乗ってください」と案内する意味が無い。
だから WWW-Authenticate も付かない。
見分け方は「入力窓が出るか」と「ヘッダー」
自分のサイトや仕事で見たエラーがどちらなのか迷ったら、次の順で見ると早い。
- ブラウザがIDとパスワードの入力窓を出した → 401。正しいIDとパスワードを入れれば通るはず
- 入力窓が出ずに「Forbidden」の画面になった → 403。パスワードの問題ではない可能性が高い
- はっきりさせたいときは、開発者ツールのネットワークタブでステータスと
WWW-Authenticateの有無を見る
403だったときに疑うのは、ファイルやフォルダの権限、サーバーの設定(アクセスを拒否する書き方)、IPアドレスでの制限、ログインはできているが役割として権限が無い、といったところだ。
MDN の例にも、管理者の役割が無いユーザーがユーザーの削除を頼んで403になる、というものが載っている。
パスワードを何度も入れ直す前に、どの理由で断られているのかを探したほうが早い。
404が返ってくることもある
RFC 9110 には、見せたくない場所の存在そのものを隠したいサーバーは、403の代わりに404を返してもよい、と書いてある。
MDN の「HTTP 認証」のページにも、権限の無いユーザーからページの存在を隠すために404を返せる、とある。
つまり、404は「本当に無い」とは限らない。
「あるけれど、あるとは言わない」という404もありうる。
攻撃する側から見ると、403は「何かがここにある」という手がかりになるので、あえて404にする考え方もあるのだと思う。
以前、自分のサイトに露出していると困るファイルが無いかを機械で確かめたときは、117件がすべて404だった。
404そのものの意味は404という数字の意味に書いている。
Basic認証はHTTPSとセットで使う
401とセットでよく出てくるBasic認証には、ひとつ注意がある。
MDN には、Basic方式は資格情報をエンコードするだけで暗号化はしないので、HTTPS(TLS)の接続でなければ安全ではない、と書いてある。
アドレス欄が http:// のままのページにBasic認証をかけても、IDとパスワードは読める形で流れている、ということだ。
テスト用のサイトに軽く鍵をかけるときほど、ここは見落としやすいと僕は思う。
まとめ
- 401は「名乗ってください」。WWW-Authenticate ヘッダーが付き、正しいIDとパスワードで通る見込みがある
- 403は「名乗っても入れない」。権限や設定の問題で、パスワードを入れ直しても変わらない
- 見せたくない場所の存在を隠すために、403の代わりに404を返すサーバーもある
- Basic認証は暗号化しないので、HTTPSとセットで使う
出典
- 401 Unauthorized - HTTP | MDN(有効な認証資格情報の不足・WWW-Authenticate ヘッダー)
- 403 Forbidden - HTTP | MDN(再認証しても違いがない・404で存在を隠す)
- HTTP 認証 - HTTP | MDN(チャレンジとレスポンスの流れ・Basic 方式は暗号化しない)
- RFC 9110 HTTP Semantics(15.5.2 401 Unauthorized・15.5.4 403 Forbidden)
ほかにも書いています
受託・note・スタンプこういう仕組みを作る相談を受けています
毎日の更新・データ集め・集計の自動化/3万円〜収益がいくらだったか、どの施策が外れたか
note / 個人の視点で掘り下げていますスタンプラリーに挑戦する
行った場所は、現地チェックインで記録に残せます※受託の相談とnoteは、運営者が個人で受けている・書いているものです。
