Понимание значения кода состояния HTTP «304 Not Modified»

Протокол HTTP является основой связи между веб-серверами и клиентами. Когда клиент запрашивает ресурс, сервер обычно отвечает запрошенными данными. Однако в некоторых случаях сервер может отправить код состояния «304 Не изменено». В этой статье мы рассмотрим значение кода состояния «304 Not Modified», его значение в веб-разработке и различные методы его обработки. Мы предоставим примеры кода для иллюстрации каждого метода.

  1. Что такое код состояния «304 Не изменено»?
    Код состояния «304 Не изменен» — это HTTP-ответ, который указывает, что запрошенный ресурс не изменился с момента последнего запроса. клиентом. Это способ серверов оптимизировать производительность и сократить использование полосы пропускания, предписывая клиенту использовать кэшированную версию ресурса, а не загружать его повторно.

  2. Отправка «304 Not Modified» с помощью серверного кода:
    Чтобы отправить ответ «304 Not Modified», сервер должен включить в HTTP-ответ определенные заголовки. Вот пример использования Node.js и платформы Express:

app.get('/resource', (req, res) => {
  // Check if the resource has been modified
  const resourceHasChanged = checkIfResourceHasChanged(req);

  if (resourceHasChanged) {
    // Send the updated resource
    res.send(updatedResource);
  } else {
    // Send a 304 Not Modified response
    res.status(304).send();
  }
});
  1. Кэширование с заголовком «If-Modified-Since».
    Клиент может включать заголовок «If-Modified-Since» в последующие запросы, чтобы информировать сервер о временной метке кэшированной версии. Затем сервер может сравнить эту временную метку с датой последней модификации ресурса, чтобы определить, был ли он изменен. Вот пример на JavaScript:
const lastModified = getLastModifiedDate(); // Get the last modification date
fetch('/resource', {
  headers: {
    'If-Modified-Since': lastModified
  }
}).then(response => {
  if (response.status === 304) {
    // Use the cached version
    return getCachedResource();
  } else {
    // Process the updated resource
    return response.json();
  }
}).then(resource => {
  // Use the resource
});
  1. Кэширование на основе ETag.
    Другим часто используемым методом является кеширование на основе ETag. Сервер присваивает уникальный идентификатор (ETag) каждой версии ресурса. Клиент включает ETag в последующие запросы, позволяя серверу определить, изменился ли ресурс. Вот пример использования Python и Flask:
@app.route('/resource')
def get_resource():
    current_etag = get_current_etag() # Get the ETag for the current resource version
    if request.headers.get('If-None-Match') == current_etag:
        return Response(status=304)  # Return a 304 Not Modified response
    # Process the updated resource
    return jsonify(resource)

Код состояния «304 Not Modified» является важной частью HTTP-связи, обеспечивая эффективное кэширование и минимизируя ненужную передачу данных между клиентами и серверами. Понимая его значение и внедряя соответствующие механизмы кэширования, разработчики могут оптимизировать производительность Интернета и удобство работы пользователей.

Не забудьте использовать соответствующие заголовки и методы кэширования, такие как «If-Modified-Since» и ETags, для эффективной обработки кода состояния «304 Not Modified» и повышения производительности ваших веб-приложений.