ユーザーをあるページから別のページにリダイレクトする必要がありますが、元のリファラー文字列を維持する必要があります。たとえば、 http://www.othersite.com/pageA.jsp で開始する場合は、 http://www.mysite。 com/pageB.jsp 、それは http://www.mysite.com/pageC.jsp への302リダイレクトを実行し、「 http ://www.othersite.com/pageA.jsp "
これは302リダイレクトの通常の動作ですか?または、「 http://www.mysite.com/pageB.jsp 」を支持して、元のリファラーが削除されますか?それは望ましくありません。
違いがあるかどうかはわかりませんが、JSPで作業しており、response.sendRedirect()を使用して302リダイレクトを実行しています。
私はこれで実験を行ったことに言及する必要があり、元のリファラー文字列を保持しているようです( " http://www.othersite.com/pageA.jsp ")これが通常のデフォルトの動作であることを確認してください。
ご協力ありがとうございました。
追加するために編集:
現在302リダイレクトを使用していますが、おそらく301リダイレクトを代わりに使用できます。 301リダイレクトの動作がより信頼できるかどうかを知っていますか?
短い答えは、関連するRFC 2616で指定されていないことです http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.36 Refererヘッダーまたは302ステータスコードのいずれか。
最善の策は、複数のブラウザーでテストを行い、コンセンサス行動があるかどうかを確認することです。
完全なベルトとブレースの場合、リダイレクトURLに元のリファラーをエンコードして、確実に取得できるようにします。
302については知りませんが、今日いくつかのブラウザーで301をテストしました。結果は以下のとおりです。
[〜#〜] scenario [〜#〜]:ユーザーがdomainAを指すdomainXのリンクをクリックします。 domainAは、domainBへの301リダイレクトを行います。
referer
domainBにランディングする場合:domainX(InPrivateブラウズを使用する場合でも、ユーザーが新しいタブでリンクを開く場合でも)referer
domainBへの着陸時:domainX(ユーザーが新しいタブでリンクを開いた場合でも)referer
domainBへの着陸時:domainX(ユーザーが新しいタブでリンクを開いた場合でも)referer
は、domainBにランディングする場合:domainX(nlessユーザーが新しいタブでリンクを開く)referer
domainBへの着陸時:domainX(ユーザーが新しいタブでリンクを開いた場合でも)良い質問。この場合、リファラーの送信はブラウザーに完全に依存します(ブラウザーは新しいリソースに対して別の要求を行うように指示されるため)。
RFC 2616 この問題については沈黙しています:
要求されたリソースは、別のURIの下に一時的に存在します。リダイレクトはときどき変更される可能性があるため、クライアントは、今後のリクエストにRequest-URIを引き続き使用する必要があります。この応答は、Cache-ControlまたはExpiresヘッダーフィールドで示されている場合にのみキャッシュ可能です。
ブラウザが正しいリファラーを送信することを信用しません。他のものとは異なる何かを送信するものが少なくとも1つあるに違いない。
回避策
可能であれば、?override_referer=<old_url>
パラメータをリダイレクト先のURLに追加し、HTTP_REFERERの代わりにその値を解析します。
そうすれば、常に正しい結果を得ることができ、セキュリティの面で何も失うことはありません。リファラーはどちらの方法でも偽装できます。
私は正反対の問題を抱えていました:私はリファラーが「pageB」であることを望みましたが、現在のブラウザはどれもこのように進みません...
そこで、301または302リダイレクトの代わりにpageBでHTMLリダイレクトを試しました。
<meta http-equiv="refresh" content="0; url=pageC.jsp" />
結果は驚くべきものでした:
これが役立つことを願っています