[501] [DFN[[CODE(HTTP)[[[500]]]]]] ([DFN[[[Internal Server Error]]]])
は、[[鯖]]側の何らかのエラーにより[[要求]]の処理に失敗したことを示す[[状態符号]]です。

* 仕様書

[REFS[
- [2] '''[CITE@en[RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content]] ([TIME[2014-08-07 05:54:02 +09:00]] 版) <https://tools.ietf.org/html/rfc7231#section-6.6.1>'''
- [5] [CITE@en[RFC 2774 - An HTTP Extension Framework]] ([TIME[2014-09-08 03:36:50 +09:00]] 版) <http://tools.ietf.org/html/rfc2774#section-6>
]REFS]

* 意味

[4] [CODE(HTTP)[[[500]]]] は、[[鯖]]が予期せぬ状況に遭遇し[[要求]]を満足できなかったことを示します
[SRC[>>2]]。

[502] [[Webアプリケーション]]などで [[HTTP鯖]]の内部や 
[[HTTP鯖]]より奥にある[[アプリケーションサーバー]]などで処理中にエラー
([[プログラミング言語]]の[[実行時エラー]]や[[捕捉]]されていない[[例外]]など) 
が発生した場合には、 [CODE(HTTP)[[[500]]]] [[応答]]が返されるのが普通です。

[EG[
[503] 例えば [[Apache]] で [[CGIスクリプト]]が結果を返さずにエラー終了したり、
[[suEXEC]] のエラーがあったりすると、 [CODE(HTTP)[[[500]]]] が返されます。
]EG]

* 文脈

[6] [[クライアント]]が理解できない、または使いたくない必須の[[拡張宣言]]が[[応答]]に含まれていた場合には、
[CODE(HTTP)[[[500]]]] [[応答]]が返されたかのように扱う[['''べきです''']] [SRC[>>5]]。

* 歴史

[FIG(quote)[
[FIGCAPTION[
[3] RFC 1945 (HTTP/1.0); RFC 2068・RFC 2616 (HTTP/1.1) 10.5.1 500 Internal Server Error
]FIGCAPTION]

> The server encountered an unexpected condition which prevented it
from fulfilling the request.

サーバーは予期せぬ状況に遭遇し、
要求を満たすことができませんのです。
]FIG]

[REFS[
- [1] [CITE@en[RFC 7252 - The Constrained Application Protocol (CoAP)]]
( ([TIME[2014-06-27 00:59:37 +09:00]] 版))
<http://tools.ietf.org/html/rfc7252#section-5.9.3.1>
]REFS]

[504] [CITE@en[RFC 3507 - Internet Content Adaptation Protocol (ICAP)]]
( ([TIME[2014-06-08 07:17:07 +09:00]] 版))
<http://tools.ietf.org/html/rfc3507#section-4.3.3>

[FIG(quote)[
[FIGCAPTION[
[7] [CITE[RESTful HTTP API - Fedora 4.0 Documentation - DuraSpace Wiki]]
([TIME[2017-03-02 23:35:39 +09:00]])
<https://wiki.duraspace.org/display/FEDORA40/RESTful+HTTP+API>
]FIGCAPTION]

> 500 Error restoring backup

]FIG]


[FIG(quote)[
[FIGCAPTION[
[8] [CITE[セキュリティ監査で文句を言われないHTTPステータスコードの使い分け - Qiita]]
( ([TIME[2017-07-27 02:48:55 +09:00]]))
<http://qiita.com/kawasima/items/e48180041ace99842779>
]FIGCAPTION]

> 入力改ざんで発生するバリデーションエラーをそのまま500のHTTPステータスで返すと、攻撃者が「なんか攻撃成功しちゃいそう」って思っちゃうとかなんとかで、監査的なところから「500はやめろ」って言われることがあります。

]FIG]

[9] 誰かに怒られるからやめる、という態度は技術者として恥ずかしくないんだろうか。。。
何故相応しくないかを理解しようとしない人は、何を指定するのが正しいのか永遠に理解できないのではあるまいか。


[10] [CITE@en[errors: change timeout errors from 408 to 500 HTTP status code]]
([[andreastt]]著, [TIME[2018-08-21 18:40:30 +09:00]])
<https://github.com/w3c/webdriver/commit/c377c21186f672105a05383d5152e0a3b2a00374>