如何配置ASP.Net的OutputCache通过HTTP和https的变化?(How do I c

2019-07-30 03:15发布

下面是这种情况,用户从我们的Web应用程序开辟了非安全的网页,我们称之为网页A,在他们的浏览器,然后单击在那里他们带到网页B的安全实例的链接。 一旦在网页B的用户随后可以点击一个链接,将他们带回网页A的安全实例(他们已经看到,是的OutputCache)。 我观察到,即使正在通过访问网页B之后不同的URL访问网页A(安全的)它的实际拉动之前缓存的副本,而制作成新的。 我在调试会话验证这一行为,并感到惊讶的是ASP.Net使用了相同的OutputCache项目的页面的一个安全副本。

我的问题是为什么会这样? 我如何告诉ASP.Net的输出缓存来治疗从安全的URL访问作为比非安全相当于一个不同的/唯一的项目?

[背景]

最近,我们交换我们的网站上的图像使用Scene7 / Akamai的所有图像。 作为这样的结果,我们的安全连接上观看一个给定的页面时添加的代码使用不同的Scene7的URL。 这个问题的OutputCache不会允许输出,安全网址的执行逻辑,并造成难看的浏览器警告。

Answer 1:

我认为,你可以做一个VaryByCustom是=“方案”,并添加到您的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);
    }


Answer 2:

这不回答这个问题的措辞,但它可以消除你的需要通过计划改变。 如果你是硬编码的“http://”为Scene7 URL可以改变他们计划相对的URL。

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

这将导致浏览器自动请求用相同的方案作为参考页面资源。 这是假设你有当然您scene7域的SSL证书。



Answer 3:

我从来没有尝试过,但你也许可以使用输出缓存VaryByHeader属性和“主持人”标头,指定所请求的资源的Internet主机和端口号。

我有现在的问题是你为什么重定向到网页A上的网页B的安全之后。 如果它是一个非安全页,无法修复你的网页B重定向总是重定向到非安全。



文章来源: How do I configure ASP.Net OutputCache to vary by http vs https?