Назад | Перейти на главную страницу

Почему NGinx отправляет контент в ответе HTTP 304, если совпадение If-None-Match / If-Modified-Since соответствует?

Моя установка NGinx по умолчанию возвращает ответ 304 Not Modified на запрос, который соответствует If-None-Match заголовок и непросроченный If-Modified-Since заголовок, что является правильным поведением, но NGinx также добавляет содержимое ресурса в ответ 304. Можно было бы подумать, что NGinx не будет добавлять контент, а просто вернет 304 с пустым телом, указывая браузеру, что использования их кэшированного ресурса достаточно.

Есть ли причина такого поведения и как его отключить?

Вы уверены, что NGINX возвращает контент?

В зависимости от того, как вы смотрите на ответ, это может только казаться так.

Например, когда инструменты разработчика Chrome получают 304 от NGINX, он отображает контент, который выглядит как будто он был отправлен из NGINX, но на самом деле он просто извлекается из кеша Chrome.

Вы можете попробовать это, щелкнув правой кнопкой мыши файл -> «Копировать -> Копировать как cURL» в инструментах разработчика Chrome.

Добавьте -vv в начало того, что вы только что скопировали (например, curl -vv <your-url> -H 'HeaderKey: HeaderValue' <etc>), затем выполните в терминале / оболочке.

Вы, вероятно, увидите, что он не возвращает содержимое тела (даже если это 304.) Затем вы можете попробовать тот же запрос только с URL-адресом (curl -vv <your-url>) и увидите тело без 304.