← Назад к вопросам

Какие заголовки приходят в ответе на запрос?

2.3 Middle🔥 121 комментариев
#JavaScript Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

HTTP заголовки в ответе сервера

Когда клиент (например, браузер или ваше фронтенд-приложение) отправляет HTTP-запрос на сервер, сервер формирует HTTP-ответ, который состоит из статусной линии, заголовков ответа (Response Headers) и, опционально, тела ответа (Response Body). Заголовки ответа — это метаданные, которые описывают ответ и предоставляют важную информацию для клиента.

Основные категории заголовков ответа

Заголовки ответа можно разделить на несколько ключевых категорий:

1. Общие заголовки (General Headers)

Они могут присутствовать как в запросах, так и в ответах.

  • Connection: Управляет состоянием соединения (например, keep-alive или close).
  • Date: Дата и время формирования ответа.

2. Заголовки ответа (Response Headers)

Специфичны для ответов сервера и содержат информацию о самом ответе и сервере.

  • Server: Информация о программном обеспечении сервера (например, nginx/1.18.0). Часто скрывается в целях безопасности.
  • Accept-Ranges: Указывает, поддерживает сервер диапазоны байтов для частичного получения ресурса (обычно bytes).

3. Заголовки сущности (Entity Headers / Payload Headers)

Описывают тело ответа (контент).

  • Content-Type: Критически важный заголовок, который указывает MIME-тип данных в теле ответа. Браузер использует его для правильной обработки данных. Примеры:
    Content-Type: text/html; charset=utf-8
    Content-Type: application/json
    Content-Type: image/png
    
  • Content-Length: Размер тела ответа в байтах. Важен для контроля передачи данных.
  • Content-Encoding: Указывает метод сжатия, примененный к телу ответа (например, gzip, br). Клиент должен распаковать данные перед использованием.
  • Content-Language: Определяет язык контента (например, ru).

4. Заголовки контроля кэширования (Caching Headers)

Один из самых важных для фронтендера наборов заголовков. Они управляют тем, как клиент и промежуточные прокси должны кэшировать ответ.

  • Cache-Control: Основной механизм управления кэшем. Содержит набор директив.
    Cache-Control: public, max-age=3600  // Кэшировать публично на 1 час
    Cache-Control: no-cache              // Кэшировать, но всегда проверять свежесть с сервером
    Cache-Control: no-store              // Не кэшировать вообще (для чувствительных данных)
    
  • Expires: Устаревшая, но еще используемая дата истечения кэша (используется вместе с или вместо max-age).
  • ETag: Уникальный идентификатор ("entity tag") версии ресурса. Используется для проверки свежести контента (механизм If-None-Match).
  • Last-Modified: Дата последнего изменения ресурса. Используется для проверки свежести (механизм If-Modified-Since).

5. Заголовки безопасности (Security Headers)

Современный фронтенд и безопасность веб-приложений требуют внимания к этим заголовкам.

  • Strict-Transport-Security (HSTS): Приказывает браузеру использовать только HTTPS для этого домена в будущем.
    Strict-Transport-Security: max-age=31536000; includeSubDomains
    
  • Content-Security-Policy (CSP): Важный заголовок для защиты от XSS. Определяет, какие источники ресурсов (скрипты, стили, изображения) разрешены.
    Content-Security-Policy: script-src 'self' https://trusted.cdn.com;
    
  • X-Content-Type-Options: Защита от MIME-sniffing. Значение nosniff предотвращает попытки браузера определить тип контента самостоятельно, если он указан неверно.
  • X-Frame-Options: Защита от clickjacking, определяет, можно ли встраивать страницу в <frame>, <iframe> или <object> (значения: DENY, SAMEORIGIN).

6. Заголовки для CORS (Cross-Origin Resource Sharing)

Если ваш фронтенд-приложение (на одном домене) обращается к API на другом домене, эти заголовки критически важны.

  • Access-Control-Allow-Origin: Определяет, какие источники (домены) могут получать ресурс. Для публичных API может быть *, для конкретных — https://myfrontend.app.
    Access-Control-Allow-Origin: https://myfrontend.app
    
  • Access-Control-Allow-Methods: Список разрешенных HTTP-методов для кросс-доменных запросов (например, GET, POST, PUT).
  • Access-Control-Allow-Headers: Список разрешенных заголовков, которые клиент может отправлять в запросе.
  • Access-Control-Allow-Credentials: Значение true позволяет отправлять кросс-доменные запросы с куками или авторизацией. Работает только с конкретным Access-Control-Allow-Origin, не с *.

Как просмотреть заголовки ответа

Фронтенд-разработчик часто анализирует эти заголовки:

  1. В DevTools браузера (Chrome, Firefox): Сеть (Network) -> Выбрать запрос -> Заголовки ответа (Response Headers).
  2. В терминале, с помощью curl с флагом -I (только заголовки):
    curl -I https://api.example.com/data
    
  3. В JavaScript, после выполнения запроса с помощью fetch или XMLHttpRequest, заголовки ответа доступны в объекте ответа.
    fetch('https://api.example.com/data')
      .then(response => {
        console.log(response.headers.get('Content-Type'));
        console.log(response.headers.get('Cache-Control'));
      });
    

Практическое значение для фронтенд deveлopers

  • Content-Type: application/json — гарантирует, что вы сможете правильно распарсить ответ как JSON (response.json()).
  • Cache-Control — помогает оптимизировать производительность приложения, уменьшая количество запросов.
  • Заголовки CORS — если они настроены неправильно на сервере, ваш фронтенд не сможет получить данные с другого домена, получив ошибку в консоли.
  • Заголовки безопасности — их отсутствие или неправильная конфигурация может сделать ваше приложение vulnerable к распространенным атакам.

Понимание заголовков ответа — это не просто теория HTTP, а обязательная часть практической работы фронтенд-разработчика, влияющая на безопасность, производительность и функциональность веб-приложения.

Какие заголовки приходят в ответе на запрос? | PrepBro