ホームページ >バックエンド開発 >PHPチュートリアル >PHPリクエストの書き換えに関する問題
PHP リクエストの書き換えに関する問題
同僚から、問題の説明を手伝ってほしいと頼まれました: PHP によって生成され、Nginx ログに生成されるリダイレクト リクエスト 2個別のレコード: 1 つは応答本文のサイズが 0 バイト、もう 1 つは応答本文のサイズが 5 バイトです。
私は年をとったので、問題に直面したときに嗅覚が鈍くなりました。最初の感覚は、ゼロが正しいのではないかということです。リダイレクト後 コンテンツの出力もありますが、コードを確認したところ、問題がないことがわかりました:
1
2
3
4
header('Location: /path');
exit;
? >
大回りした後、ふと気づいたのですが、環境がNginx+PHPで、レスポンスにContent-Lengthが無く、データがTransfer-Encodingでチャンクで送信されていました。 "、つまり、リダイレクトされた空の応答本文は実際には次のようになります:
0rnrn
それ以上でもそれ以下でも、ちょうど 5 バイトで、チャンク転送を参照できます。詳細については、エンコーディングを参照してください。このような空のレスポンスボディの場合は、PHPが積極的に「Content-Length: 0」を出力した方が良さそうです。
ゼロバイト応答を説明するにはどうすればよいですか?ログをクエリすると、次の 2 つの状況が見つかりました:
HEAD “/path HTTP/1.1” 302 0
GET “/path HTTP/1.0” 302 0前者は HEAD リクエストであり、応答本文は必要ありません。後者は HTTP/1.0 であり、「Transfer-Encoding」をサポートしていません。