Протокол HTTP является основой связи между веб-серверами и клиентами. Когда клиент запрашивает ресурс, сервер обычно отвечает запрошенными данными. Однако в некоторых случаях сервер может отправить код состояния «304 Не изменено». В этой статье мы рассмотрим значение кода состояния «304 Not Modified», его значение в веб-разработке и различные методы его обработки. Мы предоставим примеры кода для иллюстрации каждого метода.
-
Что такое код состояния «304 Не изменено»?
Код состояния «304 Не изменен» — это HTTP-ответ, который указывает, что запрошенный ресурс не изменился с момента последнего запроса. клиентом. Это способ серверов оптимизировать производительность и сократить использование полосы пропускания, предписывая клиенту использовать кэшированную версию ресурса, а не загружать его повторно. -
Отправка «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();
}
});
- Кэширование с заголовком «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
});
- Кэширование на основе 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» и повышения производительности ваших веб-приложений.