[507] [DFN[[CODE(HTTP)[[[505]]]]]] ([DFN[[[HTTP Version Not Supported]]]])
は、指定された[[プロトコルの版]]に対応しないことを示す[[状態符号]]です。

[508] [[プロトコルの版]]には整数部 (メジャーバージョン) と小数部
(マイナーバージョン) があります。 [[HTTP]] では[[メッセージ]]の処理の可否はメジャーバージョンで判断することになっています。
メジャーバージョンが[[鯖]]の実装している版でなければ [CODE(HTTP)[[[505]]]]
を返し、実装している版であれば、 [CODE(HTTP)[[[505]]]] は返さずにその版で実装している最大のマイナーバージョンで[[応答]]します。

;; [[プロトコルの版]]も参照してください。

* 仕様書

[REFS[
- [3] '''[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.6>'''
- [58] [CITE@en[RFC 7230 - Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing]] ([TIME[2014-06-07 01:59:35 +09:00]] 版) <https://tools.ietf.org/html/rfc7230#section-2.6>
]REFS]

* 意味

[5] [CODE(HTTP)[[[505]]]] は、[[要求メッセージ]]で使われている [[HTTP]]
の[[プロトコルの版]]の[RUBY[大版][メジャーバージョン]@en[major version]]に[[鯖]]が対応していないか、
対応を拒むことを示します [SRC[>>3]]。

[418] [[鯖]]は、[[要求]]のメジャーバージョンで[[応答]]を送れない、送りたくない時は、
[CODE(HTTP)@en[[[505]]]] [[応答]]を送って構いません。 [SRC[>>58]]

* 構文

[506] [[鯖]]は、なぜその版に対応しないかとどの[[プロトコル]]には対応しているかを説明する[[表現]]を[[生成]]する[['''べきです''']]
[SRC[>>3]]。

;; [510] [CODE(HTTP)@en[[[Upgrade:]]]] のような対応している版を明示する機能は定義されていません。

* 文脈

[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]] のような[[要求行]]の[[プロトコルの版]]で互いに区別するという仕組みを採用していません。
従って [CODE[505]]
がその指定の失敗で使われることもありません。

[7] 
その [[HTTP/1.1]] に於いてすら、実装は使っていない (>>509) ということですから、
この[[状態符号]]ははじめからその存在意義がないまま事実上役目を終えたといえます。

* 処理


[8] 
この[[状態符号]]を受け取った [[HTTPクライアント]]がどうするべきかは定められていません。

[9] 
新しい [[HTTP]] の版が出現したときに、新しい版で試して駄目だったら古い版で再試行する、
というような手順が想定されていたのかもしれませんが、
実用されることはありませんでした。


[10] 
現実的には[[HTTPクライアント]]は他の [CODE[5[VAR[xx]]]] [[応答]]と同じように処理するのがいいのでしょう。


* 実装

[509] [[Apache]] も [[nginx]] も、存在しない[[プロトコルの版]]を指定しても無視して
[[HTTP/1.1]] として扱うようです。 [CODE(HTTP)[[[505]]]] は返しません。 [TIME[2014-08-28T12:53:29.000Z]]



* 歴史

[FIG(quote)[
[FIGCAPTION[
[4] RFC 2068・RFC 2616 (HTTP/1.1) 10.5.5 10.5.6 505 HTTP Version Not Supported
]FIGCAPTION]

> 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 のプロトコルの版に対応していないか、
又は対応することを拒否します。サーバーは、
この誤りメッセージの他には、
クライアントと同じ[RUBY[大] [メジャー]]版を使った要求を完了させることができないか、又はその意思がないことを示しています。
応答は、なぜその版に対応していないのか及びそのサーバーで他のどのプロトコルに対応しているのかを説明した実体を含んでいる'''べきです'''。
]FIG]

[REFS[
- [2] [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.6>
]REFS]


* メモ


[512] [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>