クライアントは識別されていますが、この操作は許可されていません。
使いどころ
ログイン済みだが権限がない。
よくある原因と対処法
Web サーバーでは、403 はたいていファイルシステムか設定がアクセスを拒否していることを意味します。nginx がこれを返すのは、ワーカーユーザーがファイルを読めないか親フォルダーを通り抜けられない場合(パス上のすべてのディレクトリに x が必要です)、フォルダーにインデックスファイルがなく autoindex がオフの場合、または deny ルールに該当した場合です。どれに当たるかは、エラーログに「permission denied」や「directory index is forbidden」と記録されます。
他の原因としては、WAF や Cloudflare によるリクエストのブロック(エラーページに Ray ID があるか確認)、curl のユーザーエージェントを拒否するボット対策ルール、Django の CSRF チェック、期限切れの S3 署名付き URL、呼び出し元に s3:ListBucket がない場合に存在しないオブジェクトに対して S3 が 404 ではなく 403 を返すケースなどがあります。API では、403 は認証情報は有効だが権限がないことを意味します。ロール、OAuth スコープ、リソースの所有者を確認してください。
クライアントエラー (4xx)
4xx はクライアントエラーです。リクエスト自体が誤っている、認証されていない、または存在しないものを指しています。同じリクエストを再試行しても解決しません。
レスポンスでの表示
HTTP/1.1 403 Forbidden返し方
| Node.js / Express | res.status(403).end() |
|---|---|
| Python / Flask | return '', 403 |
| nginx | return 403; |
確認方法
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/