हमारे Asp.Net एप्लिकेशन में हमारे पास छवियों के लिए IHttpHandler हैंडलिंग अनुरोध हैं, तो "अगर-संशोधित-चूंकि" के अनुरोधों के लिए हमेशा http स्थिति 304 वापस करना ठीक है। हैंडलर को एक विशेष आईडी कहा जाता है जो हमारे छवि कैश में एक छवि की पहचान करता है। एक बार छवि को नकद में डाल दिया जाता है, यह कभी भी नहीं बदलता है। मेरा प्रश्न है:यदि सामग्री स्थिर है
क्या वास्तव में दिए गए दिनांक की जांच किए बिना "अगर-संशोधित-चूंकि" शीर्षलेख के अनुरोध के लिए हमेशा http स्थिति कोड 304 वापस करना ठीक है? तर्क यह है कि ब्राउजर में पहले से ही छवि की एक प्रति होना चाहिए (क्योंकि यह संशोधित-हेडर हेडर प्रदान करता है)।
इससे जीवन आसान हो जाएगा, क्योंकि हम छवि निर्माण तिथि को ट्रैक नहीं करते हैं (अभी तक)। आप If-Modified-Since
संसाधन है मिल
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);
}
}
और यदि आप कभी भी छवि को बदलना चाहते हैं तो क्या होता है? – nunespascal
@nunespascal एक बदली गई छवि एक नई आईडी प्राप्त करेगी। –