95

ユーザーをあるページから別のページにリダイレクトする必要がありますが、元のリファラー文字列を維持する必要があります。したがって、たとえば、http://www.othersite.com/pageA.jspで開始する場合は、http://www.example.com/pageB.jspに移動するリンクをクリックすると、302が実行されます。http://www.example.com/pageC.jspにリダイレクトします。リファラー文字列を含める必要がありますhttp://www.othersite.com/pageA.jsp

これは302リダイレクトの正常な動作ですか?それとも、私の元のリファラーは、賛成してドロップされhttp://www.example.com/pageB.jspますか?それは望ましくありません。

違いがあるかどうかはわかりませんが、JSPで作業しておりresponse.sendRedirect()、302リダイレクトの実行に使用しています。

これを試してみたところ、元のリファラー文字列(http://www.othersite.com/pageA.jsp)が保持されているようですが、これが通常のデフォルトの動作であり、私の側では奇妙なことではないことを確認したかっただけです。


現在302リダイレクトを使用していますが、代わりに301リダイレクトを使用することもできます。301リダイレクトの動作がこれ以上信頼できるかどうか知っていますか?

4

4 に答える 4

125

302についてはわかりませんが、今日、いくつかのブラウザで301をテストしました。結果は、次のとおりです。

シナリオ:ユーザーがdomainAを指すdomainXのリンクをクリックします。domainAはdomainBへの301リダイレクトを実行します。

  • domainBにアクセスしたときのIE8refererは次のとおりです。domainX(InPrivateブラウジングを使用している場合でも、ユーザーが新しいタブでリンクを開いている場合でも)
  • domainBに到達したときのSafari4refererは次のとおりです。domainX(ユーザーが新しいタブでリンクを開いた場合でも)
  • domainBに到達refererしたときのFF3.6.10は次のとおりです。domainX(ユーザーが新しいタブでリンクを開いた場合でも)
  • domainBに到達refererしたときのChrome5は次のとおりです:domainX(ユーザーが新しいタブでリンクを開かない限り)
  • domainBに到達refererしたときのChrome26は次のとおりです:domainX(ユーザーが新しいタブでリンクを開いた場合でも)
于 2011-03-26T11:15:31.787 に答える
33

簡単に言うと、関連するRFC 2616 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.36で、Refererヘッダーまたは302ステータスコードのいずれにも指定されていません。

最善の策は、複数のブラウザでテストを行い、コンセンサス動作があるかどうかを確認することです。

フルベルトとブレースの場合は、リダイレクトURLで元のリファラーをエンコードして、確実に取得できるようにします。

于 2010-01-28T22:05:51.853 に答える
12

良い質問。この場合、リファラーの送信は完全にブラウザーに依存します(ブラウザーは、新しいリソースに対して別の要求を行うように指示されているため)。

RFC 2616は、この問題について沈黙を

要求されたリソースは、一時的に別のURIの下にあります。リダイレクトは時々変更される可能性があるため、クライアントは今後のリクエストに引き続きRequest-URIを使用する必要があります。この応答は、Cache-ControlまたはExpiresヘッダーフィールドで示された場合にのみキャッシュ可能です。

私はブラウザが正しいリファラーを送信することを信用しません。他とは違うものを送るものが少なくとも1つあるに違いない。

回避策

可能であれば、?override_referer=<old_url>リダイレクト先のURLにパラメーターを追加し、HTTP_REFERERの代わりにその値を解析してみませんか。

そうすれば、常に正しい結果を得ることができ、セキュリティで何も失うことはありません。リファラーはどちらの方法でも偽造できます。

于 2010-01-28T22:04:23.900 に答える
8

私は反対の問題を抱えていました:リファラーが「pageB」であることを望みましたが、現在のブラウザーのどれもこのように進みません...

だから私はpageBでHTMLリダイレクトを試してみました(301または302リダイレクトの代わりに):

<meta http-equiv="refresh" content="0; url=pageC.jsp" />

そして結果は驚くべきものでした:

  • リファラーはChromeのpageBです
  • リファラーはFireFoxとIEで空です!

これがお役に立てば幸いです

于 2014-09-11T15:08:08.180 に答える