ホームページ  >  記事  >  バックエンド開発  >  PHPリクエストの書き換えに関する問題

PHPリクエストの書き換えに関する問題

WBOY
WBOYオリジナル
2016-06-20 12:35:10938ブラウズ

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」をサポートしていません。


私は額の汗を拭いながら、ようやく同僚の前で恥ずかしくないように、問題をわかりやすく説明しました。


転載元: 小さな HTTP 問題


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。