いいえ、これは目には二重ではありません
もちろん、最初に頭に浮かんだのは、スクリプトのどこかでデータベースへのクエリが「倍増」することでした。 たとえば、そのような「学校の間違い」:
$query = "INSERT INTO table VALUES(...)"; $result = mysqli->query($query); if ($result = mysqli->query($query)) { ... }
10万回チェック-いいえ。 すべてがコードで整然としています。 そのため、ブラウザは何らかの理由でデータを2回送信します。 セッション変数の増分と-はいで簡単なテストスクリプトを生成します! ブラウザーは、1ずつ増加する代わりに、変数の増加を2頑固に示します。 Chrome Safariの代わりに試します-そのような問題はありません。 次は、誤動作しているJavaScript、ブラウザ拡張機能の検索ですが、すべて無効です。 インターネットでの検索でも同様のアドバイスが得られました。 同様の状況にある多くのプログラマーは、一意性のチェックを導入し、重複した投稿をカットしました。 しかし、この解決策ではバグが修正されないため、停止せずにこの動作の理由を特定することにしました。
最後に、理由が見つかりました。 そして、私は英語の開発ブランチで解決策を見つけられなかったので、ここでそれを共有したいと思います。 すべてが単純です-2つの原因があります:Google Chrome(およびそのブラウザー)とApacheのmod_rewrite。
問題の本質
すべてがシンプルです。 Cromeプラットフォーム上に構築されたブラウザの機能は、各サイトのfavicon.icoファイルを検索することです。 彼がそうでない場合、彼らはすべて同じように彼を探し続けます。 ページが更新されるたびに、サーバーへの個別の要求。 また、Apacheのほとんどの.htaccessファイルには次の行があります。
RewriteCond %{REQUEST_FILENAME} !-f RewriteRule . /index.php
このルールに従って、ブラウザから存在しないfavicon.ico Apacheへのリクエストを受信すると、それを素直にindex.phpファイルにリダイレクトし、スクリプトが2回実行されます。 もちろん、ほとんどの場合、本格的なWebアプリケーションは一意性がチェックされ、繰り返し要求を逃しません。 ほとんどの場合、サイトにはfavicon.icoファイルがあります。 それでも、このような問題があるため、解決方法を説明できることを意味します。
ソリューションオプション
解決策は最初の、最も簡単なものです:favicon.icoで始めましょう。 Chromeはそれを見つけて落ち着きます。
2番目の解決策は、サーバー上の.htaccessファイルをわずかに変更することです。 すべてのプロジェクトのmod_rewriteルールブロックは、次のようになります。
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f # Next line is to solve the Chrome and favicon.ico file issue. # Without it browser sends two requests to script. RewriteCond %{REQUEST_FILENAME} !favicon.ico # RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
ファビコンを入れていませんか? Chromeから二重トラフィックを取得
考えてみると、ステートメントはtrueです。なぜなら、サーバーは「静的」ではなく、Webアプリケーションを起動するからです。Webアプリケーションは、アイコンではなく動的に生成された404ページをブラウザーに返します。 そして最悪の場合、サイトのメインページが完全に起動します。 サイトにアイコンをインストールすることなく(たとえば、人気のあるブログエンジンに)、開発者はGoogle Chromeのユーザーからサーバーへの負荷を2倍にします。
それだけです。 この情報が誰かに役立ち、時間を節約できることを願っています。