Internet Explorer и Edge переименовывают файлы «.TGZ» в «.GZ»

437
Graham

У меня была проблема, о которой сообщили пользователи системы Jenkins, которую я установил в моей новой компании. При загрузке файлов релизов с расширением ".tgz" (файлы tar'd gzip'd из Linux) эти файлы переименовываются в ".gz" в MS Internet Explorer и браузерах Edge при их загрузке.

Я воспроизвел это на IE. Если вы просто щелкнете левой кнопкой мыши по ссылке для скачивания, она автоматически и беззвучно переименует загружаемый файл в «.gz». Если щелкнуть правой кнопкой мыши и выбрать «Сохранить объект как», расширение по умолчанию - «.gz». У меня ничего нет с Эджем, но у меня нет причин сомневаться в отчете.

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

  • Я подумал, что это проблема с обратным прокси-сервером Nginx, который делает что-то странное с типами MIME, поэтому я отключил службу Nginx и указал IE на « http: //my.internal.jenkins.server: 8080 » (не настоящее имя) ссылки, конечно, но вы не можете видеть это, потому что это находится за нашим брандмауэром). И снова IE сохранил файлы «.tgz» с расширением «.gz».

  • Я подумал, было ли это проблемой с Дженкинсом, поэтому я искал другой файл для скачивания. Загружая релиз Moodle как tgz, я снова сохраняю его с расширением ".gz". Так что, похоже, это общая проблема с браузером, а не с моим сервером Jenkins.

  • Изменить: Повторите это с файлами из других мест в Интернете ...

  • Я пробовал то же самое на Chrome (на Windows) и Firefox (на Ubuntu). Оба загружают файл ".tgz" правильно. Так что, похоже, это характерно для браузеров MS.

  • Выбрав «Копировать ярлык», URL определенно завершает «.tgz». Даже если вы скачаете файл и позволите IE переименовать его в «.gz», если вы перейдете в список «Загрузки» и проверите ссылку, он снова сообщит, что URL-адрес - «.tgz».

  • Содержимое файла не изменяется. Сменив имя обратно при загрузке или переименовав файл после загрузки, он работает нормально.

  • Я попал в Google, конечно. Следующее - самое близкое, что я нашел, но у них, кажется, нет решения.

Это не проблема, которую я заметил с настройкой Jenkins в моей предыдущей компании. Тем не менее, в моей предыдущей компании у нас была политика использования Chrome или Firefox в настройках IE, поэтому вполне возможно, что проблема существовала там, и мы просто никогда ее не замечали. Моя настоящая работа - встроенное программное обеспечение, поэтому я не обладаю глубокими навыками в devops.

У кого-нибудь есть понимание этого, пожалуйста?

2
Проверьте HTTP заголовки ответа. Заголовок [`Content-Disposition: attachment`] (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition#As_a_response_header_for_the_main_body) можно использовать для указания имени для загружаемых файлов. Возможно, Jenkins предлагает неверное расширение через заголовок, и некоторые браузеры принимают его, в то время как другие извлекают расширение из URL. Вы можете легко захватывать заголовки с помощью [Fiddler] (https://www.telerik.com/fiddler). gronostaj 5 лет назад 0
Я использовал [jsfiddle] (https://jsfiddle.net/omhhjsoy/3/) из вашей первой ссылки, и Edge загрузил его просто как `.tgz`. IE работает очень медленно, но временное имя содержит `.tgz`. Как сказано в вашей второй ссылке, файлы заголовков - это все, что нужно, поэтому, пожалуйста, добавьте все ваши заголовки в пост для проверки. У jsfiddle нет заголовков, поэтому браузеры не портят его. harrymc 5 лет назад 0
@gronostaj Спасибо - я посмотрю на это. Graham 5 лет назад 0
@harrymc Интересно, что ваша загрузка Lenovo работает нормально, а загрузка Moodle из моего поста - нет. Как вы оба говорите, это говорит о том, что это настройка сервера. Это все еще очень странно, особенно если учесть, что пользователи других программ (например, Moodle), похоже, этого не заметили. Graham 5 лет назад 0
@harrymc Ах, я неправильно понял, что вы оба имели в виду. Вы имели в виду, что это может быть проблема с заголовками HTTP на странице, показывающей мне ссылки. Но введя только ссылку для скачивания в адресную строку на новой вкладке, я получаю то же самое поведение. И я получаю то же поведение от загрузки Moodle. Поэтому я подозреваю, что это не связано с заголовками HTTP. Graham 5 лет назад 0
Заголовки возвращаются сервером в ответ на введенную ссылку и сообщают браузеру имя файла по умолчанию и его характеристики. Вы можете захватить их с помощью инструментов разработчика любого браузера, который вы используете. Я думаю, что сервер будет генерировать одинаковые заголовки во всех случаях, поэтому вы можете использовать Chrome или Firefox для их отображения (я не знаю, что IE имеет для таких инструментов). harrymc 5 лет назад 0

1 ответ на вопрос

2
Daniel B

Edge просто смотрит на Content-typeзаголовок, чтобы определить, какое расширение файла использовать, о чем свидетельствует указанная вами проблема .

Moodle: application/g-zip  Varnish: application/octet-stream  Silva: application/gzip  Zimbra: binary/octet-stream  lpopt: application/x-gzip  lapack: application/x-gzip  gmsh: application/x-gzip 

Итак, ясно, что у вас есть ассоциация файлов для application/x-gzipи application/g-zip.

Также удивительно, что здесь есть только один правильный тип пантомимы gzip: `application / gzip`. `application / octet-stream` также действителен, хотя это просто общий двоичный файл, все остальные не зарегистрированы в IANA. Daniel B 5 лет назад 0
Хорошо, спасибо. Я покопаюсь в настройках Nginx и проверю, как я тогда это получу - и как я тогда получу это, чтобы разобраться с * Content-type *. Как я уже сказал, devops на самом деле не моя вещь, поэтому я немного облажался. :) Graham 5 лет назад 0
Технически тип mime правильный, как есть. В конце концов, это файл gzip. ;) Daniel B 5 лет назад 0

Похожие вопросы