HTTP-сообщения (запросы и ответы) состоят из трех компонентов: стартовой строки (тип запроса или результат ответа), набора заголовков содержащих все требуемые параметры и тела (основного содержимого), причем, блок заголовков должен отделяться пустой строкой от тела.
Заголовки HTTP-сообщения позволяют указать множество дополнительной информации, которую следует знать клиенту и серверу друг о друге и передаваемых данных. HTTP-заголовков много и в этой статье будут рассмотрены только самые популярные.
Классификация HTTP-заголовков
Рассмотренная ниже классификация не единственная.
Общие заголовки
Это HTTP-заголовки, которые применяются и в HTTP-запросах клиентов и в HTTP-ответах серверов. Назначение: передача общих сведений о HTTP-сообщении.
- Cache-Control — настройки кеширования.
- Pragma — используется для обратной совместимости с кешами HTTP/1.0, т.к. заголовок для настройки кеширования (Cache-Control) появился только в HTTP/1.1.
- Warning — содержит предупреждения о возможных проблемах.
- Connection — определяет, остается ли сетевое соединение открытым после завершения текущей транзакции.
- Keep-Alive — позволяет отправителю подсказывать, как можно использовать соединение для установки тайм-аута и максимального количества запросов.
- Content-Disposition — указывает, должен ли передаваемый ресурс отображаться в строке (поведение по умолчанию без заголовка) или если он должен обрабатываться как загрузка, и браузер должен отображать диалоговое окно «Сохранить как».
- Via — добавляется прокси-серверами, как прямым, так и обратным, и может появляться в заголовках запросов и заголовках ответов. Он используется для отслеживания пересылки сообщений, избежания зацикливания запросов и определения возможностей протокола отправителей в цепочке запросов/ответов.
- Date — содержит дату и время, когда сообщение было отправлено.
- Upgrade — позволяет клиенту переходить с HTTP 1.1 на HTTP 2.0, предполагая, что сервер решает подтвердить и реализовать поле заголовка Upgrade.
Заголовки запроса
Это HTTP-заголовки, которые применяются только в HTTP-запросах. Назначение: оповещение сервера о клиенте и о том какая информация/услуги ему нужны.
- Authorization — содержит учетные данные для аутентификации клиента на сервере.
- Proxy-Authorization — cодержит учетные данные для аутентификации клиента на прокси-сервере.
- If-Match — делает запрос условным и применяет метод, только если сохраненный ресурс соответствует одному из заданных ETag.
- If-None-Match — делает запрос условным и применяет метод, только если сохраненный ресурс не соответствует ни одному из указанных ETag.
- If-Modified-Since — делает запрос условным и ожидает, что объект будет передан, только если он был изменен после указанной даты. Это используется для передачи данных только тогда, когда кэш устарел.
- If-Unmodified-Since — делает запрос условным и ожидает, что объект будет передан, только если он не был изменен после указанной даты.
- Accept — информирует сервер о типах данных, которые могут быть отправлены обратно.
- Accept-Charset — содержит список кодировок символов которые понимает клиент. Используя согласование содержимого, сервер выбирает одну из кодировок, использует ее и сообщает клиенту о своем выборе в заголовке ответа «Content-Type», обычно в параметре «charset =…..». Браузеры в большинстве случаев не отправляют этот заголовок, поскольку значение по умолчанию для каждого ресурса, как правило, является правильным.
- Accept-Encoding — сообщает, какую кодировку содержимого, обычно алгоритм сжатия, может понять клиент. Используя согласование содержимого, сервер выбирает одно из предложений, использует его и информирует клиента о своем выборе с помощью заголовка ответа «Content-Encoding».
- Accept-Language — сообщает серверу о человеческом языке, который сервер должен отправить обратно.
- Expect — указывает на ожидания, которые должны быть выполнены сервером для правильной обработки запроса.
- Cookie — содержит сохраненные файлы cookie, ранее отправленные сервером с заголовком «Set-Cookie».
- Access-Control-Request-Headers — используется браузерами при выдаче запроса предварительной проверки, чтобы сообщить серверу, какие HTTP-заголовки клиент может отправить при выполнении фактического запроса.
- Origin — указывает, откуда происходит выборка.
- DNT — выражает предпочтения отслеживания пользователя.
- Forwarded — содержит информацию с клиентской стороны прокси-серверов, которая изменяется или теряется, когда прокси-сервер участвует в пути запроса.
- From — содержит E-mail пользователя, который управляет запросами клиента.
- Host — указывает имя домена сервера (для виртуального хостинга) и (необязательно) номер порта TCP, который прослушивает сервер.
- Referer — адрес предыдущей веб-страницы, с которой следовала ссылка на запрашиваемую в данный момент страницу.
- User-Agent — данные клиента для идентификации (операционная система, производителя/версию ПО и т.д.).
- Range — указывает на часть документа, которую сервер должен вернуть.
- If-Range — создает запрос условного диапазона, который выполняется только в том случае, если данный etag или дата соответствуют удаленному ресурсу.
- Upgrade-Insecure-Requests — отправляет серверу сигнал, выражающий предпочтение клиента для зашифрованного и аутентифицированного ответа, и что он может успешно обрабатывать директиву CSP upgrade-insecure-запросы.
- TE — определяет кодировки (способы сжатия) передачи, которые клиент готов принять.
Заголовки ответа
Это HTTP-заголовки, которые применяются только в HTTP-ответах, например, «Age», «Location», «Server». Назначение: оповещение клиента о сервере и о результате обработки запроса.
- WWW-Authenticate — определяет метод аутентификации, который должен использоваться для доступа к ресурсу.
- Proxy-Authenticate — определяет метод аутентификации, который следует использовать для получения доступа к ресурсу за прокси-сервером.
- Age — количество секунд в течении которых объект находился в прокси-кэше.
- Clear-Site-Data — очищает данные (куки, хранилище, кеш) связанные с запрашивающим веб-сайтом.
- Expires — содержит дату и время после которых ответ считается устаревшим.
- Last-Modified — содержит дату и время последнего изменения запрошенного ресурса (чаще всего этот заголовок применяется для сайтов).
- ETag — содержит идентификатор для конкретной версии ресурса. Используется для повышения эффективности кеширования.
- Vary — определяет, как сопоставить заголовки запроса, чтобы решить, можно ли использовать кэшированный ответ, а не запрашивать новый с исходного сервера.
- Set-Cookie — используется для отправки файлов cookie с сервера клиенту.
- Access-Control-Allow-Origin — указывает, может ли ответ использоваться совместно с запрашивающим кодом из данного источника.
- Access-Control-Allow-Credentials — сообщает браузерам, следует ли предоставлять ответ на код JavaScript внешнего интерфейса, если включен режим учетных данных запроса (Request.credentials).
- Access-Control-Allow-Headers — используется в ответ на запрос предварительной проверки, который включает в себя Access-Control-Request-Headers, чтобы указать, какие заголовки HTTP можно использовать во время фактического запроса.
- Access-Control-Allow-Methods — указывает метод или методы, разрешенные при доступе к ресурсу в ответ на запрос предварительной проверки.
- Access-Control-Expose-Headers — указывает, какие заголовки могут быть представлены как часть ответа путем перечисления их имен.
- Access-Control-Max-Age — указывает, как долго могут кэшироваться результаты предварительного запроса (то есть информации, содержащейся в заголовках Access-Control-Allow-Methods и Access-Control-Allow-Headers).
- Timing-Allow-Origin — указывает источники, которым разрешено просматривать значения атрибутов, извлеченных с помощью функций API Resource Timing, которые в противном случае были бы указаны как ноль из-за ограничений между источниками.
- TK — указывает состояние отслеживания, которое применено к соответствующему запросу.
- Location — указывает URL-адрес для перенаправления (редиректа) страницы.
- Referrer-Policy — определяет, какая информация реферера, отправленная в заголовке Реферера, должна быть включена в сделанные запросы.
- Accept-Ranges — это маркер, используемый сервером для объявления о поддержке частичных запросов.
- Content-Range — указывает, где в сообщении с полным текстом содержится требуемая часть.
- Cross-Origin-Resource-Policy — запрещает другим доменам читать ответ ресурсов, к которым применяется этот заголовок.
- Content-Security-Policy — управляет ресурсами, которые клиент может загрузить для данной страницы.
- Expect-CT — позволяет сайтам принимать участие в отчете и/или обеспечивать соблюдение требований прозрачности сертификатов, что предотвращает использование неизвестных сертификатов для этого сайта незамеченным.
- Feature-Policy — предоставляет механизм, позволяющий и запрещающий использование функций браузера в его собственном фрейме и в содержимом любых элементов <iframe> в документе.
- Public-Key-Pins — связывает определенный криптографический открытый ключ с определенным веб-сервером, чтобы снизить риск атак MITM с поддельными сертификатами.
- Public-Key-Pins-Report-Only — отправляет отчеты о нарушении закрепления в report-uri, указанный в заголовке, но, в отличие от Public-Key-Pins, все еще позволяет браузерам подключаться к серверу, если закрепление нарушено.
- Strict-Transport-Security — позволяет веб-сайту сообщать браузерам, что доступ к нему должен осуществляться только по HTTPS, а не по HTTP.
- X-Content-Type-Options — отключает анализ MIME и заставляет браузер использовать тип, указанный в Content-Type.
- X-Download-Options — указывает, что браузер (Internet Explorer) не должен отображать опцию «Открыть» файл, который был загружен из приложения, чтобы предотвратить фишинговые атаки, поскольку файл иначе получил бы доступ для выполнения в контекст приложения.
- X-Frame-Options — можно использовать, чтобы указать, следует ли разрешить браузеру отображать страницу в <frame>, <iframe>, <embed> или <object>.
- X-Permitted-Cross-Domain-Policies — указывает, разрешен ли файл междоменной политики (crossdomain.xml). Файл может определять политику предоставления клиентам, таким как Adobe Flash Player, Adobe Acrobat, Microsoft Silverlight или Apache Flex, разрешения на обработку данных между доменами, которые в противном случае были бы ограничены из-за политики одного и того же происхождения.
- X-Powered-By — информация о создателях сервера, иногда указывается хостинг-провайдером или другими средами. Обычно, не несет пользы клиенту или серверу.
- X-XSS-Protection — это функция Internet Explorer, Chrome и Safari, которая останавливает загрузку страниц при обнаружении отраженных атак межсайтового скриптинга (XSS).
- Transfer-Encoding — указывает форму кодирования, используемую для безопасной передачи тела полезной нагрузки пользователю.
- Trailer — позволяет отправителю включать дополнительные поля в конце фрагментированных сообщений, чтобы предоставлять метаданные, которые могут генерироваться динамически во время отправки тела сообщения, например, проверка целостности сообщения, цифровая подпись или статус постобработки.
- Alt-Svc — определяет, что, когда у источника есть ресурсы, которые доступны через другую комбинацию протокола / хоста / порта, говорят, что у него есть доступная альтернативная служба.
- Large-Allocation — сообщает браузеру, что загружаемая страница захочет выполнить большое выделение.
- Retry-After — показывает, как долго пользовательский агент должен ждать перед выполнением последующего запроса.
- Server-Timing — сообщает одну или несколько метрик и описаний для данного цикла запрос-ответ.
- SourceMap — связывает сгенерированный код с исходной картой, позволяя браузеру восстановить исходный источник и представить восстановленный оригинал в отладчике.
- X-DNS-Prefetch-Control — Управляет предварительной выборкой DNS — функцией, с помощью которой браузеры проактивно выполняют разрешение имен доменов для обеих ссылок, по которым пользователь может выбрать переход, а также для URL-адресов элементов, на которые ссылается документ, включая изображения, CSS, JavaScript и т. д.
Заголовки тела
Это HTTP-заголовки, которые применяются и в HTTP-запросах клиентов и в HTTP-ответах серверов. Назначение: информация о содержимом тела HTTP-сообщения.
- Content-Length — размер ресурса выраженный в байтах.
- Content-Type — указывает тип ресурсов.
- Content-Encoding — используется для указания алгоритма сжатия.
- Content-Language — используется для указания языка (языков), предназначенного для аудитории.
- Content-Location — указывает альтернативное местоположение для возвращаемых данных.
- Link — обеспечивает возможность сериализации одной или нескольких ссылок в заголовках HTTP.
До июня 2012 года все заголовки с префиксом «X-» считались пользовательскими (нестандартными), т.е. выдуманными конкретными разработчиками для собственных нужд (так делал и я, да и сейчас делаю 🙂 ). Но теперь это «правило» упразднили.
Полезные ссылки
- Реестр заголовков и статусов IANA — iana.org/assignments/message-headers/message-headers.xhtml
- Документация от Mozilla по заголовкам — https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
- HTTP-заголовки для отечественного разработчика (хабр)
- Документация от Mozilla — developer.mozilla.org/ru/docs/Web/HTTP/Messages
- Заголовки HTTP (Википедия)
- Список заголовков HTTP (Википедия)
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.