[2] [DFN[[CODE(HTTP)[2[VAR[xx]]]]]] は、成功を表す[[状態符号]]です。

[FIG(short list)[
- [CODE(HTTP)[[[200]]]]
- [CODE(HTTP)[[[201]]]]
- [CODE(HTTP)[[[202]]]]
- [CODE(HTTP)[[[203]]]]
- [CODE(HTTP)[[[204]]]]
- [CODE(HTTP)[[[206]]]]
- [CODE(HTTP)[[[207]]]]
- [CODE(HTTP)[[[226]]]]
]FIG]

* 仕様書

[REFS[
- [1] [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-6.3>
- [5] [CITE@en-US[Fetch Standard]] ([TIME[2015-09-07 19:46:18 +09:00]] 版) <https://fetch.spec.whatwg.org/#ok-status>
]REFS]

* 意味

[6] [[Fetch Standard]] は [CODE[[[200]]]] [[以上]] [CODE[[[299]]]] [[以下]]の[[状態]]を
[DFN[[RUBYB[OK状態]@en[ok status]]]]と定義しています [SRC[>>5]]。

* 成功との判断

[7] [[応答]]が成功かどうかの判断は、状況によって色々な条件が考えられます。

[8] [[Web API]] の呼び出しなどの極めて単純な [[HTTPクライアント]]による
[[HTTP要求]]を送信して[[応答]]を受信するケースでは、
例えば[[HTTPキャッシュ]]等を使わないので [CODE(HTTP)[206]] や [CODE(HTTP)[304]]
を成功と判断する必要がなかったり (むしろ想定外なのでエラーと判断するべきだったり) します。
あるいは [CODE[207]] は成功と失敗が混在している可能性があり、
[[状態符号]]のみからどちらか判定するのは難しいですが、
[[サーバー]]がこれを返すことはほとんどないので、通常の用途なら想定外なのでエラーと判断するべきと思われます。

[9] そのような極めて単純なケースで成功と判断するべきなのは、次の[[状態符号]]と考えられます。
[FIG(short list)[
- [CODE(HTTP)[200]]
- [CODE(HTTP)[201]]
- [CODE(HTTP)[202]]
- [CODE(HTTP)[203]]
- [CODE(HTTP)[204]]
]FIG]

[16] 
どのように判定されるかわからないケースでは、保守的に常に [CODE[200]]
を返す方がいいかもしれません。

[REFS[

- [11] [CITE[Webhooks]], [TIME[2024-07-08T03:19:05.000Z]] <https://developer.vonage.com/en/getting-started/concepts/webhooks#receiving-webhooks>
- [13] [CITE[Vonage Olympus API (v1.0) Reference | Vonage API Documentation]], [TIME[2024-07-08T03:19:39.000Z]] <https://developer.vonage.com/en/api/messages-olympus#websockets>

]REFS]

[12] >>11 [CODE[200]] から [CODE[205]] の範囲を返せといっていて、 [CODE[2xx]]
でなければエラーと判断するといっている。 ([CODE[206]] [[以上]]だとどうなるのか?)

[14] >>13 [CODE[200]] か [CODE[204]] を返せといっていて、それ以外だとエラーと判断するといっている。

[15] >>12 と >>14 で [CODE[201]], [CODE[202]], [CODE[203]], [CODE[205]]
の扱いが異なっているが、どういうことか。

[17] こんなこと書いてる [[Vonage]] 自身の [[API]] は [CODE[202]] を返すんだがw

* 関連

[3] [[警告符号]]の [CODE(HTTP)[[[2xx]]]] とは関係ありません。

* 歴史

[REFS[
- [4] [CITE@en[Define status, ok status, and use them both · whatwg/fetch@159d43c]] ([TIME[2015-09-08 19:57:32 +09:00]] 版) <https://github.com/whatwg/fetch/commit/159d43c7d55e682d7f3fc3cc800d1c004dd183f6>
]REFS]

[FIG(quote)[
[FIGCAPTION[
[10] [CITE@en[Webmention]]
([TIME[2017-01-11 04:06:01 +09:00]])
<https://webmention.net/draft/#h-sender-notifies-receiver>
]FIGCAPTION]

> Any 2xx response code must be considered a success.

]FIG]
