资源解释为Document但使用MIME类型application/zip传输

Ash*_*ams 184 javascript google-chrome

使用Chrome 12.0.742.112,如果我使用以下标头重定向:

HTTP/1.1 302 Found 
Location: http://0.0.0.0:3000/files/download.zip
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
X-Ua-Compatible: IE=Edge
X-Runtime: 0.157964
Content-Length: 0
Server: WEBrick/1.3.1 (Ruby/1.9.2/2011-02-18)
Date: Tue, 05 Jul 2011 18:42:25 GMT
Connection: Keep-Alive
Run Code Online (Sandbox Code Playgroud)

如果遵循,则返回以下标题:

HTTP/1.1 200 OK 
Last-Modified: Tue, 05 Jul 2011 18:18:30 GMT
Content-Type: application/zip
Content-Length: 150014
Server: WEBrick/1.3.1 (Ruby/1.9.2/2011-02-18)
Date: Tue, 05 Jul 2011 18:44:47 GMT
Connection: Keep-Alive
Run Code Online (Sandbox Code Playgroud)

Chrome不会重定向,也不会更改上一页,它只会在控制台中报告以下警告:

资源解释为Document但使用MIME类型application/zip传输.

该过程在Firefox中正常运行,如果我打开一个新标签并直接进入,也可以在Chrome中正常运行http://0.0.0.0:3000/files/download.zip.我做错了什么,或者这是Chrome的错误/怪癖?

Roy*_*Han 161

您可以在<a>标记中指定HTML5 下载属性.

<a href="http://example.com/archive.zip" download>Export</a>
Run Code Online (Sandbox Code Playgroud)

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-download

  • 叹.**这个'FIX'对大多数浏览器不起作用** - 只有Chrome.它是2016年,所以不要指望它很快. (37认同)
  • @全部是2035年(我来自未来),没有计算机支持此功能。 (9认同)
  • ie或某些其他浏览器不支持"download"属性.如果您有其他选择,请帮助我 (2认同)
  • 这修复了Chrome,但打破了其他浏览器.我的Android手机不会从这种链接下载. (2认同)
  • 对 Chrome 2019 没有影响 (2认同)

Sae*_*ati 32

在您的请求标头中,您已发送Content-Type: text/html,这意味着您希望将响应解释为HTML.现在,即使服务器向您发送PDF文件,您的浏览器也会尝试将其理解为HTML.那就是问题所在.我正在寻找原因可能是什么.:)

  • 不,在`text/html,application/xhtml + xml,application/xml; q = 0.9,*/*; q = 0.8`中有一部分表示Chrome几乎接受所有内容(`*/*`). (5认同)
  • 你在说什么?问题中没有请求标头。它们都是响应头。 (2认同)

Eva*_*van 24

我在提供PDF文件(MIME类型application/pdf)时遇到了这个问题,并通过设置Content-Disposition标头解决了这个问题,例如:

Content-Disposition: attachment; filename=foo.pdf
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.

  • 但在哪里写这个? (7认同)
  • 在标题中包含此内容,但Chrome仍会发出警告 (4认同)
  • @coder您可以从网络服务器添加这样的标题.不确定你使用的是什么,因此很难提供更多信息.您使用的服务器语言或框架是什么? (3认同)

Ash*_*ams 22

我已经解决了这个问题......只需打开一个新标签即可.

为什么它不起作用我不完全确定,但它可能与Chrome如何处理页面上的多个下载有关,也许它认为它们是垃圾邮件而只是忽略它们.

  • 我不希望用户打开一个新标签...我也没有找到打开一个文件优雅的文件. (48认同)
  • @Joram等.人. - 打开一个下载选项卡(使用目标'_blank') - 没有解决问题,它只是将"Resource intrepreted as Document"控制台警告消息传送到新选项卡.在地毯下扫地不是解决方案. (20认同)
  • 你是什​​么意思"开了一个新标签"??? 您手动打开了一个新的浏览器窗口并将下载URL粘贴在那里? (5认同)
  • 对,就是这样.我假设它是特定选项卡的应用程序状态中的错误. (2认同)

Cha*_*nac 22

我无法找到任何地方只是对信息的解释.这是我的解释.

据我了解,Chrome期待它可能显示的一些材料(文档),但它获得了无法显示的东西(或者它被告知不显示的东西).

这是一个关于如何在HTML页面级别声明文档的问题href(参见downloadRoy的消息中的属性)以及如何通过HTTP头(特别是Content-Disposition)在服务器的答案中声明它.这是合同问题,而不是希望和期望.

为了继续Evan的方式,我经历过:

Content-type: application/pdf
Content-disposition: attachment; filename=some.pdf
Run Code Online (Sandbox Code Playgroud)

刚刚不一致有:

<a href='some.pdf'>
Run Code Online (Sandbox Code Playgroud)

Chrome会将资源解释为文档而已转移...

实际上,附件处理只是意味着:浏览器不应解释链接,而是将其存储在某处以用于其他隐藏目的.在上面,要么download在旁边丢失href,要么Content-disposition必须从标题中删除.这取决于我们是否希望浏览器呈现文档.

希望这可以帮助.


Joh*_*hnC 8

我今天使用我的node.js/express.js应用程序在Chrome版本30.0.1599.66上遇到了同样的问题.

标头正确的,快速正确地自动将它们设置,它工作在指示其他浏览器,把HTML 5"下载"属性不解决,什么解决它要到铬高级设置和检查框"请问哪里保存下载前的每个文件".

之后,没有"资源解释为文档...."错误报告在此问题的标题中,因此看起来我们的服务器代码是正确的,当Chrome设置为保存时,Chrome是错误地在控制台中报告该错误文件自动转移到某个位置.


Ell*_*eny 6

通过Javascript执行文件下载时,我遇到了类似的问题。添加下载属性没有区别,但是添加target ='_ blank'确实没有作用-我不再收到“资源解释为文档...”控制台消息。

这是我非常简单的代码:

var link = document.createElement('a');
link.target = '_blank';
link.href = url;
document.body.appendChild(link); // Required for Firefox
link.click();
link.remove(); 
Run Code Online (Sandbox Code Playgroud)

我还没有尝试使用直接HTML,但是希望它能正常工作。

请注意,我发现Firefox要求将链接附加到文档中,而Chrome可以在没有链接的情况下使用。

  • 只是警告,目标='_blank'将触发IE 11的弹出窗口阻止机制... (3认同)