「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も「このメソッドのレスポンスはキャッシュできない」とされています。
ああ、すっきりした。