[524] [DFN[[CODE(HTTP)@en[[[400]]]]]] ([DFN[[[Bad Request]]]])
は、[[クライアント]]側の[[エラー]]を表す[[状態符号]]です。この[[状態符号]]は、
[CODE(HTTP)[[[4xx]]]] に他により適切な[[状態符号]]が存在しない時に使われます。

* 仕様書

[REFS[
- [522] '''[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.1>'''
- [505] [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-3.1.1>
- [4] [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-3.2.4>
- [503] [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#page-26>
- [507] [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-3.3.3>
- [510] [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#page-35>
- [85] [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#page-45>
- [507] [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-4.3.4>
- [1] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-8.2>
- [9] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-9.11>
- [7] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-20.2>
- [11] [CITE@en[RFC 5789 - PATCH Method for HTTP]] ([TIME[2014-09-22 15:11:26 +09:00]] 版) <http://tools.ietf.org/html/rfc5789#section-2.2>
- [13] [CITE@en[RFC 7089 - HTTP Framework for Time-Based Access to Resource States -- Memento]] ([TIME[2014-10-05 16:32:34 +09:00]] 版) <http://tools.ietf.org/html/rfc7089#section-4.5.3>
]REFS]

* 意味

[523] [DFN[[CODE(HTTP)[[[400]]]]]] [[状態符号]]は、
何らかの[[クライアント]]の[[エラー]] (例えば[[要求]]の構文の不正など)
がみられるために[[要求]]を[[鯖]]が処理できないこと、処理しないことを示します
[SRC[>>522]]。

* 文脈

[506] [[受信者]]は、[[要求行]]が[[非妥当]]である時に、 [CODE(HTTP)[[[301]]]]
を返すのでなければ [CODE(HTTP)[[[400]]]] を返す[['''べきです''']] [SRC[>>505]]。

[5] [[鯖]]は、[[要求]]の[[ヘッダー名]]と [CODE(HTTP)[[[:]]]]
の間に[[空白]]があれば、 [CODE(HTTP)[[[400]]]] を返さなければ[['''なりません''']] [SRC[>>4]]。

[504] [[鯖]]は、 [CODE(MIME)@en[[[message/http]]]] 以外の[[要求メッセージ]]で[[行折り畳み]]を見つけた時は、これを [[SP]]
に置き換えるか、または [CODE(HTTP)[[[400]]]] を返さなければ[['''なりません''']]。
その場合[[メッセージ本体]]は[[行折り畳み]]が含まれていることを示す[[表現]]が好ましいとされています。
[SRC[>>503]]

[508] [[要求メッセージ]]に[[メッセージ本体]]が存在する場合で、
[CODE(HTTP)@en[[[Transfer-Encoding:]]]] [[ヘッダー]]の最後の[[転送符号化]]が
[CODE(HTTP)@en[[[chunked]]]] 以外の時は、
[CODE(HTTP)[[[400]]]] [[応答]]を返して[[接続]]を閉じなければ[['''なりません''']] [SRC[>>507]]。

[509] [[要求メッセージ]]の [CODE(HTTP)[[[Content-Length:]]]]
が無視されない場合で、複数あったり[[非妥当]]だったりする場合は、
[CODE(HTTP)[[[400]]]] [[応答]]を返して[[接続]]を閉じなければ[['''なりません''']] [SRC[>>507]]。

[511] [[鯖]]は、[[要求メッセージ]]を受け取ることを期待していて、
文法に沿わない[[オクテット列]]を受け取った時、他の条件に合致しなければ、
[CODE(HTTP)[[[400]]]] [[応答]]を送る[['''べきです''']] [SRC[>>510]]。

[101] [[鯖]]は、 [[HTTP/1.1]] [[要求メッセージ]]に
[CODE(HTTP)@en[[[Host:]]]] [[ヘッダー]]が含まれていないか、
複数含まれているか、
[[欄値]]が[[非妥当]]であるなら、 [CODE(HTTP)[[[400]]]]
[[応答]]を返さなければ[['''なりません''']]。 [SRC[>>85]]

[15] [[鯖]]は、 [[SNI]] と [[HTTP]] とで[[ホスト]]が異なっていれば、
[CODE(HTTP)[[[400]]]] を返すことがあります。

[521] [[起源鯖]]は、[[対象資源]]に [CODE(HTTP)@en[[[PUT]]]] を認めている場合で、
[[要求]]に [CODE(HTTP)@en[[[Content-Range:]]]] [[ヘッダー]]が含まれる場合、
[[payload]] が一部分しか含まれないのに誤って [CODE(HTTP)@en[[[PUT]]]]
を使っている可能性があるため、 [CODE(HTTP)[[[400]]]] [[応答]]を送信しなければ[['''なりません''']]
[SRC[>>507]]。

[2] [[鯖]]は、 [[WebDAV]] に従う[[資源]]への[[要求]]の [[payload body]]
が[[整形式]] [[XML 1.0]] [[文書]]でなかったり、おかしな内容を含んでいたりするとき、
[CODE(HTTP)[[[400]]]] [[応答]]を返します [SRC[>>1]]。

;; [6] [[整形式]]であっても内容が正しくない時は、 [CODE(HTTP)[[[422]]]]
を返すことができます。

[8] [[DoS攻撃]]と思しき時には[[接続]]を切断しても構いませんが、
[CODE(HTTP)[[[400]]]] [[応答]]を返して理由を説明しても構いません [SRC[>>7]]。

[10] [CODE(HTTP)@en[[[UNLOCK]]]] [[要求]]に [CODE(HTTP)@en[[[Lock-Token:]]]]
[[ヘッダー]]が指定されなかった場合、 [CODE(HTTP)[[[400]]]] [[応答]]を返すことができます
[SRC[>>9]]。

[12] [[鯖]]は、[[パッチ文書]]の構文が正しくない時、  [CODE(HTTP)[[[400]]]]
[[応答]]を返すべきです [SRC[>>11]]。

[14] [CODE(HTTP)@en[[[Accept-Datetime:]]]] [[ヘッダー]]の構文が正しくない時は、
[CODE(HTTP)[[[400]]]] [[応答]]を返さなければ[['''なりません''']] [SRC[>>13]]。

[16] [[OAuth 1.0]] の[[認証された要求]]が不適切なときに、 [CODE(HTTP)[[[400]]]]
[[応答]]を返すべき場合があります。

;; [[認証された要求]]参照。

* キャッシュ

[18] 
[CODE[400]]
は[[キャッシュ可能]]では''ありません''。
[SEE[ [[キャッシュ可能]] ]]

* 歴史

[FIG(quote)[
[FIGCAPTION[
[3] RFC 1945 (HTTP/1.0); RFC 2068 & 2616 (HTTP/1.1) 10.4.1 400 Bad Request
]FIGCAPTION]

> The request could not be understood by the server due to malformed syntax. The client [DEL[[INS[{1945}]] should not]] [INS[[INS[{2068,2616}]] SHOULD NOT]]
repeat the request without modifications.

サーバーは、不正な構文であるために要求を理解できませんでした。
クライアントはこの要求を修正なしに繰り返す'''べきではありません'''。
]FIG]

[512] [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.1>

[525] [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>

[526] [CITE@en[RFC 4037 - Open Pluggable Edge Services (OPES) Callout Protocol (OCP) Core]]
( ([TIME[2014-10-26 15:20:25 +09:00]] 版))
<https://tools.ietf.org/html/rfc4037#section-10.10>

[FIG(quote)[
[FIGCAPTION[
[17] [CITE@en[RFC 7482 - Registration Data Access Protocol (RDAP) Query Format]]
([TIME[2015-03-26 08:10:36 +09:00]] 版)
<https://tools.ietf.org/html/rfc7482#section-6.1>
]FIGCAPTION]

> If a string is not valid UTF-8,
>    the server can immediately stop processing the query and return an
>    HTTP 400 (Bad Request) response.

]FIG]
