在HTTP处理程序中,当您知道内容不会更改时是否可以返回304?

| 我设置了一个HTTP处理程序,该处理程序接受GUID参数并从文件系统返回图像。 此图像永远不会改变;后端程序将生成一个新的GUID。因此,我希望图像始终被缓存。 通过HTTP处理程序将状态代码设置为304(未修改)的正确方法是吗?     
已邀请:
        我建议您设置适当的HTTP响应标头,以便向客户端指示内容不会更改并且可以缓存:
public void ProcessRequest(HttpContext context)
{
    var cache = context.Response.Cache;
    cache.SetCacheability(HttpCacheability.Public);
    cache.SetExpires(DateTime.Now.Add(CACHE_DURATION));
    cache.SetMaxAge(CACHE_DURATION);
    cache.AppendCacheExtension(\"must-revalidate, proxy-revalidate\");

    byte[] buffer = ...
    context.Response.ContentType = \"image/png\";
    context.Response.OutputStream.Write(buffer, 0, buffer.Length);
}
    
        是。但是,仅当请求是条件请求时,才应返回“ 1”。如果您知道带有该URL的图像永不更改,则可以设置很长的到期日期(根据规格,最长为1年)。 顺便说一句,RFC 2616很容易阅读-我建议去那里看看,以获取更多详细信息。     
        此外,除了@Darin的回复外,您是否遇到过ETag?这些是您提议的实现缓存的常见方法之一。浏览器第一次请求图像时,您将没有ETag,因此您知道要提供图像。下次发出请求时,它将提供ETag-您可以使用ETag查看是否返回304或图像本身。在您的示例中,您只会检查是否存在ETag。 在您提出的解决方案中,让我担心的是如何从后续请求(以及多个客户)中识别第一个请求     

要回复问题请先登录注册