Asp.net 对于带有“0”的请求,可以始终返回http状态304吗;如果修改自";如果内容是静态的
在我们的Asp.Net应用程序中,我们有一个IHttpHandler来处理图像请求。 使用一个特殊id调用处理程序,该id标识图像缓存中的图像。 一旦图像被放入现金中,它就永远不会改变。 我的问题是: 对于带有“If Modified-Since”头的请求,可以始终返回http状态代码304,而不实际检查给定日期吗? 原因是浏览器必须已经有图像的副本(因为它提供了修改后的自标头) 这将使生活更轻松,因为我们(还)没有跟踪图像创建日期 下面是实际的代码(更新:我现在按照亚里士多德的建议在服务器响应中包括了if-modified头):Asp.net 对于带有“0”的请求,可以始终返回http状态304吗;如果修改自";如果内容是静态的,asp.net,caching,http-headers,Asp.net,Caching,Http Headers,在我们的Asp.Net应用程序中,我们有一个IHttpHandler来处理图像请求。 使用一个特殊id调用处理程序,该id标识图像缓存中的图像。 一旦图像被放入现金中,它就永远不会改变。 我的问题是: 对于带有“If Modified-Since”头的请求,可以始终返回http状态代码304,而不实际检查给定日期吗? 原因是浏览器必须已经有图像的副本(因为它提供了修改后的自标头) 这将使生活更轻松,因为我们(还)没有跟踪图像创建日期 下面是实际的代码(更新:我现在按照亚里士多德的建议在服务器响应
这没关系,从您得到
如果修改的那一刻起,因为资源在浏览器上,您可以决定是否让它保持原样
我想在这里说你们两个在思考。您似乎没有设置此标题,因此可能无法通过浏览器获取它
要使其实际工作,您需要添加这一行
context.Response.AddHeader("If-Modified-Since", LastModifledOfImage.ToString());
或者在发送当前日期时间时:
context.Response.AddHeader("If-Modified-Since", DateTime.UtcNow.ToString());
当你发送图像时。
我看到了,但这是设置上次修改的标题,而不是您检查的标题
如果可能,请考虑将此图像设置为实际静态图像,因为即使此在修改后也会对服务器进行一次调用,但实际静态资源直接从浏览器缓存获取图像,而不询问服务器。根据规范:
如果客户端执行了条件GET请求,并且允许访问,但文档尚未修改,则服务器应使用此状态代码进行响应
看来这些条件都满足了。请确保再次在您的响应中包含日期标题。如果您想要更改图像,会发生什么情况?@nunespascal更改后的图像将获得一个新id。感谢您提示在我们的服务器响应中包含标题。
context.Response.AddHeader("If-Modified-Since", DateTime.UtcNow.ToString());