2017-06-17 7 views
0

最近、私はApacheを備えた標準PHPからNGINXを使用したPHP-FPMにプロジェクトを切り替えました。私はすぐにすべてのJSON要求がtext/htmlコンテンツタイプを返すことに気付きました。以前はapplication/jsonを返していました。php-fpm、nginx、およびヘッダ

Googleが検索してスタックオーバーフローして何も見つからず、正直に私が狂ったと思うようになったとき、私はついにContent-Typeヘッダーを2回設定することによって問題が発生したことに気付きました。アプリケーションのエントリポイントの開始時には、text/htmlをデフォルトとし、application/jsonを設定してJSON(XHRリクエストの場合)を送信したい場合はもう一度やり直してください。

私の質問は、違いはなぜですか?なぜApacheとPHPの下で完璧に動作するコードがNGINXとPHP-FPMで動作しなくなるのですか? header()への2回目の呼び出しを失敗させる組み合わせについては何ですか?

フォローアップとして、コードがApache/PHPの下で動作したか、Content-Typeを本質的に悪い/嫌になるように設定していますか?

答えて

0

Content-Typeヘッダーを2回設定することは不正です。したがって、動作は定義されません。

参照RFC7230のセクション3.2.2:そのヘッダフィールドの全体のフィールド値のいずれかがカンマで区切られたように定義されない限り、送信者がメッセージ内の同じフィールド名を持つ複数のヘッダフィールドを生成してはいけません

list [ie、#(values)]やヘッダフィールドはよく知られている例外です(後述)。

Webサーバーでは、アプリケーションによって生成されたHTTPヘッダー(不足しているヘッダーの追加など)が消滅することがよくあります。 Apacheは重複したヘッダを取り除き、一方nginxは削除しないと仮定します。

+1

なぜ、PHPには$ replace引数がありますか?デフォルトの動作がヘッダーを置き換えるものであれば、PHPはこれを処理し、重複はApache/NGINXに送られるべきではないと仮定してはいけませんか? –

関連する問題