Можно ли всегда возвращать http-статус 304 для запросов с «Если -Изменено -С тех пор», если содержимое является статическим

В нашем приложении 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);

    }
}
5
задан Aristos 2 July 2012 в 12:48
поделиться