В нашем приложении Asp.Net у нас есть IHttpHandler, обрабатывающий запросы на изображения. Обработчик вызывается со специальным идентификатором, который идентифицирует изображение в нашем кэше изображений. Как только изображение помещается в наличные деньги, оно никогда не меняется. Мой вопрос:
Можно ли всегда возвращать код состояния http 304 для запросов с заголовком «Если -изменено -с» без фактической проверки заданной даты? Причина в том, что у браузера уже должна быть копия изображения (, так как он предоставил модифицированный -заголовок ).
Это облегчило бы жизнь, потому что мы еще (еще )не отслеживаем дату создания образа.
Вот фактический код (Обновление :Я включил измененный заголовок if -теперь в ответ сервера, как рекомендовал Аристос):
public void ProcessRequest(HttpContext context)
{
if (!String.IsNullOrEmpty(context.Request.Headers["If-Modified-Since"])) {
//Is this okay?
context.Response.StatusCode = 304;
context.Response.StatusDescription = "Not Modified";
return;
}
var thumbnailId = context.Request.QueryString["thumbnail"];
using (var thumbnailCache = new CThumbnailCache()) {
var imageBytes = thumbnailCache.GetImageById(thumbnailId);
context.Response.ContentType = "image/png";
var outputStream = context.Response.OutputStream;
outputStream.Write(imageBytes, 0, imageBytes.Count());
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.Cache.SetLastModified(DateTime.UtcNow);
// added after Aristos post
context.Response.AddHeader("If-Modified-Since", DateTime.UtcNow.ToString("r"));
const int maxAge = 86400 * 14; // 14 Tage
context.Response.Cache.SetExpires(DateTime.Now.AddSeconds(maxAge));
context.Response.Cache.SetMaxAge(new TimeSpan(0, 0, maxAge));
context.Response.CacheControl = "private";
context.Response.Cache.SetValidUntilExpires(true);
}
}