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 позначає ступінь стиснення.