HTTP 1.1 で 404応答などをした際、PHP の file_get_contents() の返りが遅い問題

詳しい調査はしていないが、HTTP 1.1 でサーバ側から自前でレスポンスを返した場合(200応答以外の404などのレスポンスのときに起きた)に、クライアント側の file_get_contents() の返りが遅いという問題が起こるようだ。
原因は HTTP 1.1 では KeepAliveがデフォルトで有効になるが、file_get_contents の側ではTCPコネクションのクローズまで待ってしまうことにあるようだ。

これは本来、リクエストしている file_get_contents の側で何とかするのが正しい対応かと思うが、どうも方法がよくわからない・・・

というわけでとりあえず、サーバー側で header('Connection: close'); として明示的にセッションのクローズを宣言することで回避できた。


後で調べたところ、サーバ側からレスポンスする HTTP のバージョンを 0.9 or 1.0 に下げることでも対応ができるらしい。
まあ、バージョンが下がればKeepAliveがデフォルトで無効になるということですね。


・・・ってことは、file_get_contents で使う HTTP コンテキストオプション の protocol_version を 1.1 にして投げればクライアント側で回避できるのかな?
そのうち気が向いたらテストしてみるか・・・


なお、PHPのバージョンは 5.3.10 とちと古いのでより新しいバージョンでは解消されてる可能性も・・・