【问题标题】:IE : Unable to download * from *. Unable to open this Internet site. The requested site is either unavailable or cannot be foundIE:无法从 * 下载 *。无法打开此 Internet 站点。请求的站点不可用或找不到
【发布时间】:2011-03-25 19:53:15
【问题描述】:

我的网站和 IE 存在问题。我有一个文件 Document.ashx 根据查询字符串中传递的参数从我的数据库中变成一个文档。

文件在以下情况下有效:

  • 您在我的网站上并单击下载链接。
  • 您访问我网站上的任何内容并将 URL 粘贴到地址栏中并访问它。
  • 您之前已经访问过一次文档链接,即使它确实出错了。

如果出现以下情况,它将不起作用:

  • 您尚未在当前 IE 打开的情况下访问我的网站,并将链接粘贴到地址栏中。它显示以下错误:

Windows Internet Explorer

无法从 MyHostName 下载 Document.ashx。

无法打开此 Internet 站点。

请求的站点不可用或找不到。

请稍后再试。

有没有人知道是什么原因造成的。自然它在 Firefox 中运行良好。

我已经让我办公室的几个人尝试使用 IE,但他们都遇到了同样的问题。他们都说它适用于 Firefox。

【问题讨论】:

  • 网络服务器是否记录任何错误?网络服务器是否记录请求?
  • 如果我在 Document.ashx ProcessRequest 事件上设置断点,它将被调用并无错误地运行。
  • 我不知道该怎么做。听起来服务器上出现了问题。我能建议的最好方法是调试代码并确保发送回客户端的内容是您认为发送的内容。
  • 我发现如果我不设置 context.Response.ContentType 那么它是第一次工作。知道为什么会这样吗?
  • 我还发现如果我删除 context.Response.Cache.SetCacheability(HttpCacheability.NoCache) 并添加回它可以工作的内容类型。

标签: internet-explorer download


【解决方案1】:

我们在 www.Qiqqa.com 的 ClickOnce 部署中嵌入了同样的问题。我怀疑这与 IE 在获得application/octet-stream 时所做的“MIME 类型嗅探”有关 - 我想是为了保护用户免受恶意内容的侵害。

无论如何,为了解决问题,我们将 .deploy 文件的 mime 类型更改为 text/plain - 显然不理想,但同时,我不知道我们可能有一个 @我们服务器上的 987654325@ 文件,用户可以在 ClickOnce 之外浏览。

问题解决了。

