У меня есть пользовательский обработчик, который возвращает изображение в браузер.Почему в моем браузере не выполняется мое кэширование изображений, выполненное пользователем?
Изображения получены из базы данных.
По некоторым причинам изображения не кэшируются браузером, и мне было интересно, если кто-то может быть в состоянии определить, что я пропускаю из приведенного ниже кода:
HttpContext.Current.Response.BinaryWrite(imageBytes);
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public);
Context.Current.Response.Cache.SetAllowResponseInBrowserHistory(true);
if(imgRepGetCache.DateCached.HasValue)
HttpContext.Current.Response.Cache.SetLastModified(imgRepGetCache.DateCached.Value);
HttpContext.Current.Response.Cache.SetExpires(DateTime.Now.AddDays(2));
HttpContext.Current.Response.ContentType = "image/jpeg";
Или в качестве альтернативы, если я совершенно не хватает точки, и есть еще что-то, что мне нужно посмотреть.
Edit: По желанию для получения дополнительной информации:
- URL-адрес всегда одинаков
- Я тестирование загрузки и тот же файл с помощью стандартной трубы IIS и трубку в тот же браузер на такой же ПК. Тот, который загружается через IIS, обычно кэшируется, а мой файл - нет.
Изменить 2: После осмотра HTTP запросов/ответов на обычном маршруте IIS я думаю, что это что-то делать с ETag. ETag (который я новичок, как сейчас), похоже, является своего рода контрольной суммой для документа. При последующих запросах браузера отправляется ETag, и если сервер обнаруживает, что ETag не изменился, он возвращает 304 - Not Modified. Все хорошо! Но теперь я устанавливаю ETag, используя:
HttpContext.Current.Response.Cache.SetETag(imgRepGetCache.DateCached.ToString());
Но он не отображается в ответе. Ближе ...
Редактировать 3: В конце концов я исправил его, воспользовавшись Firebug для некоторых HTTP-проверок. Я разместил решение ниже.
Вы должны направить дополнительную информацию. Иногда браузеры не кэшируют на основе URL-страницы страницы или метаданных, связанных с отображаемой страницей, или, возможно, даже из-за локальных настроек. – Kieveli
Некоторые (я не знаю, кто) также не кэшируют страницы на основе суффиксов, т.е. они не будут кэшировать php-страницы, потому что они, как известно, являются динамическим контентом. –
Очень полезный момент! Я запомню это для любой будущей главы, связанной с кешированием f *** s. – joshcomley