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

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

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

Первоначально мы подозревали, что в файле установлен неправильный заголовок типа содержимого. Специалист IIS подтвердил, что файлы .zip обслуживаются IIS с помощью mime-типа application / x-zip-compress.

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

  • Content-Type: text / html; кодировка = UTF-8
  • Content-Type: применение / х-молния сжатый * * 1016

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

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

Ответы [ 6 ]

0 голосов
/ 03 августа 2009

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

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

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

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

Тим

0 голосов
/ 29 апреля 2009

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

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

Я установил заголовок для zip-файлов на сайте в application / x-zip-compress, а для файла, который у меня есть explicity, установил его на

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. Интересно, что скрипач покажет?
0 голосов
/ 29 апреля 2009

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

0 голосов
/ 25 апреля 2009

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

0 голосов
/ 24 апреля 2009

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

0 голосов
/ 24 апреля 2009

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

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

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

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

...