1. Види заголовків
Заголовки http-запиту – це фактично службова інформація для http-клієнта та http-сервера. Але вона дуже важлива, і якщо ти в них геть не розумієшся, це нерідко виходитиме тобі боком. Тож доведеться про них хоча б почитати.
Усі http-заголовки можна розділити на 4 основні групи:
# | Тип заголовка | Опис | Примітка |
---|---|---|---|
1 | General Headers | Загальні заголовки | Використовуються у запитах та відповідях |
2 | Request Headers | Заголовки запиту | Використовуються лише у запитах |
3 | Response Headers | Заголовки відповіді | Використовуються лише у відповідях |
4 | Entity Headers | Заголовки сутності | Супроводжують кожну сутність повідомлення |
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
У ньому міститься інформація про браузер, операційну систему та вебрушій браузера.
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 | Відеофайл у форматі mpeg |
video/webm | Відеофайл у форматі webm | |
video/3gpp | Відеофайл у форматі 3gpp | |
application | application/x-www-form-urlencoded | Закодовані дані |
application/zip | Архів zip | |
application/javascript | JavaScript | |
application/xml | XML |
Зазвичай сервер знає, які дані він надає. Але якщо ти самостійно генеруєш відповідь сервера своїм кодом, потрібно вказати тип відповіді (Content-Type) твого сервера.
4. Content-Length
Цей заголовок встановлює довжину відповіді сервера. Іншими словами, розмір файлу, що віддається. Вручну цей параметр не потрібно встановлювати. Хоча буває корисно подивитися на те, що віддав сервер, якщо з якихось причин відповідь надійшла не повністю.
5. Accept-Encoding
За допомогою цього заголовка клієнт може сказати серверу, що він підтримує різні алгоритми стиснення контенту. Таким чином, сервер може спочатку заархівувати контент, наприклад, zip-архівом, потім переслати його клієнту, і клієнт зможе правильно відновити оригінальний контент.
Перевага архівації полягає в тому, що чим менше файл, тим швидше він передається. Мінуси архівації – додаткове навантаження на клієнта і на сервер. Архівація доцільна під час передачі великих файлів і найчастіше недоцільна під час передачі маленьких.
Приклад такого заголовка:
Accept-Encoding: deflate, gzip;q=1.0, *;q=0.5
Де deflate
і gzip
– це алгоритми стиснення даних, що підтримуються, а q
позначає ступінь стиснення.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