7

私は Response.Redirect を使用してユーザーを別のサーバーにリダイレクトしてファイルをダウンロードしていますが、他のサーバーはヘッダーをチェックして正しいサーバーからのものであることを確認しています...ただし、Response.Redirect は応答からヘッダーを削除するようです.

ヘッダーを元に戻す方法を知っている人はいますか? 私はもう試した:

Response.AddHeader("Referer", "www.domain.com");

しかし、Referrer ヘッダーが設定されているかどうかを確認すると、受信ページのテストは false です。

ユーザーがクリックするボタンを表示する以外に、これを機能させる方法についての提案があります(可能な限りユーザーからURLを隠しておきたいです)。

4

12 に答える 12

10

利用可能なHTMLハックがあります。

<form action="http://url.goes.here" id="test" method="GET"></form>
<script type="text/javascript">
  document.getElementById("test").submit();
</script>

コードビハインドからトリガーする必要がある場合は、それも実行できます。

Response.Write( @"<form action='http://url.goes.here' id='test' method='GET'></form>
                  <script type='text/javascript'>
                     document.getElementById('test').submit();
                  </script> ");

Inkelが指摘するかもしれないように、それはReferer[sic]仕様の大まかな解釈です。それはあなたが望むことをするでしょう。

于 2008-10-29T16:41:38.600 に答える
3

これは、リファラー(原文のまま)ヘッダーの定義に反します。

Referer [sic] request-headerフィールドを使用すると、クライアントは、サーバーの利益のために、Request-URIを取得したリソースのアドレス(URI)を指定できます(ヘッダーフィールドのスペルが間違っていますが、「リファラー」)。

リダイレクトする場合、これは明らかにこのヘッダーを追加する場合には当てはまりません。

この情報が必要な場合は、Cookieまたはセッション変数を試してみてください。あるいは、すでに言われているように、URLの変数を試してみてください。

于 2008-10-28T13:40:15.613 に答える
1

これが私のために働く以前のバージョンです:

default.asp

servername = Lcase(Request.ServerVariables("SERVER_NAME"))
Response.Status = "301 Moved Permanently"
Response.AddHeader "Location", "http://yoursite"
Response.AddHeader "Referer", servername
Response.End()
于 2010-12-16T16:00:39.943 に答える
1

2 番目のサーバーが取得するリファラー ヘッダーはブラウザーによって生成され、適切な方法で変更できる可能性はほとんどありません。

リファラーを URL に追加してから、代わりに 2 番目のサーバーでそれを読み取ろうとしましたか?

Response.Redirect("url?Referer=" + Server.UrlEncode(Request.UrlReferrer));
于 2008-10-28T13:20:44.640 に答える
1

これが古いことは知っていますが、同様のことをしようとしているときに見つけました。

私はそれをURLに追加したくありませんでした. また、人々が誤ってその URL をブックマークしてしまうことも避けたいと考えていました。したがって、Cookie を使用してデータを追加しました。

string token = vwrApi.GetAuthenticationToken(userId);
Response.Cookies.Add(new HttpCookie("VwrAuthorization", token));
Response.Redirect(returnUrl, true);

もちろん、これは宛先サーバーが情報を検索する場所を変更できるかどうかに依存しますが、少なくとも別のオプションです。

于 2012-04-13T07:55:10.757 に答える
1

ありえないと思います。クライアントに送り返すのは、クライアントが最初に要求したページではなく、参照されたページをロードするようクライアントに指示する Location ヘッダーです。この場合、クライアントはリンクから来ていないため、リファラー ヘッダーを設定しません。これは基本的に、ユーザーがブラウザのロケーション バーにリダイレクト URL を入力した場合と同じです。

リファラーをセッションに保存したり、クエリ パラメータとして URL にエンコードしたりできる場合があります。Forms ログインが ReturnUrl で行うように。

于 2008-10-28T12:24:28.170 に答える
1

Server.Transferはオプションですか?

ただし、確認する必要があるいくつかの注意事項があります。EG は、元の URL、承認などを保持します。詳細については、リンクを参照してください。

このような状況では、元の URL を保持する方が有利な場合があります。

于 2008-10-28T12:37:51.993 に答える
0

投稿することはお勧めしません。ほとんどの Web サイトは投稿をブロックしています。javascript document.location = '<%:yourURL%>;';新しいページを自動的にロードするだけを使用してください。リダイレクト応答にはリファラーが含まれていないため、これは私にとってはうまく機能しています。

于 2012-03-06T13:13:32.887 に答える
0

リダイレクトが同じプロセスに向けられている場合は、Session 値を使用してリファラー URI を保存し、セカンダリ ページがそれを取得できるようにします。私は自分のシステムでそれを使用して、https システムへの http 接続のリダイレクト間のリファラーを維持しています。

于 2008-10-28T14:25:20.547 に答える
0

認証 Cookie (鍵付きハッシュと 5 分の有効期限付き) を設定し、リダイレクト応答を送信し、ブラウザーが 2 番目のサーバー (同じドメインの場合) に認証 Cookie と共に新しい要求を送信し、2 番目のサーバーが Cookie をチェックします。最初のサーバーだけがそれを設定できたことを確認し、コンテンツをブラウザーに送り返します。

于 2008-10-28T13:32:15.893 に答える
-1

307 ステータス応答を発行し、ロケーション ヘッダーをユーザーのリダイレクト先に設定する必要があります。これにより、元の referer[sic] ヘッダーがそのまま保持されます。

HttpContext.Current.Response.StatusCode = 307;
HttpContext.Current.Response.AddHeader("Location", "http://stackoverflow.com");
HttpContext.Current.Response.End(); 
于 2012-06-27T18:09:22.523 に答える
-2

上記のインケルのコメントに+1。

仕様を気にせず、とにかくやりたい場合は、Response.Redirectの使用を避け、代わりに自分で応答ヘッダーを作成できます。

Response.StatusCode = 302; //temp redirect
Response.Headers.Add("Location", "your/url/here");
Response.Headers.Add("Referer", "something.com");
Response.End();

これは私の頭から離れています。応答ヘッダーに他のいくつかのものが必要な場合があります。

于 2008-10-29T16:47:44.453 に答える