Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Node.js: ETag, If-Match, HTTP caching, conditional requests, concurrency control

Что такое заголовки ETag и If-Match и для каких задач они применяются?

Вопрос проверяет понимание механизмов HTTP-кеширования и условных запросов для оптимизации работы веб-приложений.

Короткий ответ

ETag (Entity Tag) — это HTTP-заголовок, который содержит уникальный идентификатор версии ресурса. If-Match — условный заголовок, который отправляет серверу ETag для проверки, изменился ли ресурс. Они используются для кеширования (чтобы не загружать данные повторно) и для предотвращения конфликтов при одновременном редактировании (например, в REST API).

Длинный ответ

Что такое ETag и If-Match?

ETag (Entity Tag) — это HTTP-заголовок ответа, который содержит уникальный идентификатор (обычно хеш) текущей версии ресурса. Когда клиент получает ответ с ETag, он может сохранить его и использовать в последующих запросах через заголовок If-Match. If-Match — это условный заголовок запроса, который содержит ETag, полученный ранее. Сервер сравнивает переданный ETag с текущим значением ресурса. Если они совпадают, сервер выполняет запрос (например, обновляет данные). Если нет — возвращает ошибку 412 Precondition Failed.

Применение

  • Кеширование: Клиент может отправить запрос с If-None-Match (аналог If-Match для GET) и ETag. Если ресурс не изменился, сервер возвращает 304 Not Modified, экономя трафик.
  • Контроль конкурентного доступа: При обновлении ресурса (PUT/PATCH) клиент передает If-Match с ETag. Если другой клиент уже изменил ресурс, ETag не совпадет, и сервер отклонит запрос, предотвращая потерю данных.

Пример кода

// Пример на JavaScript (fetch) с ETag и If-Match
async function updateResource(id, newData, etag) {
  const response = await fetch(`/api/resource/${id}`, {
    method: 'PUT',
    headers: {
      'Content-Type': 'application/json',
      'If-Match': etag // передаем сохраненный ETag
    },
    body: JSON.stringify(newData)
  });
  if (response.status === 412) {
    console.log('Ресурс был изменен другим пользователем');
  } else if (response.ok) {
    const newEtag = response.headers.get('ETag');
    console.log('Обновлено, новый ETag:', newEtag);
  }
}

Вывод

ETag и If-Match — это мощные инструменты для оптимизации кеширования и обеспечения целостности данных при конкурентном доступе. Их стоит применять в REST API, где важна актуальность данных и предотвращение конфликтов редактирования.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Node.js

    Node.js

  • Networks

Ключевые слова

#ETag

#If-Match

#HTTP caching

#conditional requests

#concurrency control

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию