Экспресс возвращает 304 для повторных запросов IE

Я испытываю странное поведение ExpressJS. При втором запросе на мой URL-адрес API node.js/express он всегда возвращает IE4 304 Not Modified код ответа. Другие браузеры получают 200 (Chrome/FF). Проблема в том, что она возвращает 304, даже если контент фактически был изменен. Я пытался искать и не мог найти ничего по этому вопросу. Также я попытался найти разницу в заголовках запросов IE и Chrome и мог видеть любой заголовок, который может это вызвать. Любая помощь будет оценена.

Мне нужно добавить соединение через SSL, если это важно

Ответ 1

Имея ту же проблему, я много смотрю и получается, что на самом деле проблема возникает из-за глупого агрессивного кэширования ajax-запросов от IE. Фактически, когда вы видите этот 304, фактический запрос никогда не попадает на сервер, но IE отвечает последними данными из своего кеша. Это предполагаемое поведение MS, и, следовательно, существуют только обходные пути.

Я предпочитаю прикреплять к каждому запросу ajax get бесполезный параметр запроса, содержащий текущее время. Это заставит IE всегда извлекать данные с сервера. Самое приятное, если вы используете jQuery, вы можете настроить его автоматически с помощью

$.ajaxSetup({cache:false})

Другая работа вокруг - использовать POST-запросы вместо GET, но это не всегда вариант.

Ответ 2

Заголовок Cache-Control - обходной путь. Ошибка в интерпретации интернет-исследователя спецификации HTTP 1.1 для заголовка.

Я добавил это в свой обработчик маршрута, который решил проблему. Вам также нужен заголовок Last-Modified или ETag, но express уже отправил это для меня.

res.setHeader("Expires", "-1");
res.setHeader("Cache-Control", "must-revalidate, private");

Смотрите: Сделайте IE для кэширования ресурсов, но всегда проверяйте

Ответ 3

Ну, мне удалось исправить это, добавив заголовок Cache-Control