Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 对于带有“0”的请求,可以始终返回http状态304吗;如果修改自";如果内容是静态的_Asp.net_Caching_Http Headers - Fatal编程技术网

Asp.net 对于带有“0”的请求,可以始终返回http状态304吗;如果修改自";如果内容是静态的

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,而不实际检查给定日期吗? 原因是浏览器必须已经有图像的副本(因为它提供了修改后的自标头) 这将使生活更轻松,因为我们(还)没有跟踪图像创建日期 下面是实际的代码(更新:我现在按照亚里士多德的建议在服务器响应

在我们的Asp.Net应用程序中,我们有一个IHttpHandler来处理图像请求。 使用一个特殊id调用处理程序,该id标识图像缓存中的图像。 一旦图像被放入现金中,它就永远不会改变。 我的问题是:

对于带有“If Modified-Since”头的请求,可以始终返回http状态代码304,而不实际检查给定日期吗? 原因是浏览器必须已经有图像的副本(因为它提供了修改后的自标头)

这将使生活更轻松,因为我们(还)没有跟踪图像创建日期

下面是实际的代码(更新:我现在按照亚里士多德的建议在服务器响应中包括了if-modified头):


这没关系,从您得到
如果修改的那一刻起,因为
资源在浏览器上,您可以决定是否让它保持原样

我想在这里说你们两个在思考。您似乎没有设置此标题,因此可能无法通过浏览器获取它

要使其实际工作,您需要添加这一行

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());