Задать вопрос

Баг IIS 7.0, проверка?

Наткнулся на багу IIS 7.0. При следующем корректном коде php IIS неправильно обрабатывает ответ (изменяя его), в результате чего в браузер отдается невалидный контент.


Пример php файла:
<?php
  header('Location: http://ya.ru');
  header('Content-Length: 0');
?>



При запросе в telnet мы увидим следующий ответ:
HTTP/1.1 302 Moved Temporarily
Location: http://ya.ru
Content-Length: 0
Server: Microsoft-IIS/7.0

<head><title>Документ перемещен</title></head>
<body><h1>Объект перемещен</h1>Документ теперь находится <a HREF="http://ya.ru">здесь</a></body>



Т.е. IIS дописал свой ответ не модифицировав при этот заголовок Content-Length.


Не снится ли мне это?

Есть желающие протестировать это поведение на аналогичной и более свежих версиях IIS?

Подскажите, куда можно зарепортить?
  • Вопрос задан
  • 3936 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@Amnet
О возможном баге в продуктах Microsoft можно сообщить здесь: connect.microsoft.com

К сожалению, ничего не могу подсказать по самой проблеме, так как не ориентируюсь в предмете.
Ответ написан
Комментировать
shai_hulud
@shai_hulud
Почти все рерайты ответов и звпросов в IIS делаются модулями. Советую заглянуть в Modules веб-узла и отключить всё что не относится к fast-cgi.
И еще, он перезаписывает тело по статус коду(302), и скорее всего не заполняет content-length и соответственно не перезаписывает ваш.
Ответ написан
MTonly
@MTonly
Веб-разработчик с 2002 года
Попробуйте в секцию configuration → system.webServer в файле web.config в корне публичной директории сайта добавить директиву httpErrors с атрибутом existingResponse="PassThrough", запрещающим вывод собственной страницы веб-сервера в зависимости от HTTP-статуса и предписывающей выводить ответ как есть:

<httpErrors existingResponse="PassThrough" />
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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