Ответ 304 сообщает браузеру, что изображение не было изменено с момента последней загрузки. Затем браузер получает изображение из своего локального кэша.
Несмотря на то, что изображение кэшируется локально, браузер все равно должен спросить сервер, есть ли обновленное, чтобы предотвратить устаревание кэша.
EDIT:
Когда страница загружается (или обновляется) в браузере, браузер ищет все необходимые файлы в своем кэше. Если он находит файл в кэше, он просматривает время создания / изменения кэшированного файла.
Браузер отправит запрос на сервер (даже если существует кэшированная версия файла). В запросе браузер будет включать заголовок, который имеет время создания / изменения кэшированного файла. Сервер обязан сравнить дату, отправленную в заголовке, с датой последнего изменения версии сервера. Если сервер обнаружит, что кэшированная версия клиента устарела (то есть дата, отправленная браузером, предшествует дате версии сервера), сервер просто вернет фактический файл, и браузер НЕ будет использовать кэшированную версию. Браузер обновит свой кэш новым файлом.
Если, с другой стороны, копия сервера была последний раз изменена перед созданием / изменением кэшированного файла, это означает, что кэшированная копия все еще действительна. Сервер ответит кодом HTTP 304, который сообщает браузеру, что его кэшированная копия действительна. В этом случае сервер не будет повторно отправлять весь файл.
Зачастую браузер даже не удосуживается проверить наличие обновленного файла, если узнает, что кэшированная копия является относительно недавней (возможно, всего несколько минут или несколько часов назад). В этом случае браузер будет просто использовать кэшированную копию без предварительной проверки обновленной версии на сервере. Вы можете заставить браузер игнорировать кеш, удерживая нажатой кнопку управления (или команду на Mac) при перезагрузке страницы.