4.避免重定向 重定向会减慢用户体验,它会延迟所有的东西直至到达新页面。一个最浪费的重定向经常会发生而我们的开发者又会经常忽略的就是比如 http://astrology.yahoo.com/astrology的结果是重定向到http://astrology.yahoo.com/astrology/ 在Apache里用Alias 或者mod_rewrite或者DirectorySlash解决。 5.配置ETags ETags(Entity tags)是服务器和浏览器的一个功能,它用来判断浏览器缓存里的元素是否和原来服务器上的一致。ETags比last-modified date更具有弹性,它用一个独一无二的字符串来标识一个元素的版本。 HTTP/1.1 200 OK 之后,如果浏览器要验证这个元素,它就会用If-None-Match头来回传ETag到源服务器。如果符合的话,一个304状态的代码就会从源服务器返回到浏览器,这样源服务器就节省了传输具体数据的开销。 GET /i/yahoo.gif HTTP/1.1 用Etags的问题就在于它会标识那个特定的服务器,如果换了服务器,Etags也就失去了原有的功能,但是这种现在在网络上太常见了,因为我们经常用服务器集群。默认情况下,Apache和IIS会在Etag中内嵌数据,这样会动态减少验证成功的机会。 Apache1.3和2.x的ETag格式是inode-size-timestamp。虽然一个文件可能在不同服务器的同一个目录,同样的大小,安全级,时间戳等等,它的inode会随着服务器的不同而不同。 IIS5.0和6.0有同样类似Etags的东西,叫时间戳:ChangeNumber(更改号),更改号是一个用来追踪IIS配置变化的计数器,ChangeNumber在不同IIS服务器之间是不一样的。 它最终的问题就是,IIS和Apache产生的Etags会在不同服务器之间无法匹配,这样我们的浏览器就无法得到我们期待的304响应,而给我们 的是一个普通的200响应,和正常的数据流。如果你的网站只有一个服务器还无所谓,如果是集群,而你用的是默认的ETag配置,你的用户就会获得更慢的页 面,你的服务器也会有更高的负载,消耗更大的带宽资源,代理也无法高效缓存你的内容,甚至即使你有一个长时间过期的头部(按:见第三条规则),也不会阻止 它重新载入内容。 如果你不想发挥Etags提供的这个弹性验证模型的优势,你最好关掉它。Apache中关掉它的方法是在Apache的配置文件中写这么一句: |
|