Веб-сайт IIS отправляет несколько заголовков типа содержимого для zip-файлов

У нас проблема с сервером IIS5.

Когда определенные пользователи/браузеры нажимают, чтобы загрузить ZIP-файлы, в окне браузера иногда отображается двоичный бессвязный текст. Желательно, чтобы файл либо загружался, либо открывался с помощью связанного zip-приложения.

Изначально мы подозревали, что в файле установлен неправильный заголовок типа контента. Техник IIS подтвердил, что файлы .zip обслуживались IIS с типом mime «application/x-zip-compressed».

Однако проверка HTTP-пакетов с помощью Wireshark показывает, что запросы на zip-файлы возвращают два заголовка Content-Type.

  • Тип содержимого: текст/html; кодировка = UTF-8
  • Content-Type: application/x-zip-compressed

Есть идеи, почему IIS отправляет два заголовка типа контента? Этого не происходит для обычных файлов HTML или изображений. Это происходит с ZIP и PDF.

Есть ли конкретное место, где мы можем попросить специалистов IIS посмотреть? Или есть файл конфигурации, который мы можем изучить?


person frankadelic    schedule 09.04.2009    source источник
comment
Эти файлы обслуживаются непосредственно IIS или в запросе участвует что-то вроде ASP.NET?   -  person meandmycode    schedule 10.04.2009
comment
Насколько я могу судить, ASP.NET не обрабатывает запросы на файлы .ZIP. Похоже, что они обслуживаются непосредственно IIS.   -  person frankadelic    schedule 10.04.2009
comment
Можете ли вы перечислить какие-либо фильтры ISAPI, которые использует IIS? Может возникнуть проблема с переназначением типа контекста.   -  person Christopher G. Lewis    schedule 23.04.2009
comment
Где вы запускаете wireshark? Существует небольшая вероятность того, что между IIS и браузером может быть прозрачный прокси-сервер или аналогичная служба, которая добавляет заголовок типа контента.   -  person Mikko Rantanen    schedule 27.04.2009
comment
Я запускаю wireshark на клиентской машине, которая запрашивает ZIP-файл с веб-сервера.   -  person frankadelic    schedule 27.04.2009
comment
Можете ли вы поделиться списком браузеров / версий, в которых это происходит?   -  person Andrew Cox    schedule 29.04.2009
comment
Проблема была обнаружена по крайней мере в одной копии IE7, хотя проблема проявляется не во всех экземплярах IE7.   -  person frankadelic    schedule 29.04.2009


Ответы (6)


Я полагаю - и я могу ошибаться, что заголовок http 1.1 отправляет несколько определений заголовков, и наиболее конкретные имеют приоритет.

поэтому в вашем примере здесь он отправляет 2 text/html, а затем application/x-zip-commercial, поэтому второй будет наиболее конкретным - если это не может быть обработано на клиенте, тогда используется более общий (первый в таком случае ) -

Я прочитал этот http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html, и это указывает на то, что вы говорите, хотя не уверен, что это то, что происходит на самом деле.

Конечно, я могу быть совершенно неправ здесь

