Apacheはデフォルトの設定だとトレイリングスラッシュ(末尾のスラッシュ)があると、トレイリングスラッシュが無いURLにリダイレクトします。

下記がhttps://example,com/hoge/create/というURL(トレイリングスラッシュ有)に対してPOSTしたときのApacheのログです。301が表示されており/hoge/createのURL(トレイリングスラッシュ無)にリダイレクトされているのが解ります。

1
2
192.168.1.10 - - [02/Nov/2017:09:08:41 +0900] "POST /hoge/create/ HTTP/1.1" 301 260 "https://example.com/hoge" "Mozilla....
192.168.1.10 - - [02/Nov/2017:09:08:42 +0900] "GET /hoge/create HTTP/1.1" 405 158293 "https://example.com/hoge" "Mozilla....

これがnginxの場合だと下記のような感じで200で成功します。

1
192.168.1.10 - - [02/Nov/2017:09:14:22 +0000] "POST /hoge/create/ HTTP/1.0" 200 109 "https://example.com/hoge" "Mozilla....

ということを知らずに、本番と開発環境で挙動が違ってハマりました。(本番と開発環境で使ってるWebサーバが違うところは、まあツッコまないでください。)

RFC的には


URIに関するRFC3986の3.3Pathを見る限り、特に指定が無いような気がするので、RFCでは特に決まってないという感じでしょうか。他のところを読んでないのでたぶんとしか言えませんが。