[445] [DFN[[CODE(HTTP)[[[406]]]]]] ([DFN[[[Not Acceptable]]]])
は、[[内容折衝]]のために指定された条件を満たす[[応答]]を返せないことを表します。

* 代替

[446] 一般的には[[内容折衝]]の条件を満たすものがなくても、
いずれか近いものか、既定のものを [CODE(HTTP)[[[200]]]] などで返した方が便利と思われます。
この[[状態符号]]は通常使用するべきではありません。

[EG[
[447] 例えば[[日本語]]しかないサイトに [CODE(HTTP)@en[[[Accept-Language:]] [[en]]]]
でアクセスした時、 [CODE(HTTP)[[[406]]]] を返すより、[[日本語]]のページを返すべきです。
[[日本語]]しかないというエラーメッセージはほとんど意味がありません。
]EG]

* 仕様書

[REFS[
- [441] '''[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.5.6>'''
- [416] [CITE@en[RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content]] ([TIME[2014-06-07 01:55:45 +09:00]] 版) <https://tools.ietf.org/html/rfc7231#section-5.3.2>
- [411] [CITE@en[RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content]] ([TIME[2014-06-07 01:55:45 +09:00]] 版) <https://tools.ietf.org/html/rfc7231#section-5.3.3>
- [35] [CITE@en[RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content]] ([TIME[2014-06-07 01:55:45 +09:00]] 版) <https://tools.ietf.org/html/rfc7231#section-5.3.5>
- [1] [CITE@en[RFC 2324 - Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0)]] ([TIME[2014-10-06 15:21:16 +09:00]] 版) <http://tools.ietf.org/html/rfc2324#section-2.3.1>
- [5] [CITE@en[RFC 3229 - Delta encoding in HTTP]] ([TIME[2014-10-26 21:15:25 +09:00]] 版) <http://tools.ietf.org/html/rfc3229#section-10.5.3>
]REFS]

* 意味

[442] [CODE(HTTP)[[[406]]]] は、[[対象資源]]において [[proactive negotiation]]
の[[ヘッダー]]によると[[利用者エージェント]]が受け付けられる[[表現]]を持っておらず、
[[鯖]]は既定の[[表現]]を返すつもりがないことを表します [SRC[>>441]]。

* 構文

[443] [[鯖]]は、利用可能な[[表現]]の性質と対応する識別子の一覧を含んだ [[payload]]
を[[生成]]して、[[利用者]]や[[利用者エージェント]]が最適なものを選べるようにする[['''べきです''']]
[SRC[>>441]]。

[3] [CODE(HTTP)@en[[[Accept-Additions:]]]] [[ヘッダー]]に関するエラーの時は、
[[珈琲]]への添加物として利用可能なもののリストを含める[['''べきです''']] [SRC[>>1]]。

;; [4] その具体的な構文は規定されていません。

* 文脈

[7] 
[[HTTP]]
や
[[HTCPCP]]
で使われます。

[436] [[起源鯖]]は、 [CODE(HTTP)@en[[[Accept:]]]] [[ヘッダー]]に利用できる[[表現]]の 
[[MIME型]]がない場合は、 [CODE(HTTP)[[[406]]]] を送信することもできますし、
[[内容折衝]]の対象でない場合のように無視して処理しても構いません [SRC[>>416]]。

[421] [[起源鯖]]は、 [CODE(HTTP)@en[[[Accept-Charset:]]]] に利用可能な[[表現]]の
[[charset]] がなければ、 [CODE(HTTP)@en[[[406]]]] を返すこともできますし、
無視して[[内容折衝]]の対象でないものとして処理することもできます [SRC[>>411]]。

[42] [[起源鯖]]は、利用可能な[[表現]]のいずれの[[言語]]も指定された[[言語範囲]]に[[一致]]しない場合には、
[CODE(HTTP)@en[[[Accept-Language:]]]] [[ヘッダー]]を無視して[[内容折衝]]の対象でないものとして扱うこともできますし、
[CODE(HTTP)[[[406]]]] [[応答]]を送ることもできます [SRC[>>35]]。
ただし [CODE(HTTP)[[[406]]]] [[応答]]を送ってしまうと、
([[翻訳]]ソフトウェアを使うなど) [[利用者]]が何らかの形で使うことができるかもしれない内容にアクセスできなくなってしまいますから、
[RUBYB[推奨]@en[encourage]]しません [SRC[>>35]]。

;; [437] [CODE(HTTP)@en[[[Accept-Encoding:]]]] については [CODE(HTTP)[[[406]]]]
を返すことは[[起源鯖]]の動作の候補として明記されていません。

[2] [[珈琲ポット]]への[[要求]]で指定された [CODE(HTTP)@en[[[Accept-Additions:]]]]
[[ヘッダー]]の要請に応えられない場合には、 [CODE(HTTP)[[[406]]]]
[[応答]]を返すことができます [SRC[>>1]]。

