Ресурс, интерпретируемый как Документ, но переносимый с помощью MIME-типа application/zip
С 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
Что, если следовать, возвращает следующий заголовок:
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
Chrome не перенаправляет или не изменяет предыдущую страницу, он просто сообщает о следующем предупреждении в консоли:
Ресурс интерпретируется как Документ, но передается с помощью приложения MIME-типа/zip.
Процесс работает правильно в Firefox, а также отлично работает в Chrome, если я открою новую вкладку и перейду непосредственно к http://0.0.0.0:3000/files/download.zip
. Я что-то делаю неправильно, или это ошибка /quirk из Chrome?
Ответы
Ответ 1
Я исправил это... просто открыв новую вкладку.
Почему он не работает, я не совсем уверен, но он может иметь какое-то отношение к тому, как Chrome работает с несколькими загрузками на странице, возможно, он думал, что они были спамом, и просто проигнорировал их.
Ответ 2
Вы можете указать атрибут HTML5 скачать в своем <a> тег.
<a href="http://example.com/archive.zip" download>Export</a>
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-download
Ответ 3
В заголовке запроса вы отправили Content-Type: text/html
, что означает, что вы хотите интерпретировать ответ как HTML. Теперь, если даже сервер отправляет вам файлы PDF, ваш браузер пытается понять его как HTML. Это проблема. Я ищу, чтобы понять, в чем причина.:)
Ответ 4
Я столкнулся с этой проблемой при обслуживании PDF файла (приложение MIME-типа/pdf) и решил его, установив заголовок Content-Disposition, например:
Content-Disposition: attachment; filename=foo.pdf
Надеюсь, что это поможет.
Ответ 5
Я не мог найти нигде просто объяснение сообщения само по себе. Вот моя интерпретация.
Насколько я понимаю, Chrome ожидал некоторый материал, который он мог бы отобразить (документ), но он получил что-то, что не смог отобразить (или что-то было сказано, чтобы он не отображался).
Это вопрос как того, как документ был объявлен на уровне HTML-страницы в href
(см. Атрибут download
в сообщении Roy), так и того, как он был объявлен в ответе сервера с помощью заголовков HTTP (в частности, Content-Disposition
). Это вопрос контракта, а не надежды и ожидания.
Чтобы продолжить путь Эвана, я испытал это:
Content-type: application/pdf
Content-disposition: attachment; filename=some.pdf
просто несовместимо с:
<a href='some.pdf'>
Chrome будет плакать Ресурс интерпретируется как документ, но передается...
На самом деле расположение вложений просто означает это: браузер не должен интерпретировать ссылку, а должен хранить ее где-то для других - скрытых - целей. Здесь выше, либо отсутствует download
рядом с href
, либо Content-disposition
должен быть удален из заголовков. Это зависит от того, хотим ли мы, чтобы браузер отображал документ или нет.
Надеюсь это поможет.
Ответ 6
Я столкнулся с этой же проблемой сегодня с Chrome Version 30.0.1599.66 с моим приложением node.js/express.js.
Заголовки правильные, экспресс устанавливает их правильно автоматически, он работает в других браузерах, как указано, помещая атрибут html 5 'download', не разрешает, что он разрешил, он переходит в расширенные настройки Chrome и проверяет флажок "Ask где сохранить каждый файл перед загрузкой".
После этого не было сообщения об ошибке "Ресурс, интерпретируемый как документ....", как указано в названии этой проблемы, поэтому, похоже, что наш код сервера верен, Chrome неправильно сообщает об этой ошибке в консоли, когда она для автоматического сохранения файлов в месте.
Ответ 7
У меня была похожая проблема при выполнении загрузки файла через Javascript. Добавление атрибута загрузки не имело никакого значения, но добавление target = '_ blank' сделало - я больше не получаю консольное сообщение 'Resource интерпретируется как Document...'.
Вот мой красиво простой код:
var link = document.createElement('a');
link.target = '_blank';
link.href = url;
document.body.appendChild(link); // Required for Firefox
link.click();
link.remove();
Я не пробовал это с прямым HTML, но ожидал, что это будет работать.
Заметьте, я обнаружил, что Firefox требует, чтобы ссылка добавлялась к документу, тогда как Chrome будет работать без нее.
Ответ 8
Я столкнулся с этим, когда назначил src= "image_url" в iframe.
Кажется, что iframe интерпретирует его как документ, но это не так. Поэтому он выводит предупреждение.
Ответ 9
У меня была эта проблема в проекте веб-сайта ASP. Добавление заголовка "Content-Length" заставило загрузки снова начать работу в Chrome.
Ответ 10
Я получил эту ошибку, потому что я работал с моей файловой системой. Как только я начал с http-сервера, хром мог понять это.
Ответ 11
Эта проблема снова появилась в версии Chrome 61. Но, похоже, он исправлен в Chrome 62.
У меня есть RewriteRule, как показано ниже
RewriteRule ^/ShowGuide/?$ https://<website>/help.pdf [L,NC,R,QSA]
В Chrome 61 PDF не открывался, в консоли показывалось сообщение
"Resource interpreted as Document but transferred with MIME type application/pdf: "
Мы попытались добавить тип mime в правило перезаписи, как показано ниже, но это не помогло.
RewriteRule ^/ShowGuide/?$ https://<website>/help.pdf [L,NC,R,QSA, t:application/pdf]
Я обновил версию Chrome до последней версии 62 и снова начал показывать PDF. Но сообщение все еще присутствует в консоли.
Со всеми другими браузерами он был/работает нормально.
Ответ 12
В моем случае имя файла было слишком длинным и получило ту же ошибку. После сокращения ниже 200 символов работал нормально. (ограничение может быть 250?)
Ответ 13
У меня возникли те же проблемы с менеджером загрузки, который я создал. Проблема, связанная с тем, что имя файла было слишком длинным, а расширение было отключено.
Пример:
Имя файла: организационные протоколы и другие важные моменты .pd
<?php
header("Content-Disposition: attachment; filename=$File_Name");
?>
Решение. Увеличьте поле базы данных MySQL до 255, чтобы сохранить имя файла, и выполнили проверку длины перед сохранением blob. Если длинa > 255 обрезать до 250 и добавить расширение файла.
Ответ 14
Просто наткнулся на это, и никакая другая информация, которую я смог найти, не помогла: это была глупая ошибка: я отправлял вывод в браузер перед началом загрузки файла. Удивительно, но я не нашел полезных ошибок (например, "заголовки уже отправлены" и т.д.). Надеюсь, это спасет кого-то еще от горя!
Ответ 15
Я решил проблему, adding target="_blank"
к ссылке. Таким образом, Chrome открывает новую вкладку и загружает PDF без предупреждения, даже в адаптивном режиме.