Правильные заголовки, но Chrome говорит, что ресурс интерпретируется как документ

Я читал много вопросов, подобных этому, но я действительно не могу понять...

Я использую архиватор и экспресс модулей Node.js. Я хочу просто отправить zip-файл клиенту. Мой код выглядит примерно так:

res.set("Content-Type", "application/zip");
archive = archiver("zip", {store: true});
archive.pipe(res);

При запросе zip-файл передается правильно, но Chrome жалуется:

Ресурс интерпретируется как документ, но передается с помощью приложения/zip типа MIME.

Если я сделаю что-нибудь глупое, например, установлю тип контента на text/json, я получу:

Ресурс интерпретируется как документ, но передается с типом MIME text/json

Итак, очевидно, то, что я устанавливаю в Node.js, выполняет свою работу, а проблема заключается в чем-то другом. В нем говорится, что ресурс был перенесен с типом MIME applicatioin/zip, но интерпретирован как документ.

Как сделать так, чтобы он не интерпретировался как документ?


Кроме того, я пробовал следующие способы установки типа контента:

res.type("application/zip");
res.contentType("application/zip");

Но я получил тот же результат.

Mozilla же ни на что не жалуется. В некоторых ответах на подобные вопросы говорилось, что это предупреждение можно игнорировать. Мне тоже игнорировать? Может ли проблема заключаться в том, что архив передается непосредственно в объект ответа? Хотя (повторюсь) zip отправляется успешно.

Редактировать:

Настройка Content-Disposition тоже не работает:

res.set({
    "Content-Type": "application/zip",
    "Content-Disposition": "attachment; filename='images.zip'"
});

Я также использую <iframe> для инициации запроса:

document.getElementById("iframe-downloader").src = requestUrl;

Причина в том, что я не хочу перенаправлять страницы. Единственный способ, которым я мог это сделать, был таким.

Редактировать:

Изменение моих настроек Chrome, как указывает этот ответ, также не работает.

Редактировать:

В этом ответе говорится, что это из-за <iframe>. Если я сделаю запрос через простой <form> с action="/archive", он все равно не сработает.


person dodov    schedule 16.06.2017    source источник
comment
Этот возможный дубликат содержит несколько разных ответов, из которых может подойти один. Взгляните на ► Интерпретированный ресурс как документ, но переданный с помощью MIME-типа application/zip   -  person Nope    schedule 16.06.2017
comment
Что ж, установка .src в iframe сообщает браузеру ОЖИДАТЬ веб-страницу, но вы не отправляете веб-страницу - поэтому предупреждение. Это источник вашей проблемы. Пожалуйста, объясните, чего именно вы пытаетесь достичь на своей веб-странице? Вы просто пытаетесь запустить загрузку файла нажатием кнопки?   -  person jfriend00    schedule 16.06.2017
comment
Я пытаюсь загрузить сгенерированный файл с сервера без перенаправления страниц. Кроме того, я не думаю, что iframe является проблемой. Как я уже сказал в своих правках, если я использую простую форму с атрибутом action, я все равно получаю предупреждение.   -  person dodov    schedule 16.06.2017
comment
@HristiyanDodov в целом location.href = '/path/to/download.zip' можно использовать для запуска загрузки без перенаправления при условии, что сервер устанавливает заголовок Content-Disposition.   -  person robertklep    schedule 16.06.2017


Ответы (2)


Я думаю, это означает, что Chrome пытается отобразить файл как веб-страницу, а это не то, что вы хотели.

Добавьте заголовок: Content-Disposition: attachment; filename="filename.ext"

person Halcyon    schedule 16.06.2017
comment
Нет... до сих пор делает. Хотя искал способ переименовать скачанный файл и могу - с этим заголовком. Большое спасибо! Тем не менее, я все еще получаю это проклятое предупреждение. - person dodov; 16.06.2017
comment
@HristiyanDodov взгляните на res.download(), чтобы указать имя загружаемого файла. - person robertklep; 16.06.2017

У меня та же проблема; У меня был формальный почтовый запрос, результатом которого стал файл. Наличие набора MIME Type и Content-Disposition сгенерировало это самое предупреждение. Я где-то читал, что новые файлы надо открывать в новой вкладке и предупреждение исчезло. (Но также может быть потому, что новая страница была открыта и мгновенно закрыта... поэтому я не мог проверить, появилось ли там это предупреждение)

Лучший, Ян

person Alunisiira    schedule 09.12.2019