0

好的,我在我们的开发服务器上使用 IIS6 中的过期标头,我真的不明白!

因此,如果我不向文件添加过期标头,则在使用 firebug 查看时会收到以下请求/响应:

Accept  */*
Accept-Encoding gzip, deflate
Accept-Language en-gb,en;q=0.5
Cache-Control   no-cache
Connection  keep-alive
Cookie  __utma=222382046.267771103.1330592028.1337002926.1340787333.122; __utmz=222382046.1330592028.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utma=76038230.629470783.1340728034.1340728034.1340786921.2; __utmz=76038230.1340728034.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); timeOutCookie=Wed%20Jun%2027%202012%2011%3A17%3A22%20GMT+0100%20%28GMT%20Daylight%20Time%29; __utmb=76038230.26.10.1340786921; __utmb=222382046.5.10.1340787333; ASP.NET_SessionId=yhib5kyxf1m5azuhoogrstt5; __utmc=76038230; Travel2=ECC62DC4F9C36A41F3BCF0C54F96D877FEA32D4867DB1A3A97D0C6A3BE79EE98517B9B1A4E24289C863D86A2A4A846EA1FF4BF3822E8B6CBF872E25DD1ADF306F724EE1500AA71E28CFCD02476748163929B73856C505E50D185C05E6322488F
Host    site
Pragma  no-cache
Referer http://site/Agents/Flights/FlightSearch.aspx?

回复:

Accept-Ranges   bytes
Content-Length  17864
Content-Type    application/x-javascript
Date    Wed, 27 Jun 2012 09:21:07 GMT
Etag    "0de7d7f192dcd1:a07d"
Last-Modified   Tue, 08 May 2012 12:53:00 GMT
Server  Microsoft-IIS/6.0
X-Powered-By    ASP.NET

现在,如果我现在按 f5,系统会从客户端缓存中检索文件,太棒了!

现在,如果我添加 expires 标头并按 ctrl f5 我会得到一个稍微不同的请求/响应:

Accept  */*
Accept-Encoding gzip, deflate
Accept-Language en-gb,en;q=0.5
Cache-Control   no-cache
Connection  keep-alive
Cookie  __utma=222382046.267771103.1330592028.1337002926.1340787333.122; __utmz=222382046.1330592028.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utma=76038230.629470783.1340728034.1340728034.1340786921.2; __utmz=76038230.1340728034.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); timeOutCookie=Wed%20Jun%2027%202012%2011%3A21%3A11%20GMT+0100%20%28GMT%20Daylight%20Time%29; __utmb=76038230.27.10.1340786921; __utmb=222382046.5.10.1340787333; ASP.NET_SessionId=yhib5kyxf1m5azuhoogrstt5; __utmc=76038230; Travel2=ECC62DC4F9C36A41F3BCF0C54F96D877FEA32D4867DB1A3A97D0C6A3BE79EE98517B9B1A4E24289C863D86A2A4A846EA1FF4BF3822E8B6CBF872E25DD1ADF306F724EE1500AA71E28CFCD02476748163929B73856C505E50D185C05E6322488F
Host    site
Pragma  no-cache
Referer http://site/Agents/Flights/FlightSearch.aspx?
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1

回复:

Accept-Ranges   bytes
Cache-Control   max-age=86400
Content-Length  17864
Content-Type    application/x-javascript
Date    Wed, 27 Jun 2012 09:24:41 GMT
Etag    "0de7d7f192dcd1:a082"
Last-Modified   Tue, 08 May 2012 12:53:00 GMT
Server  Microsoft-IIS/6.0
X-Powered-By    ASP.NET

太棒了,我现在在缓存控件中获得了最大年龄。现在让我感到困惑的是,据我所知,现在网站在下载方面的表现有实际差异。如果我按 f5 它会从缓存中获取它,如果我按 control f5 它会从带有 HTTP 200 的服务器中获取它。

那么这如何提高性能呢?您如何获得 HTTP 304 而不是 http 200?我只是不明白这实际上是什么档案?

任何帮助都会很好谢谢

4

2 回答 2

1

当您设置Expiresmax-age显式设置时,您是在告诉客户端在这么长的时间内缓存响应是安全的。客户端会很高兴地从缓存中获取它,它不会触及你的服务器,不会出现 304。除非你按 Ctrl+F5,这会强制浏览器重新执行完整请求,从而导致 200。

现在,如果您不设置Expiresnor怎么办max-age?这只是意味着客户端将启发式地自行选择到期时间。您的响应仍然被缓存,只有浏览器必须猜测多长时间。

因此,Expires/max-age在两种情况下很有用。

  • 如果你想推荐缓存一段特定的时间——比浏览器猜测的要长。这通常使用版本化的静态内容来完成,这些内容永远不会改变,因此到期时间设置为以年为单位。
  • 如果你想防止缓存,在这种情况下你设置Cache-Control: no-cacheExpires过去(某些版本的IE会忽略no-cache)。

有条件的请求,304 和所有这些,只有在内容已经过期后才能播放。要重新验证它,客户端可能会执行条件GET,这取决于您的服务器设置,可能会或可能不会导致 304。

于 2012-06-27T11:26:58.207 回答
0

性能改进来自更少的 HTTP 请求。当浏览器正在解析一个页面并看到它必须请求一个 CSS 文件时,如果它已经在它的缓存中获得了max-age=31536000它的副本,并且它知道它的缓存副本是 1 年有效并且不必发出 HTTP 请求以获取文件。

更少的往返服务器应该会导致更快的加载页面,并为用户提供更好的体验。

于 2012-06-27T11:27:07.677 回答