我的网站和IE存在问题。我有一个文件 Document.ashx ,它根据查询字符串中传递的参数成为我数据库中的文档。
该文件适用于:
如果符合以下条件,则不起作用:
Windows Internet Explorer
无法从MyHostName下载Document.ashx。
无法打开此Internet站点。
请求的网站不可用或无法找到。
请稍后再试。
有没有人知道会导致这种情况的原因。当然,它在Firefox中运行良好。
我在办公室里找了几个人用IE来试试,他们都得到同样的问题。他们都说它适用于Firefox。
答案 0 :(得分:24)
就像rymo说集Cache-Control: private
一样,如果您的回复标题碰巧有Pragma :no-cache
,您还必须将其更改为Pragma: token
。
答案 1 :(得分:19)
根据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
。
答案 2 :(得分:15)
事实证明,IE8可以接受完全禁用的缓存,但它对于标题的确切顺序非常挑剔。因此,不要回到private
(允许某些缓存,可能不符合您的安全需求),而是使用:
Cache-Control: no-store, no-cache, must-revalidate
按照确切的顺序指定 - 首先no-store
然后no-cache
- IE8将允许文件下载而不会出错。还要确保未设置Pragma
标题。
答案 3 :(得分:7)
此问题出现在IE8中,可能还有早期版本 - 但在IE9 +中解决了。它通过SSL下载文件相关。
要解决我的应用程序中的问题,我必须在下载中添加以下两个标头(用PHP编写):
header("Cache-Control: private");
header("Pragma: cache");
答案 4 :(得分:6)
这听起来像我问题我只是与IE 8相遇。当我追踪解决方案时,我遇到了两个解决方案。其中一个应该纠正这个问题。
只是为了让您知道它是客户端计算机上的修复程序,因为它是IE编码导致问题的方式。
修正: http://support.microsoft.com/kb/815313 http://support.microsoft.com/kb/323308
答案 5 :(得分:3)
有什么大惊小怪的? 问题是由于立即缓存过期或无缓存。
执行以下操作以解决问题:
转到server system -> Run Inetmgr -> RightClick and properties on the folder(e.g images) -> httpHeaders ->
现在,取消选中启用内容过期,或选中 后过期,并提供1分钟。
这适用于IIS 5.
IIS 6/7会有类似的设置。
快乐编程!!
答案 6 :(得分:1)
我遇到了同样的问题,并且通过尝试以上所有纠正方法感到沮丧。显然我不想在客户端机器上完成解决方案所以我所做的只是从头部删除“Pragma”参数,它开始工作得很好。 问题已解决。
答案 7 :(得分:1)
如果你使用asp.net。 使用sets cache
删除代码评论以下
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();
答案 8 :(得分:0)
我们在www.Qiqqa.com的ClickOnce部署中嵌入了同样的问题。我怀疑它与IE在获得application/octet-stream
时所做的“MIME类型嗅探”有关 - 我想保护用户免受恶意攻击。
无论如何,要解决这个问题,我们将.deploy
文件的mime类型更改为text/plain
- 显然不理想,但与此同时,我不知道我们的情况可能在我们的服务器上有一个.deploy
文件,用户可以在ClickOnce之外浏览。
问题解决了。
答案 9 :(得分:0)
动态创建iframe,将src设置为下载页面loaction,追加到正文。
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);
}
这些代码对我很有用。
答案 10 :(得分:0)
如果您执行'目标另存为...'或在新标签中打开,则可以正常使用。但仍然在IE8中出错。我有相同的实现...创建具有iframe的div(display:none),并将其附加到body并将src设置为内容类型为application / binary的frame。
答案 11 :(得分:0)
我们使用MVC控制器tagged with NoCache
与 IE8 有同样的问题。这设置了Response.Cache.SetNoStore
,它打破了IE中的文件下载。
答案 12 :(得分:-3)
此问题是由Internet Explorer中的浏览器设置引起的。在Internet Explorer中,转到Tools
> options
> Advanced options
。在标有安全的部分中,找到并清除不将加密的页面保存到磁盘。