首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Expires标头和性能

Expires标头和性能
EN

Stack Overflow用户
提问于 2012-06-27 17:30:37
回答 2查看 445关注 0票数 0

好的,我在我们的开发服务器上使用了IIS6中的expires头文件,但我真的不明白!

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

代码语言:javascript
复制
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?

响应:

代码语言:javascript
复制
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,我得到的请求/响应略有不同:

代码语言:javascript
复制
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

响应:

代码语言:javascript
复制
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,它会从缓存中获取,如果我按下HTTP f5,它会从服务器上获取HTTP200。

那么这是如何提高性能的呢?如何获得HTTP 304而不是http 200?我就是不明白这到底记录了什么?

任何帮助都会很好,谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-27 19:26:58

当您显式地设置Expiresmax-age时,您就是在告诉客户端,将响应缓存那么长时间是安全的。客户端将很高兴地从缓存中获得它,它不会接触到你的服务器,不会有304。除非您使用Ctrl+F5,这会迫使浏览器重新执行一个完整的请求,结果是200。

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

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

如果您想要在特定时间段内推荐缓存,请使用

  • --这比浏览器猜测的时间要长。这通常是使用版本化的静态内容完成的,这些内容永远不会更改,因此过期时间是按年数设置的。
  • 如果您想要阻止缓存,则在过去设置Cache-Control: no-cacheExpires (某些版本的IE会忽略缓存

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

票数 1
EN

Stack Overflow用户

发布于 2012-06-27 19:27:08

性能的提高来自于发出更少的HTTP请求。当浏览器解析一个页面时,发现它必须请求一个CSS文件,如果它已经用max-age=31536000在缓存中获得了该文件的副本,它就知道它缓存的该文件的副本在1年内是有效的,并且不需要发出HTTP请求来获取该文件。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11223192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档