Поля заголовка HTTP представляют собой список строк , отправленных и полученных как клиентской программой, так и сервером при каждом запросе и ответе HTTP. Эти заголовки обычно невидимы для конечного пользователя и обрабатываются или регистрируются только сервером и клиентскими приложениями. Они определяют, как кодируется информация, отправленная/полученная через соединение (как в Content-Encoding ), проверку сеанса и идентификацию клиента (как в cookie-файлах браузера , IP-адресе, user-agent ) или их анонимность (маскировка VPN или прокси, подмена user-agent ), как сервер должен обрабатывать данные (как в Do-Not-Track ), возраст (время, в течение которого он находился в общем кэше ) загружаемого документа и т. д.
Общий формат
В HTTP версии 1.x поля заголовка передаются после строки запроса (в случае HTTP-сообщения запроса) или строки ответа (в случае HTTP-сообщения ответа), которая является первой строкой сообщения. Поля заголовка представляют собой пары ключ-значение, разделенные двоеточием, в формате строки открытого текста , завершающиеся последовательностью символов возврата каретки (CR) и перевода строки (LF). Конец раздела заголовка обозначается пустой строкой поля, что приводит к передаче двух последовательных пар CR-LF. В прошлом длинные строки могли быть свернуты в несколько строк; строки продолжения обозначаются наличием пробела (SP) или горизонтальной табуляции (HT) в качестве первого символа на следующей строке. Такое сворачивание было объявлено устаревшим в RFC 7230. [1]
HTTP/2 [2] и HTTP/3 вместо этого используют двоичный протокол , где заголовки кодируются в один HEADERS
и ноль или более CONTINUATION
кадров с использованием HPACK [3] (HTTP/2) или QPACK (HTTP/3), которые оба обеспечивают эффективное сжатие заголовков. Строка запроса или ответа из HTTP/1 также была заменена несколькими полями псевдозаголовка, каждое из которых начинается с двоеточия ( :
).
Названия полей
Основной набор полей стандартизирован Инженерной группой Интернета (IETF) в RFC 9110 и 9111. Имена полей, поля заголовков и репозиторий временных регистраций поддерживаются IANA . Дополнительные имена полей и допустимые значения могут быть определены каждым приложением.
Имена полей заголовка нечувствительны к регистру. [4] Это контрастирует с именами методов HTTP (GET, POST и т. д.), которые чувствительны к регистру. [5]
HTTP/2 накладывает некоторые ограничения на определенные поля заголовка (см. ниже).
Нестандартные поля заголовка традиционно помечались префиксом имени поля, X-
но эта традиция была отменена в июне 2012 года из-за неудобств, которые она вызывала, когда нестандартные поля стали стандартными. [6] Прежнее ограничение на использование Downgraded-
было снято в марте 2013 года. [7]
Значения полей
Некоторые поля могут содержать комментарии (например, в полях User-Agent, Server, Via), которые могут игнорироваться программным обеспечением. [8]
Многие значения полей могут содержать пару ключ-значение качества ( q ), разделенную знаком равенства , указывающую вес, который следует использовать при согласовании контента . [9] Например, браузер может указать, что он принимает информацию на немецком или английском языке, причем немецкий язык является предпочтительным, установив значение qde
выше, чем у en
, следующим образом:
Accept-Language: de; q=1.0, en; q=0.5
Ограничения по размеру
Стандарт не накладывает ограничений на размер имени или значения каждого поля заголовка или на количество полей. Однако большинство серверов, клиентов и прокси-программ накладывают некоторые ограничения по практическим и безопасным причинам. Например, сервер Apache 2.3 по умолчанию ограничивает размер каждого поля 8190 байтами, и в одном запросе может быть не более 100 полей заголовка. [10]
Запросить поля
Стандартные поля запроса
Распространенные нестандартные поля запроса
Поля ответа
Стандартные поля ответа
Распространенные нестандартные поля ответа
Эффекты выбранных полей
Избегание кэширования
Если веб-сервер отвечает , Cache-Control: no-cache
то веб-браузер или другая система кэширования (промежуточные прокси) не должны использовать ответ для удовлетворения последующих запросов без предварительной проверки с исходным сервером (этот процесс называется проверкой). Это поле заголовка является частью HTTP версии 1.1 и игнорируется некоторыми кэшами и браузерами. Его можно смоделировать, установив Expires
значение поля заголовка HTTP версии 1.0 на время, более раннее времени ответа. Обратите внимание, что no-cache не указывает браузеру или прокси-серверам, следует ли кэшировать содержимое. Он просто указывает браузеру и прокси-серверам проверять содержимое кэша на сервере перед его использованием (это делается с помощью атрибутов If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match, упомянутых выше). Таким образом, отправка значения no-cache указывает браузеру или прокси-серверу не использовать содержимое кэша, основываясь только на «критериях свежести» содержимого кэша. Другой распространенный способ предотвратить показ пользователю старого содержимого без проверки — Cache-Control: max-age=0
. Это сообщает пользовательскому агенту, что контент устарел и его следует проверить перед использованием.
Поле заголовка Cache-Control: no-store
предназначено для того, чтобы дать указание приложению браузера приложить все усилия, чтобы не записывать данные на диск (т. е. не кэшировать их).
Запрос на то, что ресурс не должен кэшироваться, не гарантирует, что он не будет записан на диск. В частности, определение HTTP/1.1 проводит различие между хранилищами истории и кэшами. Если пользователь возвращается на предыдущую страницу, браузер все равно может показать вам страницу, которая была сохранена на диске в хранилище истории. Это правильное поведение согласно спецификации. Многие пользовательские агенты демонстрируют разное поведение при загрузке страниц из хранилища истории или кэша в зависимости от того, является ли протокол HTTP или HTTPS.
Поле заголовка HTTP Cache-Control: no-cache
/1.1 также предназначено для использования в запросах, сделанных клиентом. Это средство для браузера сообщить серверу и любым промежуточным кэшам, что он хочет свежую версию ресурса. Поле Pragma: no-cache
заголовка, определенное в спецификации HTTP/1.0, имеет ту же цель. Однако оно определено только для заголовка запроса. Его значение в заголовке ответа не указано. [77] Поведение Pragma: no-cache
в ответе зависит от реализации. Хотя некоторые пользовательские агенты обращают внимание на это поле в ответах, [78] HTTP/1.1 RFC специально предостерегает от использования такого поведения.
Смотрите также
Ссылки
- ^ "Разбор полей". Протокол передачи гипертекста (HTTP/1.1): Синтаксис и маршрутизация сообщений. Июнь 2014 г., раздел 3.2.4. doi : 10.17487/RFC7230 . RFC 7230.
- ^ HTTP/2. Июнь 2022 г. doi : 10.17487/RFC9113 . RFC 9113.
- ^ Peon, R.; Ruellan, H. (май 2015 г.). "HPACK: Сжатие заголовков для HTTP/2". IETF . doi :10.17487/RFC7541 . Получено 13 декабря 2021 г. .
- ^ "Имена полей". HTTP Semantics. Июнь 2022. раздел 5.1. doi : 10.17487/RFC9110 . RFC 9110.
- ^ "Методы: Обзор". HTTP Semantics. Июнь 2022. раздел 9.1. doi : 10.17487/RFC9110 . RFC 9110.
- ↑ Internet Engineering Task Force (1 июня 2012 г.). "RFC 6648". doi :10.17487/RFC6648 . Получено 12 ноября 2012 г.
- ^ "Заголовки сообщений". Iana.org. 11 июня 2014 г. Получено 12 июня 2014 г.
- ^ "Комментарии". HTTP Semantics. Июнь 2022. раздел 5.6.5. doi : 10.17487/RFC9110 . RFC 9110.
- ^ «Значения качества». HTTP Semantics. Июнь 2022. раздел 12.4.2. doi : 10.17487/RFC9110 . RFC 9110.
- ^ "core - Apache HTTP Server". Httpd.apache.org. Архивировано из оригинала 9 мая 2012 г. Получено 13 марта 2012 г.
- ^ abc RFC 3229. doi : 10.17487/RFC3229 .
- ^ abc "Cross-Origin Resource Sharing" . Получено 24 июля 2017 г. .
- ^ ab "Заголовок соединения". HTTP Semantics. Июнь 2022. раздел 7.6.1. doi : 10.17487/RFC9110 . RFC 9110.
- ^ abcdefgh «Поля заголовка, специфичные для соединения». HTTP/2. Июнь 2022 г. раздел 8.2.2. doi : 10.17487/RFC9113 . RFC 9113.
- ^ ab "Изменения по сравнению с RFC 2616". Протокол передачи гипертекста (HTTP/1.1): семантика и содержимое. Июнь 2014 г. раздел B. doi : 10.17487/RFC7231 . RFC 7231.
- ^
- ^ "Хост и :authority". HTTP Semantics. Июнь 2022. раздел 7.2. doi : 10.17487/RFC9110 . RFC 9110.
- ^ "Заголовки сообщений". www.iana.org . Получено 26 ноября 2018 г. .
- ^ "HTTP2-Settings Header Field". Протокол передачи гипертекста версии 2 (HTTP/2). раздел 3.2.1. doi : 10.17487/RFC7540 . RFC 7540.
- ^ ab "Заголовок предупреждения". HTTP-кэширование. Июнь 2022 г. раздел 5.5. doi : 10.17487/RFC9111 . RFC 9111.
- ^ "Upgrade Insecure Requests - W3C Candidate Recommendation". W3C . 8 октября 2015 г. Получено 14 января 2016 г.
- ^ «Заголовок «X-Requested-With» – Стаутнер».
- ^ "Попробуйте HTTP-заголовок "Do Not Track"" . Получено 31 января 2011 г.
- ^ "Защита от веб-отслеживания: минимальные стандарты и возможности для инноваций" . Получено 24 марта 2011 г.
- ^ IETF Do Not Track: Универсальный отказ от стороннего веб-отслеживания 7 марта 2011 г.
- ^ Выражение предпочтения отслеживания W3C (DNT), 26 января 2012 г.
- ↑ Амос Джеффрис (2 июля 2010 г.). "SquidFaq/ConfiguringSquid - Squid Web Proxy Wiki" . Получено 10 сентября 2009 г.
- ^ Apache Software Foundation. "mod_proxy - Apache HTTP Server Version 2.2" . Получено 12 ноября 2014 г.
- ↑ Дэйв Стейнберг (10 апреля 2007 г.). «Как настроить мой сайт SSL для работы с балансировщиком нагрузки GeekISP?» . Получено 30 сентября 2010 г.
- ^ «Помощь в обеспечении безопасной связи: клиент-сервер». 27 июля 2006 г. Получено 23 апреля 2012 г.
- ^ "Спецификация сервера API OpenSocial Core 2.5.1" . Получено 8 октября 2014 г. .
- ^ "ATT Device ID". Архивировано из оригинала 16 февраля 2012 г. Получено 14 января 2012 г.
- ^ "WAP Profile" . Получено 14 января 2012 г. .
- ^ de Boyne Pollard, Jonathan (2007). "Заголовок Proxy-Connection: является ошибкой в том, как некоторые веб-браузеры используют HTTP" . Получено 16 января 2018 г.
- ^ "Verizon внедряет постоянные файлы cookie для отслеживания мобильных клиентов, обходя средства контроля конфиденциальности". Electronic Frontier Foundation . Получено 19 января 2014 г.
- ^ "Проверка известных маяков уникального идентификатора AT&T, Verizon, Sprint, Bell Canada и Vodacom" . Получено 19 января 2014 г. .
- ^ Крейг Тимберг. «Verizon, AT&T отслеживают своих пользователей с помощью «суперкуки». The Washington Post . Получено 19 января 2014 г.
- ^ "Защита от подделки межсайтовых запросов SAP". SAP SE . Получено 20 января 2015 г.
- ^ "Защита от подделки межсайтовых запросов Django". Django (веб-фреймворк) . Архивировано из оригинала 20 января 2015 г. Получено 20 января 2015 г.
- ^ "Защита от подделки межсайтовых запросов (XSRF) Angular". AngularJS . Получено 20 января 2015 г. .
- ^ "HTTP Request IDs". devcenter.heroku.com . Получено 22 марта 2022 г. .
- ^ "Значение идентификаторов корреляции". Блог Rapid7 . 23 декабря 2016 г. Получено 13 апреля 2018 г.
- ^ Хилтон, Питер (12 июля 2017 г.). "Идентификаторы корреляции для архитектур микросервисов - Питер Хилтон". hilton.org.uk . Получено 13 апреля 2018 г. .
- ^ "W3C Trace Context". w3c.org . Получено 19 июня 2024 г. .
- ^ "Save Data API Living Document Draft Community Group Report 2.1.1. Save-Data Request Header Field". Web Platform Incubator Community Group . 30 июня 2020 г. Получено 5 марта 2021 г.
- ^ Участники MDN (3 марта 2023 г.). "Sec-GPC". MDN Web Docs . Получено 12 марта 2023 г.
- ^ Dusseault, L.; Snell, J. (2010). "RFC 5789". doi :10.17487/RFC5789. S2CID 42062521 . Получено 24 декабря 2014 г. .
- ^ Ноттингем, М.; Макманус, П.; Решке, Дж. (апрель 2016 г.). «Альтернативные службы HTTP». IETF. doi : 10.17487/RFC7838 . Получено 19 апреля 2016 г.
- ^ Ноттингем, М.; Макманус, П.; Решке, Дж. (апрель 2016 г.). «Альтернативные службы HTTP, раздел 3». IETF. doi : 10.17487/RFC7838 . Получено 8 июня 2017 г.
- ^ Решке, Дж. (2011). «RFC 6266». дои : 10.17487/RFC6266 . Проверено 13 марта 2015 г.
- ^ "Content-Language". HTTP Semantics. Июнь 2022. раздел 8.5. doi : 10.17487/RFC9110 . RFC 9110.
- ^ Укажите каноническую версию URL, ответив HTTP-заголовком Link rel="canonical" Получено: 2012-02-09
- ^ Работа W3C P3P приостановлена
- ^ "Расширение закрепления открытого ключа для HTTP". IETF . Получено 17 апреля 2015 г.
- ^ "Retry-After". Семантика HTTP. Июнь 2022 г. раздел 10.2.3. doi : 10.17487/RFC9110 . RFC 9110.
- ^ Росс, Д.; Гондром, Т. (2013). "HTTP Header Field X-Frame-Options". IETF. doi : 10.17487/RFC7034 . Получено 12 июня 2014 г.
- ^ "Политика безопасности контента, уровень 2" . Получено 2 августа 2014 г.
- ^ «Политика безопасности контента». W3C. 2012. Получено 28 апреля 2017 г.
- ^ "Expect-CT". Mozilla Developer Network . Получено 23 июля 2021 г.
- ^ "NEL". Mozilla Developer Network . 2021. Получено 18 мая 2021 г.
- ^ «Политика разрешений». W3C. 2020. Получено 1 мая 2021 г.
- ^ "Am I FLoCed?". EFF. 2021. Получено 1 мая 2021 г.
- ^ "Определение заголовка HTTP Refresh от annevk · Pull Request #2892 · whatwg/html". GitHub . 9 августа 2017 г. . Получено 17 апреля 2021 г. .
- ^ "CSP: report-to". Mozilla Developer Network . 2021. Получено 18 мая 2021 г.
- ^ RFC 9110: Семантика HTTP
- ^ "Timing-Allow-Origin". Mozilla Developer Network . Получено 25 января 2018 г.
- ^ "Настройка серверов для Ogg media". 26 мая 2014 г. Получено 3 января 2015 г.
- ^ «Очистите отслеживание длительности и используйте зеркалирование для доступа между потоками». Bugzilla@Mozilla . Получено 9 февраля 2024 г.
- ^ Эрик Лоуренс (3 сентября 2008 г.). "IE8 Security Part VI: Beta 2 Update" . Получено 28 сентября 2010 г.
- ^ "Хостинг - Расширения Google Chrome - Google Code" . Получено 14 июня 2012 г. .
- ^ van Kesteren, Anne (26 августа 2016 г.). "Fetch standard". WHATWG . Архивировано из оригинала 26 августа 2016 г. Получено 26 августа 2016 г.
- ^ "Заголовок ответа HTTP X-Redirect-By" . Получено 29 мая 2021 г. .
- ^ «Определение совместимости документов: указание режимов совместимости документов». 1 апреля 2011 г. Получено 24 января 2012 г.
- ^ "HTML Living Standard 4.2.5.3 Pragma directives, X-UA-Compatible state". WHATWG . 12 марта 2021 г. . Получено 14 марта 2021 г. Для
элементов meta с атрибутом http-equiv в состоянии X-UA-Compatible атрибут content должен иметь значение, которое является нечувствительным к регистру ASCII соответствием для строки
.
"IE=edge"
- ↑ Эрик Лоуренс (2 июля 2008 г.). "IE8 Security Part IV: The XSS Filter" . Получено 30 сентября 2010 г. .
- ^ "Pragme". HTTP-кэширование. Июнь 2022 г. раздел 5.4. doi : 10.17487/RFC9111 . RFC 9111.
- ^ "Как предотвратить кэширование в Internet Explorer". Microsoft . 22 сентября 2011 г. Получено 15 апреля 2015 г.
На момент редактирования эта статья использует контент из статьи "Что такое заголовок X-REQUEST-ID http?" , автором которой является Стефан Кёгль на Stack Exchange, лицензированной таким образом, что допускается повторное использование по лицензии Creative Commons Attribution-ShareAlike 3.0 Unported License , но не по лицензии GFDL . Необходимо соблюдать все соответствующие условия.
- ^ ab "Что такое http-заголовок X-REQUEST-ID?" . Получено 20 марта 2022 г. .
На момент редактирования в этой статье используется контент из статьи «Почему фреймворк ASP.NET добавляет заголовок HTTP „X-Powered-By:ASP.NET“ в ответы?» , автором которой является Адриан Григоре из Stack Exchange, лицензированной таким образом, что допускается повторное использование в соответствии с лицензией Creative Commons Attribution-ShareAlike 3.0 Unported License , но не в соответствии с GFDL . Необходимо соблюдать все соответствующие условия.
- ^ «Почему фреймворк ASP.NET добавляет HTTP-заголовок «X-Powered-By:ASP.NET» в ответы? - Stack Overflow» . Получено 20 марта 2022 г.
Внешние ссылки
- Заголовки: Имена полей постоянного заголовка сообщения
- RFC 6265: Механизм управления состоянием HTTP IETF
- RFC 9110: Семантика HTTP
- RFC 9111: HTTP-кэширование
- RFC 9112: HTTP/1.1
- RFC 9113: HTTP/2
- RFC 9114: HTTP/3
- RFC 7239: Перенаправленное расширение HTTP
- RFC 7240: Предпочитать заголовок для HTTP
- Заголовки HTTP/1.1 с точки зрения веб-сервера
- Internet Explorer и пользовательские заголовки HTTP - EricLaw's IEInternals - Главная страница сайта - Блоги MSDN