[6] [[鯖]]は、 [CODE(HTTP)@en[[[A-IM:]]]] で[[実現値操作]]が指定され、
それを使って返せない時は、 [CODE(HTTP)[[[406]]]] [[応答]]を返す[['''べきです''']] [SRC[>>5]]。

* 処理

[444] [[利用者エージェント]]は、 >>443 のリストから最適なものを自動的に選んで構いません。
[SRC[>>441]]

* 歴史

[FIG(quote)[
[FIGCAPTION[
[440] RFC 2068 & 2616 (HTTP/1.1) 10.4.7 406 Not Acceptable
]FIGCAPTION]

> The resource identified by the request is only capable of generating
response entities which have content characteristics not acceptable
according to the accept headers sent in the request.

要求で識別される資源は、要求で送られた受入れ頭群に従うと受入れ可能でない内容特徴を持った応答実体を生成する能力しかありません。

> Unless it was a HEAD request, the response SHOULD include an entity
containing a list of available entity characteristics and location(s)
from which the user or user agent can choose the one most
appropriate.  The entity format is specified by the media type given
in the Content-Type header field. Depending upon the format and the
capabilities of the user agent, selection of the most appropriate
choice [DEL[may]] [INS[MAY]] be performed automatically. However, this specification
does not define any standard for such automatic selection.

[CODE(HTTP)[[[HEAD]]]] 要求である場合を除き、応答は、
利用可能な実体特徴と位置の一覧を含めて、
利用者又は利用者エージェントが最も適当なものを選ぶことができるようにする'''べきです'''。
実体の書式は [CODE(HTTP)[[[Content-Type]]]] 頭欄に示された[[媒体型]]により規定されます。
その書式と利用者エージェントの能力によっては、
最も適切な選択肢の選択は自動的に行っても'''構いません'''。
しかし、この仕様書はその自動的選択の規格は定義しません。

> Note: HTTP/1.1 servers are allowed to return responses which are
not acceptable according to the accept headers sent in the request.
In some cases, this may even be preferable to sending a 406
response. User agents are encouraged to inspect the headers of an
incoming response to determine if it is acceptable. If the response
could be unacceptable, a user agent SHOULD temporarily stop receipt
of more data and query the user for a decision on further actions.

注意 : HTTP/1.1 サーバーは、要求で送られた受入れ頭群に従うと受け入れ可能でない応答を返すことが認められています。
場合によっては、 [CODE(HTTP)[406]] 応答を送るよりこの方が好ましいかもしれません。
利用者エージェントは、やってくる応答が受入れ可能であるか、その頭を調べることをお勧めします。
応答が受入れ不能であったなら、利用者エージェントはそれ以上のデータの受入れを一時的に停止し、
利用者に以後の動作の決定を求める'''べきです'''。
]FIG]

[FIG(quote)[
[FIGCAPTION[
[439] RFC 2324 (HTCPCP/1.0) 2.3.1 406 Not Acceptable
]FIGCAPTION]

>This return code is normally interpreted as "The resource identified
by the request is only capable of generating response entities which
have content characteristics not acceptable according to the accept
headers sent in the request. In HTCPCP, this response code MAY be
returned if the operator of the coffee pot cannot comply with the
Accept-Addition request. Unless the request was a HEAD request, the
response SHOULD include an entity containing a list of available
coffee additions.
> In practice, most automated coffee pots cannot currently provide
additions.

この返し符号は、通常
「その要求により識別される資源は、
その要求中で送られた受入れ (accept)
に従って受入れ可能でない内容性質を持つ応答実体を生成する能力しかない。」と解釈されます。
[[HTCPCP]] では、珈琲ポットの操作者が
[CODE(HTTP)[[[Accept-Addition]]]] 
要求を満たすことが出来ない時にこの応答符号を返しても'''構いません'''。
要求が [CODE(HTTP)[[[HEAD]]]] 
要求である場合を除いて、応答は受入れ可能な珈琲添加物の一覧を含んだ実体を含める'''べきです'''。

実際には、ほとんどの自動化珈琲ポットは現在の所添加物を提供できません。
]FIG]
[REFS[
- [438] [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.2.7>
]REFS]

* 実装

[448] [[Apache]] は[[内容折衝]]で[[クライアント]]が指定した条件を満たせない時、
[CODE(HTTP)[[[406]]]] を返します。

* 関連

[449] [CODE(HTTP)[[[415]]]] と似ているように見えますが、 [CODE(HTTP)[[[415]]]]
は[[要求メッセージ]]で使われている[[MIME型]]に[[鯖]]が対応していないことを示すのに対し、
[CODE(HTTP)[[[406]]]] は[[応答メッセージ]]で使われるべき[[MIME型]]に[[鯖]]が対応していないことを示します。

* メモ