【问题标题】:Unable to download [file] from [server] Unable to open this Internet site. The requested site is either unavailable无法从 [服务器] 下载 [文件] 无法打开此 Internet 站点。请求的站点不可用
【发布时间】:2012-02-07 01:49:08
【问题描述】:

我正在使用以下 asp.net 代码流式传输 word 文档。

     Response.Clear();
     Response.ContentType = "application/vnd.ms-word";
     Response.AddHeader("content-disposition", "attachment;filename=\"" + Letter.WordFileName.Replace(" ", "%20").Replace("&", "And") + "\"");
     Response.BinaryWrite(Letter.WordDocument.ToMSWordDocument());
     Response.End();

上周,我尝试在 ie8 中流式传输文件时开始收到以下消息

无法从 [服务器] 下载 [文件]

无法打开此 Internet 站点。请求的站点不可用或找不到。请稍后再试。

更新到 ie9 后我没有收到错误,但我的大多数用户仍在使用 ie8。我感觉这可能与 Windows 安全补丁有关,但我在 Google 搜索中没有找到类似的东西。

这里有更多信息:

  • 该错误只发生在ie8中
  • 我没有使用https来显示word文档
  • 问题从上周开始出现。
  • 该错误存在于 3 周未更新的系统上。
  • 我在多台使用 ie8 的计算机上遇到此问题。

响应头

HTTP/1.1 200 正常 缓存控制:私有,无缓存 =“设置饼干” 内容类型:application/vnd.ms-word 服务器:Microsoft-IIS/7.5 设置Cookie:.ASPXAUTH = 74B339B8F7578C646C5ABEB1DD798B73409F51EBE28A1EE3CA0E9B16CDA93C1A3B81CA6A82ABABF940A3E828B5B1D7DE503940AD669CD435E28DE36848A706ECA2BF0CAAB408263DFA22166CB796FEAE27A96950DE37A70619C2F59D9C138F39749DC814D41F9839F3414AEDDA7A3A26F5DA92EFAF09BC8C965F61E02DB68B94D8D43C3201528B601896108B0A30B3CDEDF389F3C3D463E2163596186BFE6BADB83DB635193CDE01DA06E0CB3D0F9FAC1C392DA5E30052AD530B803FA92FD72EA7D768B5BB1505BA26B566AED1DCDE7E5423143803434F2C32572427CD6B68A49126E7084947CC52CE315FAC9A94DA1EE4BF765A0F4D2277679F41F6F19275B0067C6223517A959811A24B36C882F9F6D76B1C408B109DBA33991FDC79517A4E7B4C24DEC38E00FA2C7CFBA5566067017CBF34C71D2CC33605A621277C5E6D3E34F45529536140841A0B98720F7129CF49EDB4D3C61553865EE1A332B4273A674FED651FA7525ED6BF180A578B3C0BA0422C40B4C09663BFA3D6E4DD69171C4B2A558506E1B1AFA5788C37EEB8BB2052BA02C91DB14CA0DC5D12F56E62A3016982521480CA104DC3E7451CC92F89003BDE64378961CB8D40753D4031D1CB5A8B78BE6004B97E2128F8ABE584B7961CECF4983C54A48B5E0AB662ECAFF4E04E984C663EA2CBE4C2161F B1D074B06F297378BA15F36927870735833076BB2E43E60BE83E82EBB0138290A761803535BF0590C22F6AAC01397E67C5FE52A3AB5EBB;路径=/ 内容处置:附件;文件名="Septa%20Roberts%20Compound%2020111226[1].doc" X-AspNet-版本:4.0.30319 X-Powered-By: ASP.NET 日期:格林威治标准时间 2012 年 1 月 10 日星期二 16:07:51 内容长度:147456

【问题讨论】:

  • 您是否尝试使用与将内容输出到响应流相同的代码在服务器上写入文件,然后尝试使用 IE8 下载创建的文件?这将是一个很好的起点,可以使用 Fiddler 来监视静态文件和动态下载脚本的 HTTP 请求。
  • 在任何地方使用 Response.AddHeader “Cache-control”、“no-cache”?还有一些其他的想法可以尝试:answers.microsoft.com/en-us/ie/forum/ie8-windows_other/…
  • @brad 你能做一个测试,将文件名更改为一个没有括号和空格的简单文件名,看看它是否有效?

