2016-05-12 4 views
0

私はJavaベースのウェブサイトを作っています。ウェブサイトは、私のサイトで要求された各ページのURLを取得します。request.getRequestURL()はどのような条件で私のウェブサイトからのURLを返さないのですか?

String url = request.getRequestURL().toString(); 

このようなURLをデータベーステーブルに保存します。しかし、私は自分のサイトのページのURLではないいくつかの異常なエントリを発見しました。例えば、もし私のウェブサイトのURLは次のようなものです:

http://www.example.com/abc 

異常なエントリは、これらのようになります。

http://www.thedresden.org/ 
http://www.camptuckerman.org/ 

するのは、これらの異常のURLからある場所について話しないようにしましょう。 request.getRequestURL()が他のサイトのURLを返す方法を知りたいです。過去に私が学んだのは、request.getRequestURL()が私のサイトで要求されたページのURLを返すということです。私は何かが恋しいですか?

ベスト。

答えて

2

これは以上の問題はよりも聞こえます。

ブラウザがWebサイトに接続すると、Webサーバーはそのサイト(ホスト名)を検索します。これは、1つのウェブサーバが同時に複数の異なるサイトのコンテンツ(「仮想ホスト」)を処理する方法である(「仮想ホスト」)。

など。 Example Companyは、米国のウェブサイトexample.comと英国のサイトexample.co.ukを持っている可能性があります。それらは同じウェブサーバーによってホストされることができますが、異なる内容を表示することができます。

この仕組みは、HTTPリクエストを送信するときにブラウザに「ホスト」ヘッダーが含まれていることです。そうすれば、Webサーバーはどのコンテンツをクライアントに返すかを知ることができます。私はstackoverflow.comをロードするときに、例えば、私のブラウザでは、あなたのブラウザの開発者向けツールで「ネット」タブで見る(正確な詳細は、ブラウザ間で異なる場合は、そのヘッダを見ることができます

Host: stackoverflow.com 

のヘッダを含みます)。

技術的には、クライアント側(ブラウザ)がという正直なWebサーバーでであることが必要です。

だから、私はこれを行うことができます:「stackoverflow.com」でWebサーバからページを要求するが、私は「example.com」のコンテンツをしたいWebサーバに指示します

curl 'http://stackoverflow.com' -H 'Host: example.com' 

を。
この場合、stackoverflow.comはcloudflareによって処理されるため、クラウドフレアのエラーページが表示されます。

何らかの理由で、いくつかの「ブラウザ」(または非常におそらくボット)がウェブサーバーにアクセスしていて、他のドメインのページを要求しているように見えます(www.camptuckerman.orgなど)。
HttpServletRequest.getRequestUrl()Hostヘッダーを含む、基本的なHTTP要求の内容を調べて、ブラウザが要求したURLを再構成します。
ブラウザが不正なホストを送信した場合は、getRequestUrlに表示されます。

+0

ティム、あなたの答えにとても感謝します。私はChromeとFirefoxで 'http://www.example.com -H http:// www.abcdefg.com'と入力しました。私のウェブサイトは呼び出されず、外部からのウェブサイトリクエストは見られませんでした。あなたはボット、カールまたは他のツールが「悪い」ヘッダーを構築でき、私のウェブサイトが異常なURLを生成すると言っていますか? – curious1

+0

私はまた、curl 'http://example.com '-H' Host:example.com'をWindows上で(本当に' example'を実際のドメイン名に置き換えて)試しました。私のウェブサイトにはウェブリクエストがありませんでした。 Windowsであなたが言ったことをどのようにテストすることができますか?ありがとう! – curious1

+1

申し訳ありません、私は通常のWindowsユーザーではないので、私はそこにお手伝いできません。 Firefox用のLiveHttpHeadersプラグインを使用すると、変更されたヘッダーを含むリクエストを再生することができ、オプションである可能性があります。 – Tim

-2

request.getRequestURL()が他のサイトを返すようにリクエストでサーブレットでURL転送が行われていると思います。

+0

alim、あなたのご意見ありがとうございます。私は、あなたが説明したようにそれがどうなるかを理解するのは難しい時があります。あなたがテストするために私がプログラムに使うことができるいくつかのステップを示していただけますか? – curious1