Впервые за 15 лет обновлёна спецификация протокола HTTP/1.1

Инженерный комитет IETF (Internet Engineering Task Force), занимающегося развитием протоколов и архитектуры сети Интернет, признал устаревшим выпущенный в 1999 году RFC 2616, определяющий протокол HTTP/1.1. Аналогичная судьба постигла RFC 2617, определяющий механизмы аутентификации HTTP. Для описания HTTP/1.1 представлена серия новых RFC, учитывающих современные реалии (например, в 1999 году не предполагалось внебраузерное применение HTTP (HTTP API), появление AJAX и методов HTML5): RFC 7230: Message Syntax and Routing RFC 7231: Semantics and Content RFC 7232: Conditional Requests RFC 7233: Range Request RFC 7234: Caching RFC 7235: Authentication RFC 7236: Authentication Scheme Registrations RFC 7237: Method Registrations RFC 7238: the 308 status code RFC 7239: Forwarded HTTP extension На подготовку обновления спецификации HTTP/1.1 ушло семь лет, было выпущено 26 предварительных черновиков, внесено более 2600 изменений, устранено 550 недоработок. Обновления были разработаны участниками группы HTTPBis, также ответственной за создание стандарта HTTP/2.0. Разделение спецификации на группу отдельных RFC произведено с целью оптимизации будущей спецификации HTTP/2.0, в которой теперь можно сослаться на типовые не изменившиеся технологии, вместо их переопределения. При этом, по отдельности документы более компактны, в то время как старый RFС состоял из 176 страниц. Описание элементов HTTP/1.1 значительно упрощено для восприятия и детализировано. Из текста исключены двусмысленные формулировки, которые могли трактоваться по разному.

Из нововведений можно выделить:

Стандартизован 308 код статуса выполнения запроса, определяющий механизм постоянного перенаправления (permanent redirect). В отличие от кода 301 (Moved Permanently), при получении кода 308 клиенту запрещается менять текущий метод запроса (при 301 метод обычно менялся на GET); Приведена к устоявшейся практике логика реакции на коды статуса 301 и 302, которая теперь подразумевает смену метода с POST на GET; Стандартизован заголовок Forwarded для сохранения IP-адреса оригинального запроса после проброса соединения через прокси или балансировщик нагрузки. Forwarded пришёл на замену таким заголовкам, как X-Forwarded-For и X-Forwarded-Proto; Явно определено поведение при наличии непредусмотренных символов пробела и запрещено разбиение содержимого заголовков на несколько строк, что должно исключить появление уязвимостей, манипулирующих разделением запроса; Снято ограничение на два одновременных соединения к серверу; Прекращена поддержка HTTP/0.9; Удалено требование к использованию ISO-8859–1 как кодировки по умолчанию; Снято требование по обязательной обработке всех полей заголовков Content-*; Запрещено использование Content-Range в PUT-запросах; В качестве значения Referer при открытии страницы с нуля рекомендовано использовать «about: blank», что позволит отделить запросы без перехода от запросов с запрещённым Referer; Определена допустимость кэширования для кодов 204, 404, 405, 414 и 501; Содержимое заголовка Location теперь может задаваться относительно текущего URI; Удалена поддержка заголовка Content-MD5.

©  OpenNet