HTTP の DELETE ではパラメータをどう渡すのがいいのか

2017/09/22   #http 
このエントリーをはてなブックマークに追加

JavaScript - node.jsのDELETEメソッドのリクエストを送る処理の、リクエストボディの扱いについて質問(68972)|teratail

DELETE に body を付ける事はGET同様、仕様上禁止されていないのですが、 POST, PUTは content-length を付けることが必須なのに対して、 GET, DELETE は任意となっております。

この仕様上、 content-length がリクエストパラメータに付与されていないことになると、多くのサーバでは GET/DELETE の際にどこまでbodyとして読んだら良いのかわからないことがあります。

このため、多くのweb サーバでは GET/DELETE でbodyを付けることに対応していないことが多いです。 そして node.js の場合は、 http-parser で DELETE に body があろうがなかろうが、Content-Lengthがない場合は無視します。

Conclusion

  • DELETE の場合は、パラメータをクエリ文字列で渡すこともbodyにつけて渡すことも仕様上はどちらでも可
  • bodyにつけた場合は、content-length を正しくセットする必要がある
  • 基本、クエリ文字列でいいのではというのが結論