[1] [[状態符号]] [DFN[[CODE(HTTP)[[[200]]]]]] ([DFN[[[OK]]]]) は、
[[要求]]が成功したことを表します。多くの [[HTTP応答]]で用いられている[[状態符号]]です。

* 仕様書

[REFS[
- [513] '''[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.1>'''
- [412] [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.3>
- [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>
- [215] [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.5>
- [2] [CITE@en[RFC 2295 - Transparent Content Negotiation in HTTP]] ([TIME[2014-08-31 19:36:42 +09:00]] 版) <http://tools.ietf.org/html/rfc2295#section-10.1>
- [13] [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.1>
- [11] [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.2>
- [8] [CITE[UPnP Device Architecture 2.0]] ([TIME[2014-09-05 02:24:48 +09:00]] 版) <http://upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v2.0.pdf#page=41>
]REFS]

* 意味

[514] [CODE(HTTP)[[[200]]]] [[状態符号]]は、 [[要求]]が成功したことを示します [SRC[>>513]]。

* 文脈

[419] [[起源鯖]]は、 [CODE(HTTP)@en[[[POST]]]] への[[応答]]を[[キャッシュ]]させて以後の
[CODE(HTTP)@en[[[GET]]]] の処理で再利用できるようにしたい時は、
[CODE(HTTP)[[[200]]]] [[応答]]を送り、その [CODE(HTTP)@en[[[Content-Location:]]]]
[[ヘッダー]]に[[実効要求URL]]と同じ値を設定することができます [SRC[>>412]]。

[511] [[起源鯖]]は、[[対象資源]]が現在[[表現]]を持っており、 [CODE(HTTP)@en[[[PUT]]]]
によりその編集に成功した場合には、 [CODE(HTTP)[[[200]]]] か [CODE(HTTP)[[[204]]]]
を送信しなければ[['''なりません''']] [SRC[>>507]]。

[218] [[起源鯖]]は、処理が成功した場合には、
処理が成功するであろうものの実施されていない場合には [CODE(HTTP)[[[202]]]] を、
実施され追加情報は特に無い場合には [CODE(HTTP)[[[204]]]] を、
実施され[[応答メッセージ]]に状態を説明する[[表現]]を含める場合には [CODE(HTTP)[[[200]]]]
を返す[['''べきです''']] [SRC[>>215]]。

[512] [[鯖]]は、 [CODE(HTTP)@en[[[TRACE]]]] [[要求]]に対して [CODE(HTTP)[[[200]]]]
を返す[['''べきです''']]。詳しくは [CODE(HTTP)@en[[[TRACE]]]] を参照してください。

[3] [CODE(HTTP)[[[200]]]] はしばしば[[状態符号]]を正しく使い分けることに注意を払わない[[プロトコル]]や実装によって、より他の[[状態符号]]が適切な場合であっても使われることがあります。

[EG[
[5] 例えば、 [[Web API]] によってはエラーが生じた場合も含めすべての[[応答]]を
[CODE(HTTP)[[[200]]]] とし、[[payload body]] に正常かエラーかの情報を入れることがあります。
]EG]

[EG[
[4] [[リスト応答]]は、 [CODE(HTTP)[[[300]]]] [[応答]]を正しく扱えない実装が存在するため
[CODE(HTTP)[[[300]]]] のかわりに [CODE(HTTP)[[[200]]]] を使って良いとしています [SRC[>>2]]。
]EG]

[10] [[キャッシュ]]は [CODE(HTTP)[[[206]]]] や [CODE(HTTP)[[[226]]]] 
の[[応答]]から [CODE(HTTP)[[[200]]]] の[[キャッシュ項目]]を作ったり、
[CODE(HTTP)[[[304]]]] や [CODE(HTTP)[[[206]]]] や
[CODE(HTTP)[[[226]]]] を使って更新したりすることも認められています。

;; それぞれの項を参照。

* 構文

[517] [CODE(HTTP)[[[CONNECT]]]] [[メソッド]]に対する[[応答]]は [[payload]]
を持ちません。それ以外は常に [[payload]] を持ちます。 [SRC[>>513]]

;; [518] [[payload body]] を長さ0にすることはできます。

;; [519] [CODE(HTTP)@en[[[CONNECT]]]] [[メソッド]]は [[payload]]
なしで[[ヘッダー]]と[[空行]]の後に直ちに[[トンネル]]に移行します。

[515] [CODE(HTTP)[[[200]]]] [[応答]]の [[payload]] は、
[[要求メソッド]]に依存します [SRC[>>513]]。

[EG[
[516] 例えば [CODE(HTTP)@en[[[GET]]]] では[[対象資源]]の[[表現]]が [[payload]] で、
[CODE(HTTP)[[[DELETE]]]] では動作の状態や得られた結果の[[表現]]が [[payload]] です。
]EG]

* 文脈

[9] [[SSDP]] でも使われることがあります [SRC[>>8]]。

[14] [CODE(HTTP)@en[[[PROPFIND]]]] [[要求]]に対する [CODE(HTTP)[[[207]]]]
[[応答]]内の [CODE(XMLe)@en[[[status]]]] [[要素]]では、
特性の存在や値の取得の成功を表すために使うことができます [SRC[>>13]]。

[12] [CODE(HTTP)@en[[[PROPPATCH]]]] [[要求]]に対する [CODE(HTTP)[[[207]]]]
[[応答]]内の [CODE(XMLe)@en[[[status]]]] [[要素]]では、
変更や削除の成功を表すために使うことができます [SRC[>>11]]。

* 処理モデル

[520] [CODE(HTTP)[[[200]]]] [[応答]]は、基本的に[[キャッシュ可能]]です [SRC[>>513]]。

;; [521] [CODE(HTTP)@en[[[Cache-Control:]]]] など他の条件により[[キャッシュ可能]]でなくなることもあります。

* 歴史

[FIG(quote)[
[FIGCAPTION[
[420] RFC 1945 (HTTP/1.0); RFC 2068・2616 (HTTP/1.1) 10.2.1 200 OK
]FIGCAPTION]

> The request has succeeded. The information returned with the response is dependent on the method used in the request, [DEL[as follows]] [INS[for example]]:
:[CODE(HTTP)[[[GET]]]]:an entity corresponding to the requested resource is sent in the response;
:[CODE(HTTP)[[[HEAD]]]]:the [DEL[response must only contain the header information and no Entity-Body]] [INS[entity-header fields corresponding to the requested resource are sent in the response without any message-body]];
:[CODE(HTTP)[[[POST]]]]:an entity describing or containing the result of the action[DEL[.]][INS[;]]
:[INS[[CODE(HTTP)[[[TRACE]]]]]]:[INS[an entity containing the request message as received by the end server.]]

要求は成功しました。応答と共に返される情報は要求で使われた method
に依存します。例えば、
:[CODE(HTTP)[GET]]:要求された資源に対応する実体が応答で送られます
:[CODE(HTTP)[HEAD]]:要求された資源に対応する実体頭欄が [CODE(ABNF)[[[message-body]]]] 抜きで応答で送られます
:[CODE(HTTP)[POST]]:動作の結果を説明する又はそれを含む実体
:[CODE(HTTP)[TRACE]]:末端サーバーが受信した通りの要求メッセージを含む実体

[INS[
編集者注: 削除部は [[RFC 1945]], 挿入部は [[RFC 2068]]・[[RFC 2616]]。
]INS]
]FIG]

[7] [[S-HTTP]] では[[状態符号]]は常に [CODE(HTTP)[[[200]]]] とされていました [SRC[>>6]]。

;; 実際の[[状態符号]]は[[カプセル化]]された[[HTTPメッセージ]]側で示すこととなっていました。

[REFS[
- [6] [CITE@en[RFC 2660 - The Secure HyperText Transfer Protocol]] ([TIME[2014-11-09 14:12:37 +09:00]] 版) <http://tools.ietf.org/html/rfc2660#section-2.3>
]REFS]

[522] [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>