加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 无法使用PreSendRequestHeaders()覆盖IIS中的http缓

发布时间:2020-12-16 09:49:50 所属栏目:asp.Net 来源:网络整理
导读:历史: 出于安全考虑,我们的组织希望通过向IIS添加HTTP标头来禁用缓存. 到期:-1 Pragma:没有缓存 缓存控制:无缓存,无存储 添加这些标头会导致MIME“application / vnd.ms-excel”响应类型在IE6中通过SSL进行故障转移.微软承认这是一个错误(http://support
历史:
出于安全考虑,我们的组织希望通过向IIS添加HTTP标头来禁用缓存.

到期:-1
Pragma:没有缓存
缓存控制:无缓存,无存储

添加这些标头会导致MIME“application / vnd.ms-excel”响应类型在IE6中通过SSL进行故障转移.微软承认这是一个错误(http://support.microsoft.com/kb/323308),他们的解决方案也有效.但是,这个解决方案必须在整个组织中作为补丁推进,并且面临来自更高管理层的阻力.

问题:
同时,我们正在尝试通过在PreSendRequestHeaders()函数上使用HTTPModules覆盖MIME类型为“application / vnd.ms-excel”的页面的IIS set HTTP头来寻找备选方案

//this is just a sample code
public void Init(HttpApplication context)
        {
            context.PreSendRequestHeaders += new EventHandler(context_PreSendRequestHeaders);

        }
protected void context_PreSendRequestHeaders(object sender,EventArgs e) 
        {
            HttpApplication application = (HttpApplication)sender;
            if(application.Response.ContentType == "application/vnd.ms-excel; name=DataExport.xls")
            {
                application.Response.ClearHeaders();
                application.Response.ContentType = "application/vnd.ms-excel; name=DataExport.xls";
                application.Response.AddHeader("Content-Transfer","Encoding: base64");
                application.Response.AddHeader("Content-Disposition","attachment;filename=DataExport.xls");
                application.Response.AddHeader("cache-control","private");
            }
        }

即使在使用ClearHeaders()清除标头后,IIS仍会在发送响应之前附加缓存标头.

问题:
这种在PreSendRequestHeaders()函数中使用ClearHeaders()的方法是错误的吗?
它们是否可以使用ASP.NET 1.1中提供的库来覆盖缓存标头(Expires,Pragma,缓存控制)?

其他:
我们正在使用
浏览器:IE6 SP 3
服务器:IIS 6
平台:.NET 1.1

解决方法

IIS 7.5使用 URL Rewrite extention并添加出站规则以去除Cache-Control标头中的“no-store”值和Pragma标头,这变得更容易.这个规则集可以解决这个问题:

<outboundRules>
    <rule name="Always Remove Pragma Header">
        <match serverVariable="RESPONSE_Pragma" pattern="(.*)" />
        <action type="Rewrite" value="" />
    </rule>
    <rule name="Remove No-Store for Attachments">
        <conditions>
            <add input="{RESPONSE_Content-Disposition}" pattern="attachment" />
        </conditions>
        <match serverVariable="RESPONSE_Cache-Control" pattern="no-store" />
        <action type="Rewrite" value="max-age=0" />
    </rule>
</outboundRules>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读