この神秘的なグリッチは、一度に複数の条件が組み合わされた場合にのみ発生します。

あなたのサイトは
Apache Serverによって
ホストされてい
ます 。 (この条件を満たすことは難しくありません。現在、Apacheは最も人気のあるWebサーバーの1つです。)
サイトには
nginxキャッシングサーバーもあります。 (小さなサイトで
共有ホスティングを購入
すると、リソースを節約するためにホスティングプロバイダーがnginxをハングアップする最後の瞬間まで何も分からない場合があります。
もちろん、 HTTP応答のヘッダーを読んでよい
場合を除きます
。)PHPで実行する
エンジンを配置します。 (たとえば、CMS Drupal。
または、たとえば、 MediaWiki wiki。)
その後、エンジンによって作成された
エラーページ
No. 404の外観を確認します。 wikiに存在しない記事のアドレスをフィードするか、Drupalに存在しないページのアドレスをフィードします。
そして、彼らは来ます。
4桁の16進数。 404エラー(および403)を説明するページのコードに表示され、このコード
の「 <!DOCTYPE 」の
前に表示されるため、多くのブラウザー(Firefoxなど)は、ページの残りのテキストの上に表示する傾向があります。 CMSまたはwikiの作成者が考案した設計を破ります。
3340 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr"> <head> <title> … … …
問題は何ですか?
Drupalは、404エラーが発生した場合に、関数
「 drupal_set_header( 'HTTP / 1.1 404 Not Found') 」を呼び出します。はい
。MediaWiki(最新
バージョン1.18でも確認済み)にも同様のエラーがあります。 エンジンは、スーパーグローバル変数
$ _SERVER ['SERVER_PROTOCOL']の状態を慎重に確認する代わりに、
HTTPプロトコルバージョン1.1を使用すること
が安全であると単純に想定してい
ます 。
一方、これは事実とはほど遠いです。nginxはバックエンドと通信する際に
HTTPプロトコルバージョン1.0に依存し
ます 。 次に、Apacheサーバーは、PHP応答で
HTTP 1.1プロトコルを確認し(さらに
Content-Lengthヘッダーがない
)、 HTTP 1.1 に切り替え
て応答を
チャンクで送信し、ヘッダー
「Transfer-Encoding: chunked」を提供しますが、nginxは助けにはなりません
問題を解決する方法は?
とても簡単です。 Apacheが
HTTPバージョン1.0を代替なしで使用することを強制する2つのディレクティブを、Apacheサーバー構成(たとえば、wikiエンジンまたはCMSを含むディレクトリ内の
.htaccessファイル)に配置するだけで十分
です 。 SetEnv force-response-1.0 1 SetEnv downgrade-1.0 1
これにより、すぐに目的を達成できます。
さて、あなたは上記の問題を新しいものと呼ぶことはできません-しかし、それを解決するための適切なレシピは
、 2009
サブレコードへのコメント
にのみあるため、完全にグーグルではありません。 個人的には、
WebFactionで見つけるのが簡単
でした 。
私はHabrahabrに問題についての私自身の声明を掲載し、それを解決するための効果的なレシピを改めて伝えることで状況を修正しています。