标签: asp.net internet-explorer-8 streaming


【解决方案1】:

尝试替换

Response.End();

Response.Flush
CompleteRequest()

在代码块的末尾(有关更多信息,请参阅 herethere)。也许响应重定向有一些问题,它会导致您的服务器响应在浏览器眼中失败。

【讨论】:

  • 我为这个问题赞助了一笔奖金,因为我相信我们的一位客户也遇到了同样的问题。我们无法访问客户的内部网络,我们自己也无法重现问题。可悲的是,提出这个问题的人没有注意它,所以没有人可以轻易地验证答案:(我将无论如何都将到期的赏金授予这个答案,不是因为它解决了问题,而是因为它真的很有教育意义(检查来源)。
  • Alfabravo 分享的第一个链接真的很有帮助,解决了我的问题。这是关于 IE 和 https 的组合。这个答案真的很好。
【解决方案2】:

经过一些研究,我发现 asp.net 的安全补丁会更改标头,这会以某种方式导致 IE8 中的这种行为。更多信息在这里:CLICK

【讨论】:

    【解决方案3】:

    我想这是因为浏览器有一些导致这种情况的原因,是否有任何其他工作站在尝试在 IE 8 中访问此站点时遇到此问题?

    1) 检查恶意软件使用 - SpyBot-搜索和销毁 - http://www.safer-networking.org/index2.html - 广告软件 - http://www.lavasoft.nu/home.php

    2) 您是否安装了任何额外的防病毒软件或防火墙,如果有的话,它们是什么?它们可能需要至少在临时基础上完全卸载,以尝试找出导致这种情况的原因。

    【讨论】:

      【解决方案4】:

      您可以尝试做的是在 fiddler 运行时将 word 文档上传到另一台服务器并使用 IE8 下载它。然后查看响应标头,看看您的代码中缺少什么/不同之处。

      【讨论】:

        【解决方案5】:

        添加这个并试一试:

        // check for IE
        if (Request.Browser.Browser == "IE")
        {
          Response.Cache.SetCacheability(HttpCacheability.NoCache);
          Response.AppendHeader(@"Pragma", @"no-cache");
        }
        

        【讨论】:

          【解决方案6】:

          我找到了根,除非你真的知道如何解决 IE8 的情况(实际上我只是碰巧发现它只发生在 IE8 中),否则不要使用它,如果你使用它,请删除它:

          Response.Cache.SetCacheability(HttpCacheability.NoCache);
          

          你的代码中的这一行:

          Response.ClearHeaders();
          Response.AddHeader("Cache-Control", " no-store, no-cache ");
          

          感谢作者:

          http://www.asprangers.com/post/2012/01/24/Stream-rendering-failing-for-PDF-Excel-Docs-after-MS11-100-patch-from-Aspx-pages.aspx


          刚找到这个,可能也有帮助;

          注意 ASP.NET SetCacheability 方法

          MSDN 上的 HttpCacheability 枚举:

          NoCache:没有人可以缓存页面。

          私有:只有浏览器可以缓存它(但不能共享代理)。这是默认值

          公共:每个人都可以缓存页面,包括代理

          服务器:页面只缓存在服务器上(和 NoCache 一样,所以浏览器不会缓存页面)

          ServerAndNoCache:Server和NoCache...同Server

          ServerAndPrivate:Server和Private...同Private

          http://codeclimber.net.nz/archive/2007/04/01/Beware-the-ASP.NET-SetCacheability-method.aspx

          【讨论】:

            猜你喜欢
            • 2011-03-25
            • 1970-01-01
            • 1970-01-01
            • 2013-04-08
            • 1970-01-01
            • 1970-01-01
            • 2010-10-04
            • 2016-07-26
            • 2019-09-09
            相关资源
            最近更新 更多