【讨论】:

    【解决方案2】:

    听起来我的问题是我只遇到了 IE 8。当我在寻找解决方案时,我遇到了 2 个解决方案。其中一个应该纠正这个问题。

    只是为了让您知道这是客户端计算机上的修复程序,因为它是 IE 编码导致问题的方式。

    修复: http://support.microsoft.com/kb/815313 http://support.microsoft.com/kb/323308

    【讨论】:

      【解决方案3】:

      根据 David 在此处提供的知识库文章 (Internet Explorer file downloads over SSL do not work with the cache control headers),我们将传出标头从 Cache-Control: no-cache 更改为 Cache-Control: private。这似乎已经解决了 IE8 的问题,而不会影响其他浏览器。小心使用Cache-Control: no-store

      【讨论】:

        【解决方案4】:

        就像 rymo 说的设置Cache-Control: private,如果你的响应头恰好有Pragma :no-cache,你也得把它改成Pragma: token

        【讨论】:

        • 我现在推荐here提出的解决方案
        • 我已经在我的程序中添加了这个,但在我的情况下缓存控制被覆盖并显示 no-cache no-store ?知道如何解决这个问题。
        • Pragma: no-cache 最近潜入我们的标题并破坏了我们在 IE8 中的所有下载。仍然不知道它是如何到达那里的,但设置Pragma: token 修复了它。你是救生员!
        • 在这里发表评论已经太晚了,但是您在哪里可以找到“Pragma: token”的文档?在我看来,这可能是对将符号“令牌”解释为文字“令牌”的规范 (w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32) 的误读。似乎将 Pragma 设置为 ANYTHING 但“无缓存”(或完全删除它)会导致错误消失,但缓存的成本是多少?
        【解决方案5】:

        我遇到了同样的问题,尝试了上述所有纠正方法后感到很沮丧。显然我不想在客户端机器上完成解决方案,所以我所做的只是从标题中删除“Pragma”参数,它开始正常工作。 问题已解决。

        【讨论】:

          【解决方案6】:

          此问题是由 Internet Explorer 中的浏览器设置引起的。在 Internet Explorer 中,转到 Tools > options > Advanced options。在标记为安全的部分中,找到并清除不要将加密的页面保存到磁盘

          【讨论】:

            【解决方案7】:

            有什么大惊小怪的? 问题是由于缓存立即过期或无缓存造成的。

            执行以下操作来解决此问题:

            转到server system -> Run Inetmgr -> RightClick and properties on the folder(e.g images) -> httpHeaders -> 现在要么取消选中启用内容过期,要么选中过期时间并等待 1 分钟。

            这适用于 IIS 5。

            IIS 6/7 会有类似的设置。

            编程愉快!!

            【讨论】:

            • 这也发生在 Linux/Apache 服务器上。更多的是与标题有关。
            【解决方案8】:

            动态创建iframe,设置src为下载页面位置,追加到body。

            function downloadInIFrame(fileId) { var url = "download.aspx?fileId=" + fileId; var iframe = document.createElement("iframe"); iframe.src = url; iframe.style.display = "none"; document.body.appendChild(iframe); }

            这些代码很适合我。

            【讨论】:

              【解决方案9】:

              这个问题出现在 IE8 中,可能更早的版本 - 但在 IE9+ 中得到解决。它与通过 SSL 下载文档有关。

              为了解决我的应用程序中的问题,我必须在下载中添加以下两个标头(用 PHP 编写):

              header("Cache-Control: private");
              header("Pragma: cache");
              

              【讨论】:

              • 这对我有用。我尝试了一堆不同的标头(包括“Cache-Control: no-store, no-cache, must-revalidate”),除此之外没有任何区别。
              • 我也是 ie 8,同样的问题,同样的解决方案。干得好,丹。
              【解决方案10】:

              事实证明 IE8 可以接受完全禁用的缓存,但它对标头的确切顺序非常挑剔。所以不要回退到private(它允许某些缓存并且可能不符合您的安全需求)使用:

              Cache-Control: no-store, no-cache, must-revalidate
              

              当指定以确切的顺序 - 首先no-store 然后no-cache - IE8 将允许文件下载而不会出错。还要确保未设置 Pragma 标头。

              【讨论】:

              • 我刚刚对此表示赞同,但这只是因为相信它会起作用。不幸的是,在我们的测试中它没有,我们必须选择 Cache-Control: private 或重构我们的代码。
              • 我们最终得到了 no-store 和 Pragma: private ,如下所述:stackoverflow.com/a/17276263/543549
              • 我们必须修复“Cache-Control”值顺序并删除 Pragma 标头。
              • 我们遇到了这个问题;确实,确切的顺序确实很重要,我两种方式都进行了测试,如果出现问题,它就会失败。
              【解决方案11】:

              如果您执行“将目标另存为...”或在新选项卡中打开,它可以正常工作。但在 IE8 中仍然报错。我有相同的实现...作为创建具有 iframe 的 div (display:none),并将其附加到 body 并将 src 设置为内容类型为 application/binary 的框架。

              【讨论】:

                【解决方案12】:

                如果你使用 asp.net。 删除设置缓存的代码

                评论以下内容

                       Response.Clear();
                   Response.Buffer = true;
                   Response.Charset = "";
                   **//Response.Cache.SetCacheability(HttpCacheability.NoCache);**
                   Response.ContentType = contentType;
                   Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName);
                   Response.BinaryWrite(bytes);
                   Response.Flush();
                   Response.End();
                

                【讨论】:

                  【解决方案13】:

                  我们在使用 MVC 控制器 tagged with NoCacheIE8 中遇到了同样的问题。这会设置Response.Cache.SetNoStore,它会中断 IE 中的文件下载。

                  要解决 - 你可以reset the Http Cache Policy via reflection

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-04-08
                    • 2012-02-07
                    • 1970-01-01
                    • 2010-10-04
                    • 1970-01-01
                    • 2015-12-10
                    • 2016-07-26
                    相关资源
                    最近更新 更多