Linuxにnginxサーバーがインストールされています。 curlでリクエストを送信すると、Content-Length
ヘッダーが応答にありません。
1.phpファイルは次のとおりです。
<?php
echo "hello";
?>
リクエストの例は次のとおりです。
curl api.mysite.com/taxi/1.php -i
HTTP/1.1 200 OK
Server: nginx/1.2.1
Date: Wed, 17 Sep 2014 06:16:00 GMT
Content-Type: text/html; charset=utf8
Vary: Accept-Encoding
X-Powered-By: PHP/5.4.4-14+deb7u14
Age: 0
X-Cache: MISS from cache.turonnet.uz
Transfer-Encoding: chunked
Connection: keep-alive
どうすれば修正できますか?
content-length
は、Transfer-Encoding
はchunked
に設定されます。ヘッダーを送信するとき、サーバーは最終的に送信するデータの量を認識していません。各チャンクには独自の長さのヘッダーフィールドがあります( [〜#〜] rfc [〜#〜] を参照)。
考えてみると、静的HTMLファイルとは異なり、WebサーバーはPHPスクリプトによって生成されるデータの量を知る方法がありません。生成されたファイルをキャッシュして送信することができます。スクリプトが完了した後、または生成中にチャンクで送信された後、特に出力が大きく実行時間が長いスクリプトには後者が推奨されます。
PHPが動的コンテンツを生成しているため、nginxは長さを知りません。最初にphp出力バッファーに書き込んでから、バッファーをフラッシュする前にヘッダーフィールドを手動で設定できます。