14

ユーザーがブラウザで WebApp から安全でないページを開き、ページ A と呼び、そこにあるリンクをクリックすると、ページ B の安全なインスタンスに移動します。PageB に入ると、ユーザーはリンクをクリックして PageA の安全なインスタンス (既に表示され、OutputCache にある) に戻ることができます。PageA は PageB (安全な URL) にアクセスした後、別の URL を介してアクセスされていますが、実際には新しいものを作成するのではなく、以前にキャッシュされたコピーを取得していることに気付きました。デバッグ セッションでこの動作を確認したところ、ASP.Net がページの安全なコピーに同じ OutputCache アイテムを使用していたことに驚きました。

私の質問は、なぜこのようになっているのですか?また、ASP.Net OutPutCache に、安全な URL からのアクセスを、安全でない同等のものとは異なる/一意のアイテムとして扱うように指示するにはどうすればよいですか?

[バックグラウンド]

最近、Web サイトの画像をすべての画像に Scene7/Akamai を使用するように切り替えました。この結果、安全な接続で特定のページを表示するときに異なる Scene7 URL を使用するコードを追加しました。この OutputCache の問題により、セキュアな URL を出力するロジックを実行できず、ブラウザーの警告が表示されます。

4

3 に答える 3

13

これは言葉どおりの質問には答えませんが、スキームによって変更する必要がなくなる場合があります。Scene7 URL の「http://」をハードコーディングしている場合は、それらをスキーム相対 URL に変更できます。

<img src="http://site.scene7.com/images/someimage.jpg" />
=>
<img src="//site.scene7.com/images/someimage.jpg" />

これにより、ブラウザは参照ページと同じスキームでリソースを自動的に要求します。もちろん、scene7 ドメインの SSL 証明書を持っていることを前提としています。

于 2009-09-29T14:00:38.833 に答える
8

VaryByCustom="scheme" を実行して、これを Global.asax.cs ファイルに追加できると思います (アプリのバージョンとユーザーと同様に、私が使用する他のいくつかを含む):

    public override string GetVaryByCustomString(HttpContext context, string custom)
    {
        if (custom.Equals("version", StringComparison.CurrentCultureIgnoreCase))
        {
            Assembly asm = Assembly.GetExecutingAssembly();
            string[] parts = asm.FullName.Split(',');
            string version = parts[1].Trim().ToLower();
            return version;
        }
        else if (custom.Equals("user", StringComparison.CurrentCultureIgnoreCase))
        {
            var user = Membership.Users.CurrentUser;
            return null == user ? string.Empty : user.Id.ToString();
        }
        else if (custom.Equals("scheme", StringComparison.CurrentCultureIgnoreCase))
        {
            var scheme = context.Request.IsSecureConnection ? "https" : "http";
            return scheme;
        }
        else
            return base.GetVaryByCustomString(context, custom);
    }
于 2009-12-19T17:15:24.897 に答える
1

試したことはありませんが、Outputcache VaryByHeader プロパティと、要求されているリソースのインターネット ホストとポート番号を指定する「host」ヘッダーを使用できる可能性があります。

私が持っている質問は、ページ B から安全な方法でページ A にリダイレクトする理由です。安全でないページの場合、PageB リダイレクトを修正して、常に安全でないページにリダイレクトすることはできませんか。

于 2009-07-14T03:05:36.627 に答える