Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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
Browser HTTP头-缓存问题_Browser_Cache Control - Fatal编程技术网

Browser HTTP头-缓存问题

Browser HTTP头-缓存问题,browser,cache-control,Browser,Cache Control,我正在向图像发出请求,返回的响应标题为: Accept-Ranges:bytes Content-Length:4499 Content-Type:image/png Date:Tue, 24 May 2011 20:09:39 GMT ETag:"0cfe867f5b8cb1:0" Last-Modified:Thu, 20 Jan 2011 22:57:26 GMT Server:Microsoft-IIS/7.5 X-Powered-By:ASP.NET 请注意,没有缓存控制标题 在Ch

我正在向图像发出请求,返回的响应标题为:

Accept-Ranges:bytes
Content-Length:4499
Content-Type:image/png
Date:Tue, 24 May 2011 20:09:39 GMT
ETag:"0cfe867f5b8cb1:0"
Last-Modified:Thu, 20 Jan 2011 22:57:26 GMT
Server:Microsoft-IIS/7.5
X-Powered-By:ASP.NET
请注意,没有
缓存控制
标题


在Chrome上的后续请求中,Chrome知道去缓存检索图像。它如何知道如何使用缓存?我当时的印象是,我必须使用
缓存控制
头告诉它。

您既有
ETag
头,也有
上次修改的
头。它可能使用这些。但要实现这一点,如果没有匹配的或自以来修改的,它仍然需要使用
发出请求。

您有一个
ETag
和一个
上次修改的
头。它可能使用这些。但是要实现这一点,如果没有匹配的
,它仍然需要使用
发出请求;如果自
以来进行了修改,它仍然需要使用
发出请求。

要设置缓存控件,您必须自己指定它。您可以在web.config、选定文件夹(静态、图像…)的IIS管理器中进行设置,也可以在代码中进行设置。HTTP 1.1标准建议未来一年为最长到期时间

对于站点中的所有静态内容,将过期日期设置为一年被认为是良好的实践。如果在头文件中没有它,则修改后会导致
,因为
请求可能比第一次请求小静态文件所需的时间更长。在这些调用中,使用ETag头

当您有
缓存控制时:max age=315360000
基本HTTP响应的数量将超过
,如果从>
调用后进行修改,因此最好删除ETag头并生成较小的静态文件响应头。IIS没有相应的设置,因此您必须执行
response.Headers.Remove(“ETag”)
OnPreServerRequestHeaders()中

如果你想进一步优化你的头文件,你可以在IIS设置中删除
X-Powered-By:ASP.NET
,在system.web/httpRuntime元素中删除
X-Aspnet-Version
头文件(尽管我在你的响应中没有看到)


有关更多提示,我建议您阅读一本好书-

来设置缓存控件,您必须自己指定它。您可以在web.config、选定文件夹(静态、图像…)的IIS管理器中进行设置,也可以在代码中进行设置。HTTP 1.1标准建议未来一年为最长到期时间

对于站点中的所有静态内容,将过期日期设置为一年被认为是良好的实践。如果在头文件中没有它,则修改后会导致
,因为
请求可能比第一次请求小静态文件所需的时间更长。在这些调用中,使用ETag头

当您有
缓存控制时:max age=315360000
基本HTTP响应的数量将超过
,如果从>
调用后进行修改,因此最好删除ETag头并生成较小的静态文件响应头。IIS没有相应的设置,因此您必须执行
response.Headers.Remove(“ETag”)
OnPreServerRequestHeaders()中

如果你想进一步优化你的头文件,你可以在IIS设置中删除
X-Powered-By:ASP.NET
,在system.web/httpRuntime元素中删除
X-Aspnet-Version
头文件(尽管我在你的响应中没有看到)


有关更多提示,我建议您阅读一本好书-

由于请求调用中的
,因此我看不到修改后的
。其他浏览器是否使用ETag和上次修改?是否由浏览器来实现?我是否也应该向下发送
缓存控制
标题?谢谢。
ETag
Last Modified
都希望浏览器发出另一个请求,然后以200或304响应。浏览器本身不应该简单地保留它们。Chrome在这里有点不同,因为我注意到它确实保存了文件,即使没有指示它保存文件。发送
Cache Control
并指定过期日期总是一个好主意。我看不到
是否在请求调用中修改,因为
。其他浏览器是否使用ETag和上次修改?是否由浏览器来实现?我是否也应该向下发送
缓存控制
标题?谢谢。
ETag
Last Modified
都希望浏览器发出另一个请求,然后以200或304响应。浏览器本身不应该简单地保留它们。Chrome在这里有点不同,因为我注意到它确实保存了文件,即使没有指示它保存文件。发送
缓存控制并指定过期日期总是一个好主意。