[507] 505
(HTTP Version Not Supported)
は、指定されたプロトコルの版に対応しないことを示す状態符号です。
[508] プロトコルの版には整数部 (メジャーバージョン) と小数部
(マイナーバージョン) があります。 HTTP ではメッセージの処理の可否はメジャーバージョンで判断することになっています。
メジャーバージョンが鯖の実装している版でなければ 505
を返し、実装している版であれば、 505
は返さずにその版で実装している最大のマイナーバージョンで応答します。
[5] 505
は、要求メッセージで使われている HTTP
のプロトコルの版の大版に鯖が対応していないか、
対応を拒むことを示します >>3。
[418] 鯖は、要求のメジャーバージョンで応答を送れない、送りたくない時は、
505
応答を送って構いません。 >>58
[1] この状態符号は、 RFC1945 では規定されていませんでしたから、 HTTP/1.0 の実装や古い HTTP/1.1 の実装は知らないかもしれません。
[511] 鯖は現在使用されている HTTP/0.9、HTTP/1.0、HTTP/1.1 は少なくても実装する必要はありますから、この状態符号を使う可能性があるのはメジャーバージョンとして 2以上の数値が指定された場合です。
[6]
ところで、 HTTP/2 や HTTP/3 は HTTP/1.1 とはまったく異なる構造のプロトコルになりました。
そのため HTTP/1.1 のような要求行のプロトコルの版で互いに区別するという仕組みを採用していません。
従って 505
がその指定の失敗で使われることもありません。
[7] その HTTP/1.1 に於いてすら、実装は使っていない (>>509) ということですから、 この状態符号ははじめからその存在意義がないまま事実上役目を終えたといえます。
[8] この状態符号を受け取った HTTPクライアントがどうするべきかは定められていません。
[9] 新しい HTTP の版が出現したときに、新しい版で試して駄目だったら古い版で再試行する、 というような手順が想定されていたのかもしれませんが、 実用されることはありませんでした。
[10]
現実的にはHTTPクライアントは他の 5xx
応答と同じように処理するのがいいのでしょう。
[509] Apache も nginx も、存在しないプロトコルの版を指定しても無視して
HTTP/1.1 として扱うようです。 505
は返しません。
The server does not support, or refuses to support, the HTTP protocol version that was used in the request message. The server is indicating that it is unable or unwilling to complete the request using the same major version as the client, as described in section 3.1, other than with this error message. The response SHOULD contain an entity describing why that version is not supported and what other protocols are supported by that server.
サーバーは、要求メッセージで使われた HTTP のプロトコルの版に対応していないか、 又は対応することを拒否します。サーバーは、 この誤りメッセージの他には、 クライアントと同じ大版を使った要求を完了させることができないか、又はその意思がないことを示しています。 応答は、なぜその版に対応していないのか及びそのサーバーで他のどのプロトコルに対応しているのかを説明した実体を含んでいるべきです。
[512] RFC 3507 - Internet Content Adaptation Protocol (ICAP) ( ( 版)) http://tools.ietf.org/html/rfc3507#section-4.3.3