person braindice    schedule 23.04.2009
comment
В rfc об этом ничего не сказано. И не уверен, как вы пришли к выводу, что application/x-zip-commercial более конкретен, чем text/html. Заголовки Accept имеют функциональность, на которую вы ссылаетесь, и в этом случае application/x-zip-commercial является более конкретным, чем application/*, а / является наименее конкретным. - person Mikko Rantanen; 27.04.2009
comment
Как я уже сказал, я могу быть совершенно неправ, и если так, извините - person braindice; 27.04.2009

Убедитесь, что у вас нет фильтров ISAPI или HTTP-модулей ASP.net, настроенных для перезаписи заголовков. Если они не проверят, существует ли заголовок, он будет добавлен, а не заменен. Некоторое время назад у нас были проблемы с внутренним модулем аутентификации, который неправильно обновлял заголовки, поэтому мы получали два заголовка авторизации, один из IIS и один из нашего модуля.

person X-Cubed    schedule 23.04.2009
comment
Насколько мне известно, фильтры ISAPI не используются. - person frankadelic; 29.04.2009

Какое программное обеспечение установлено на сервере для работы с .zip файлами? Это выглядит IIS получает переводы MIME из реестра, возможно, используемое вами zip-программное обеспечение зарегистрировало тип MIME. Это не объясняет, почему IIS будет отвечать двумя заголовками типа контента, поэтому любой фильтр ISAPI и другая таблица Mime вызывают подозрение.

person Stijn Sanders    schedule 25.04.2009

Это может быть связано с этой статьей базы знаний. Предполагается, что IIS может архивировать уже заархивированный файл, но некоторые браузеры просто переходят прямо к дополнительному приложению, предоставляя вам неверные данные (поскольку он был дважды заархивирован). Если вы измените тип mime расширения zip на application/octet-stream, этого может не произойти.

person Andrew Cox    schedule 28.04.2009

Похоже, может быть проблема с вашей конфигурацией IIS. Однако из вашего сообщения невозможно сказать, так ли это.

Вы можете настроить типы mime на нескольких уровнях в IIS. Мои знания IIS 5 немного устарели, насколько я помню, это поведение одинаково для IIS 6. Я пытался смоделировать это в среде IIS 6, но когда-либо получал только один тип mime в зависимости от принятого заголовка

Я установил заголовок для zip-файлов на сайте как application/x-zip-compressed, а для файла я явно установил его как

tinyget -srv:dev.24.com -uri:/helloworld.zip -tbLoadSecurity
WWWConnect::Connect("server.domain.com","80")
IP = "127.0.0.1:80"
source port: 1581

REQUEST: **************
GET /helloworld.zip HTTP/1.1
Host: server.domain.com
Accept: */*


RESPONSE: **************
HTTP/1.1 200 OK
Content-Length: 155
Content-Type: text/html
Last-Modified: Wed, 29 Apr 2009 08:43:10 GMT
Accept-Ranges: bytes
ETag: "747da786a6c8c91:0"
Server: Microsoft-IIS/6.0
Date: Wed, 29 Apr 2009 10:47:10 GMT

PK??
?   ?   ?   helloworld.txthello worldPK??¶
?   ?   ?       ?         helloworld.txtPK??    ? ? <   7   ? hello world sample
WWWConnect::Close("server.domain.com","80")
closed source port: 1581

Однако я не чувствую, что это много доказывает. Однако он вызывает несколько вопросов:

  1. Каковы все карты mime, которые были настроены на сервере (попросите администратора сервера предоставить файл metabase.xml, и тогда вы сможете убедиться, что он не пропустил какую-либо настройку)
  2. Эти клиенты находятся в сети, которая находится под вашим контролем? Вероятно, нет, мне интересно, какой прокси-сервер может находиться между вашим сервером и клиентами.
  3. Как выглядит журнал IIS для этого запроса, меня особенно интересует заголовок Accept.
  4. Интересно, что покажет fiddler?
person Rihan Meij    schedule 29.04.2009
comment
Если я не ошибаюсь, в iis5 нет metabase.xml. Это двоичный файл, metabase.bin. - person frankadelic; 30.04.2009
comment
Кроме того, запуск tinyget с параметром -headers дает тот же результат, что и с Wireshark: два заголовка Content-Type. - person frankadelic; 30.04.2009

Я столкнулся с подобной проблемой. Я тестировал загрузки в IIS 6 и не мог понять, почему заархивированный файл с именем test.zip отображается как текст в IE8 (в других браузерах, где он загружался, все было в порядке).

Потом я понял, что для теста я сжал очень маленький текстовый файл. Я предполагаю, что IE обнюхал файл, увидел текст (который был в значительной степени несжатым из-за небольшого размера) и решил, что это обычный текст.

Я попробовал еще раз с файлом большего размера, и в IE8 появилось сообщение о загрузке.

Может не иметь отношения к вашему делу, но подумал, что упомяну об этом.

Тим

person Community    schedule 03.08.2009