PHPでrequest bodyの中身が受け取れない

外部サーバとの連携で、送られてくるリクエストの中身をPHPで取得しようとするとなぜか空だった。

テストは通っているのに何故…?としばらくハマり、headerの

Transfer-Encoding: chunked

の存在に気づく。

結論としては、apacheのバグ。

bz.apache.org

Transfer-Encoding: chunkedのとき(Content-lengthの指定がないとき)にContent-lengthが0→ボディが空として扱われてしまう。

apacheを最新版に更新したら直りました。

v2.4.47以降で解消されている模様。

 

参考:

stackoverflow.com