过期标题和性能

时间:2012-06-27 09:30:37

标签: asp.net performance http iis

好的,我在我们的开发服务器上的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,它会从缓存中获取,如果我按下控制器f5,它会从服务器上获取HTTP 200.

那么这如何提高性能呢?你如何获得HTTP 304而不是http 200?我只是没有得到这几乎存档的东西?

任何帮助都会很好,谢谢

2 个答案:

答案 0 :(得分:1)

当您明确设置Expiresmax-age时,您告诉客户端在这么长时间内缓存响应是安全的。客户端很乐意从缓存中获取它,它将触摸您的服务器,将没有304.除非您执行Ctrl + F5,这会强制浏览器重新执行完整请求,从而导致200

现在如果你没有设置Expiresmax-age怎么办?这只是意味着客户端pick an expiration time by itself,启发式。您的响应仍然被缓存,只有浏览器必须猜测多长时间。

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

  • 如果您希望推荐缓存一段特定时间 - 超过浏览器猜测的时间。这通常是使用版本化的静态内容完成的,这些内容永远不会更改,因此到期时间设置为年份。
  • 如果您想阻止缓存,在这种情况下,您过去设置Cache-Control: no-cacheExpires(某些版本的IE将忽略no-cache)。

条件请求,304以及所有这些仅在内容已过期之后才开始播放。要重新验证它,客户端可能会执行条件GET,这取决于您的服务器设置,可能会或可能不会产生304。

答案 1 :(得分:0)

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

减少到服务器的往返次数应该会导致加载页面更快,并为用户带来更好的体验。

希望这有帮助。