2016-11-25 6 views
2

nodejsを使用してサーバーサイドプログラムで作業していますが、意図したとおりに動作しますが、入力したとき(ドメインの2文字でもない)、サーバーはGoogle Chromeの要求その返答として返信した)。nodejs expressは入力中にGoogle Chromeのアドレスバーオートコンプリートを検出します

最初の文字がであっても、Google Chromeのリクエストに応答してサーバープログラムを停止するにはどうすればいいですか(完了しても入力しないで、常に入力します)。ユーザー。

google chromeは訪問していないサイトでもこれを行いますか?

これをフィルタリングするための特別なリクエストパラメータがあるので、内部(ただしサーバーへのインバウンド)リクエストではなく、実際のクライアントリクエストのみを選択できますか?

私は「どうすればよい」のようなアドレスバーに何かを書いていますが、(既に訪問した)「クエリを収集する」(おそらくそのサイトからのリクエスト) "愛"。 google chromeは訪問されていない愛の提案サイトにhttpリクエストを送信しますか?

グーグルクローム版:54.0.2840.99メートル(64ビット)

はたぶん、これはいくつかのプリフェッチ技術とブラウザの正常な動作ですか?

+1

うーん、なぜあなたはこれを防ぐためにしたいですか?どんな結果が望ましくないのですか?作成する大きな注意点は、GETリクエストが(主にアナリティクスのようなもの以外の)冪等でなければならないということです。つまり、GETのためにサーバー上の何も変更する必要はありません。 GoogleはPOST btwのためにこれをしません。 – Parris

+0

ユーザーが+閉じるページを開いたかどうか、またはアドレスバーにスクロールするだけでページを入力しなかったかどうかを知る方法。 (セッションのタイミングを保存するなどタイムアウトが厳しいなど) –

+0

代わりにその質問をします。たとえば、onunloadイベント内でJS内で "sendBeacon"を使用して、同じ情報を取得できます。 – Parris

答えて

5

これはを使用すると、ページの読み込みパフォーマンスをスピードアップするためのURLを入力して完了する前にバックグラウンドでWebページをロードとの事前レンダリングと呼ばれています。

これはサーバー側では検出されないようです。

Chromiumプロジェクトで問題が発生しました。 「は修理されません。」(Prerendering does not have any distinguishing HTTP headers)とマークされています。プリフェッチ要求はDev Toolsの "Network"タブには表示されないので、ヘッダーを見て簡単に確認することはできません。残念ながら、Wiresharkを使用してチェックした場合、レンダリング要求と「通常の」要求とを区別する違いはありませんでした。

以下のように手動で無効にすることはできますが、残念ながらサーバー側で実際の要求と区別することはできません。

  1. コンピューターでChromeを開きます。
  2. 右上にある[メニュー]、[設定]の順にクリックします。
  3. 下部にある[詳細設定を表示]をクリックします。
  4. [プライバシー]セクションで、[予告 サービスを使用してページをすばやく読み込む]チェックボックスをオフにします。

SO参考:https://stackoverflow.com/a/35091410/7055233

+0

スレッドによると、唯一の解決策はPage Visibility APIを実装することですhttps://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API – winterfruit

+0

このレンダリング前のリクエストは、私が最初に申請書を開くたびに、私は数日間悩まされました。私は同じような時に、同じリソースに対して2つの要求を得ていました。これだけでなく、時には同時実行エラー "ActionView :: Template :: Error(繰り返し中に新しいキーをハッシュに追加できません)"があります。 – Ghazi

関連する問題