
Глава 7. HTTP/1.1 291
206 Partial Content. Кэши, которые не поддерживают заголовки Range, не
должны кэшировать ответ 206 Partial Content. Такое предупреждение — пример
ограничений накладываемых на реализации, которые не поддерживают новое свой-
ство,
но легко могут получать ответы с кодами состояний, связанными с новым
свойством. Спецификация протокола включает много таких ограничений, но реа-
лизации не всегда проходят проверку на соответствие этим ограничениям, что при-
водит к потенциальным проблемам. Так изменение протокола оказывает воздейст-
вие на реализации серверов и клиентов, которые этим изменением не затронуты.
КОДЫ ОТВЕТОВ ЗХХ
Четырьмя НОВЫМИ кодами ответов в HTTP/1.1 являются 303 See Other, 305
Use Proxy, 306 (Unused) и 307 Temporary Redirect. Коды ответов 303 и 307 были
введены для того, чтобы Web-компоненты могли определять нужное действие бо-
лее точно. Код ответа 305 был введен в промежуточной (не принятой в качестве
стандарта) спецификации RFC 2068. Код ответа 306 был предложен в промежуточ-
ной версии проекта спецификации протокола, но был удален в процессе стандарти-
зации протокола.
303 See Other. Ответ НТТР/1.0 302 Moved Temporarily включал заголовок
Location, указывая агенту пользователя, где действительно может находиться дан-
ный ресурс. Ответ 303 See Other похож на код состояния 302 Moved Temporarily,
но был добавлен специально, чтобы исправить известную проблему с агентами
пользователя, которые некорректно обрабатывали ответ 302. Это один из примеров
эволюции протокола после обнаружения ошибок в существующих реализациях.
307 Temporary Redirect Код ответа 307 Temporary Redirect информирует агента
пользователя, что данный ресурс может временно находиться по новому URI, внесен-
ному в заголовок ответа Location. При наличии ответа переадресации некоторые аген-
ты пользователя ошибочно используют метод запроса GET, чтобы извлечь ресурс по
новому URI, независимо от того, какой метод использовался в исходном запросе. И
это несмотря на тот факт, что и в RFC 1945, и в одной из промежуточных специфика-
ций НТТР/1.1 (RFC 2068) говорится ясно, что при переадресации методы запросов
не должны изменяться. Переадресация используется в условиях наличия «зеркал»
Web-серверов, из-за чего запрос клиента может быть переадресован ближайшей
к клиенту «зеркалу». Это снижает нагрузку на отдельный сервер.
305 Use Proxy. Код ответа 305 Use Proxy сообщает запрашивающему компо-
ненту, что запрос надо повторить через указанный прокси-сервер, заданный в заго-
ловке ответа Location. Этот код был первоначально введен, чтобы дать возмож-
ность Web-серверу запрещать доступ для всех запросов кроме тех, которые посту-
пают от соответствующего прокси-сервера. Смысл такого решения был в том,
чтобы снизить нагрузку на Web-сервер и расположить его так, чтобы он мог указы-
вать каким прокси-сервером должен пользоваться конкретный клиент. Кроме того,
промежуточная спецификация RFC 2068 была недостаточно четкой в том, что ка-
сается использования кода ответа 305, и создала возможность появления дыры
в системе безопасности. Только один запрос может быть переадресован посредст-
вом ответа 305 и такая переадресация может быть сделана только самим Web-сер-
вером. Если это не так, то существует вероятность наличия атаки типа промежу-
точного компонента (man-in-the-middle). В этом случае некий промежуточный
компонент переадресует запросы на «вражеский» прокси-сервер.