web-dev-qa-db-ja.com

Content-Lengthヘッダーは存在しません

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

どうすれば修正できますか?

6
user3393523

content-lengthは、Transfer-Encodingchunkedに設定されます。ヘッダーを送信するとき、サーバーは最終的に送信するデータの量を認識していません。各チャンクには独自の長さのヘッダーフィールドがあります( [〜#〜] rfc [〜#〜] を参照)。

考えてみると、静的HTMLファイルとは異なり、WebサーバーはPHPスクリプトによって生成されるデータの量を知る方法がありません。生成されたファイルをキャッシュして送信することができます。スクリプトが完了した後、または生成中にチャンクで送信された後、特に出力が大きく実行時間が長いスクリプトには後者が推奨されます。

19
Sven

PHPが動的コンテンツを生成しているため、nginxは長さを知りません。最初にphp出力バッファーに書き込んでから、バッファーをフラッシュする前にヘッダーフィールドを手動で設定できます。

1
user242786