最近一段时间一直在研究页面缓存和压缩方面的东西,因为公司服务器使用的是iis6.0,不少性能方面的优化都不支持。因此,就开始尝试着本身写个简单的处理程序。css
为了减小服务器带宽的需求,咱们要减小客户端与服务器端交互的数据量。解决方法以下:
1. 缓存不多变化的静态资源,好比JS,CSS和图片。
2. 对网络交互的数据进行压缩,好比对JS,CSS,HTML,图片等。
3. 减小客户端与服务器端的交互次数,咱们能够合并全部的JS文件,合并全部的CSS文件。
缓存位于服务器之间和客户端之间,根据请求保存输出内容的副本,如html页面,图片,文件,当下一个请求来到时,若是相同的URL,直接使用副本响应访问请求,而不向源服务器再次发送请求。html
如下整理了一些Http请求头相关的知识:node
缓存的类型
1. 浏览器缓存
浏览器都有关于缓存的设置。经过在电脑硬盘存储已经看过的网站的副本。
2. 代理服务器缓存
Web代理服务器使用一样的缓存原理,代理服务器群为成百上千用户服务使用一样的机制;代理服务器缓存是共享缓存,为大量用户使用,所以在减小相应时间和带宽使用方面颇有效,同一个副本会被重用屡次。
3. 网关缓存
也称为反向代理缓存或间接代理缓存,网关缓存也是一个中间服务器,和内网管理员部署缓存用于节省带宽不一样,网关缓存通常是网站管理 员本身部署,让他们的网站更容易扩展并得到更好的性能。请求有几种方法被路由到网关缓存服务器上,其中典型的是让用一台或多台负载均衡服务器从客户端看上 去是源服务器。
缓存如何工做
1. 若是响应头信息:告诉缓存器不要保留缓存,缓存器就不会缓存相应内容。
2. 若是请求信息是须要认证或者安全加密的,相应内容默认不会被缓存。
3.若是在回应中不存在校验器(ETag或者Last-Modified头信息),缓存服务器会认为缺少直接的更新度信息,内容将会被认为不可缓存。
4. 一个缓存的副本若是含有如下信息,内容将会被认为是足够新的。apache
5.若是缓存的副本已经太旧了,缓存服务器将向源服务器发出请求校验请求,用于肯定是否能够继续使用当前拷贝继续服务。
四种经常使用于控制客户端缓存的头标
1. Last-Modified 最后修改时间
这个头标是一个响应头标,表示客户端(一般指浏览器)所请求资源在服务器端的最后修改时间,一般状况下客户端在接受这个头标后,在之后对这个资源的请求会附 带一个’If-Modified-Since’请求头标,而这个头标是想告诉服务器上次客户端所请求资源的最后修改时间,对于一些图像,css,js等静 态文件资源,配置好了的apache服务器会理解这些If-Modified-Since请求头标,将头标里的时间和文件的最后修改时间进行比较并做出响 应,若是两者相等则发送一个304 Not Modfied来告诉客户端所请求资源并未修改让客户端放心使用缓存中的资源,不然的话会从新发送一个新的资源和新的Last-Modified的头标。
2. ETag(Entity Tag) 实体标签
和Last-Modified相似,也是WEB服务器和客户端用于确认缓存组件的有效性的一种 机制,apache 1.3和2.0的ETag格式是inode-size-timestamp,所以当资源被修改,其ETag也发生改变,ETag相对Last- Modified更精确,Last-Modified只能精确的s级别,可是ETag在多服务器可能形成混乱
3. Expires 过时时间
这个属性告诉缓存器相关副本在多长时间内是新鲜的。过了这个时间,缓存器就会向源服务器发送请求,检查文档是否被 修改。几乎全部的缓存服务器都支持Expires属性。能够设计一个绝对时间间隔:基于客户最后查看副本的时间(最后访问时间)或者根据服务器上文档最后 被修改的时间。Expires头信息对于设置静态图片缓存特别有用,这些图片修改不多,能够给它们设置一个特别长的过时时间,这会使网站对用户变得相应很是快。 4. Cache-Control 缓存控制
让网站的发布者控制他们的内容,并定位过时时间的限制。好比:Cache-Control: max-age=3600, public,可选项以下:浏览器