岩本隆史の日記帳(アーカイブ)

はてなダイアリーのサービス終了をうけて移行したものです。更新はしません。

「200 OK」なら結果を返すべき

RFC 2616を読んで、以下の認識は誤りであることが分かりました。

Webアプリで、なんらかのリソースを削除するための画面があったとして、DELETEのレスポンスが「200 OK」だけだとしたら、ブラウザは真っ白になりますよね。遷移先のURLをLocationヘッダで返すのも変だし、削除結果画面を返すのもおかしい気がする(PUTでも同じか)。

DELETEを考えるとJavaScript必須? - 岩本隆史の日記帳

いつもすみません。

誤りだという理由について、RFCの和訳を引きます。

成功したレスポンスは、もしレスポンスがステータスで表しているエンティティを含んでいるなら 200 (OK)、もし動作がまだ行われていないなら 202 (Accepted)、もし動作は行われたが、レスポンスにエンティティを含んでいないなら 204 (No Content) であるべきである

ハイパーテキスト転送プロトコル -- HTTP/1.1

つまり「200 OK」では削除結果の出力を要請されているわけです。何も返さないときだけ「204 No Content」。

これは、PUTでリソースが更新される場合でも同じです。

既存のリソースが更新された場合は、リクエストが成功し終了した事を示すために 200 (OK) か 204 (No Content) のいずれかのレスポンスコードを送るべきである

ハイパーテキスト転送プロトコル -- HTTP/1.1

ちなみにDELETEもPUTも「このメソッドのレスポンスはキャッシュできない」とされています。

ああ、すっきりした。