6.1 Виды заголовков
Заголовки http-запроса – это фактически служебная информация для http-клиента и http-сервера. Но она очень важна, и, если ты в них совершенно не разбираешься, это частенько будет выходить тебе боком. Так что придется про них хотя бы почитать.
Все http-заголовки можно разделить на 4 основные группы:
# | Тип заголовка | Описание | Примечание |
---|---|---|---|
1 | General Headers | Общие заголовки | Используются в запросах и ответах |
2 | Request Headers | Заголовки запроса | Используются только в запросах |
3 | Response Headers | Заголовки ответа | Используются только в ответах |
4 | Entity Headers | Заголовки сущности | Сопровождают каждую сущность сообщения |
6.2 User-Agent
Самый важный и популярный заголовок – это User-Agent. Это специальная строка, которая описывает, какой клиент выполняет запрос на сервер. Такое себе имя клиента.
Часто сервер немного подстраивает свой ответ под запрашивающего. Например, если из запроса ясно, что запрос пришел из браузера мобильного телефона, то ему можно отдать мобильную версию HTML-страницы.
Спам-боты, менеджеры закачек и некоторые браузеры нередко шлют подложные User-Agent-строки, чтобы выдать себя за порядочных клиентов. Эта ситуация известна, как подмена или подделка пользовательского агента (user agent spoofing).
Например, мой User-Agent выглядит сейчас так:
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0
В нем содержится информация о браузере, операционной системе и web-движке браузера.
6.3 Content-Type
Второй по популярности заголовок – это Content-Type. Он используется для того, чтобы определить MIME тип ресурса, который отдает сервер.
Еще на заре интернета для удобства были стандартизированы типы передаваемого медиа контента. Их называют Internet Media Types или сокращенно MimeTypes. Они делятся на 9 категорий:
- application
- audio
- example
- image
- message
- model
- multipart
- text
- video
Примеры:
Категория | Тип | Описание |
---|---|---|
audio | audio/mp4 | Аудио-файл в формате mp4 |
audio/aac | Аудио-файл в формате AAC | |
image | image/gif | Картинка gif |
image/jpeg | Картинка jpeg | |
image/png | Картинка png | |
text | text/css | CSS-файл |
text/html | HTML-файл | |
video | video/mpeg | Video-файл в формате mpeg |
video/webm | Video-файл в формате webm | |
video/3gpp | Video-файл в формате 3gpp | |
application | application/x-www-form-urlencoded | Закодированные данные |
application/zip | Архив zip | |
application/javascript | JavaScript | |
application/xml | XML |
Обычно сервер знает, какие данные он отдает. Но если ты самостоятельно генерируешь ответ сервера своим кодом, то тебе нужно указать тип ответа (Content-Type) твоего сервера.
6.4 Content-Length
Этот заголовок задает длину ответа сервера. Если по-простому, то размер отдаваемого файла. Вручную этот параметр устанавливать не нужно. Хотя бывает полезно посмотреть на то, что отдал сервер, если по каким-то причинам ответ пришел не весь.
6.5 Accept-Encoding
С помощью этого заголовка клиент может указать серверу, что он поддерживает различные алгоритмы сжатия контента. Таким образом сервер может сначала заархивировать контент, например, zip-архивом, затем переслать его клиенту и клиент сможет правильно восстановить оригинальный контент.
Преимущество архивации состоит в том, что чем меньше файл, тем быстрее передается. Минусы архивации – дополнительная нагрузка на клиент и на сервер. Архивация имеет смысл при передаче больших файлов и часто не имеет смысла при передаче маленьких.
Пример такого заголовка:
Accept-Encoding: deflate, gzip;q=1.0, *;q=0.5
Где deflate
и gzip
– это поддерживаемые алгоритмы сжатия данных, а q
обозначает степень сжатия.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