Как я могу убедиться, что Nginx загружает незашифрованные текстовые файлы вместо встроенных?
18
У меня есть приложение Rails (Redmine), которое работает с Nginx. Если я нажимаю на какое-либо вложение, мой браузер (Firefox, т.е. Chrome) попросит меня загрузить файл. Но если я нажимаю на вложение типа txt, мой браузер открывает этот файл в браузере.
Как я понимаю, решить задачу Nginx - открыть файл в браузере или скачать его. Как я могу настроить это?
Изменение Content-Typeиз .txtфайлов может работать, но это довольно рискованный способ решить эту проблему, потому что вы не можете гарантировать 100% , что браузер пользователя будет реагировать , как вы ожидаете. И, кроме того, вводить в заблуждение метку .txtфайла как двоичного файла.
Вместо этого я предлагаю использовать стандартный способ заставить браузер загружать, а не отображать файл, то есть использовать Content-Dispositionзаголовок со значением attachment( RFC 2183 , см. Также RFC 2616 ).
Например, этот locationблок nginx отправит такой заголовок с .txtфайлами под /downloads/URI, и поэтому они будут вынуждены скачать:
Но Content-Dispositionвзлом в браузере Chromium может начать говорить плохие слова в консоль и даже прекратить загрузку любых файлов со страницы. Там написано худенькие (с желтыми треугольниками) как:"Resource interpreted as Document but transferred with MIME type image/png:"
Накилон
4
Вам нужно извлечь местоположение для загружаемого файла и установить их тип контента как application/octet-stream.
В нашем сервисе есть следующий каталог для загрузки промоматериала (который включает в себя PDF-файлы, изображения и некоторые документы, но я уверен, что он будет работать и с TXT-файлами):
Использование «add_header» абсолютно неверно, вместо этого используйте «default_type»: location / smth / {default_type application / octet-stream ;; }
Олег Неумывакин
@OlegNeumyvakin Почему default_type лучше, чем add_header?
user193661
2
@ user193661 Поскольку «add_header» буквально добавляет новый заголовок «Content-Type», то в ответ вы можете получить два заголовка «Content-Type», что может привести к странному поведению клиентов HTTP. "default_type" устанавливает (перезаписывает) один заголовок "Content-Type" в ответе.
Content-Disposition
взлом в браузере Chromium может начать говорить плохие слова в консоль и даже прекратить загрузку любых файлов со страницы. Там написано худенькие (с желтыми треугольниками) как:"Resource interpreted as Document but transferred with MIME type image/png:"
Вам нужно извлечь местоположение для загружаемого файла и установить их тип контента как
application/octet-stream
.В нашем сервисе есть следующий каталог для загрузки промоматериала (который включает в себя PDF-файлы, изображения и некоторые документы, но я уверен, что он будет работать и с TXT-файлами):
Каждый браузер, который мы пробовали, загружает все файлы из этого места, а не пытается их отобразить.
источник