Yahoo!网站性能最佳体验的34条黄金守则——服务器(2)
作者:dudo 来源:dudo博客 发布时间:2008-05-29 13:22:00
14、配置ETag
Entity tags(ETags)(实体标签)是web服务器和浏览器用于判断浏览器缓存中的内容和服务器中的原始内容是否匹配的一种机制(“实体”就是所说的“内容”,包括图片、脚本、样式表等)。增加ETag为实体的验证提供了一个比使用“last-modified date(上次编辑时间)”更加灵活的机制。Etag是一个识别内容版本号的唯一字符串。唯一的格式限制就是它必须包含在双引号内。原始服务器通过含有ETag文件头的响应指定页面内容的ETag。
HTTP/1.1 200 OK
Last-Modified: Tue, 12 Dec 2006 03:03:59 GMT
ETag: "10c24bc-4ab-457e1c1f"
Content-Length: 12195
稍后,如果浏览器要验证一个文件,它会使用If-None-Match文件头来把ETag传回给原始服务器。在这个例子中,如果ETag匹配,就会返回一个304状态码,这就节省了12195字节的响应。
GET /i/yahoo.gif HTTP/1.1
Host: us.yimg.com
If-Modified-Since: Tue, 12 Dec 2006 03:03:59 GMT
If-None-Match: "10c24bc-4ab-457e1c1f"
HTTP/1.1 304 Not Modified
ETag的问题在于,它是根据可以辨别网站所在的服务器的具有唯一性的属性来生成的。当浏览器从一台服务器上获得页面内容后到另外一台服务器上进行验证时ETag就会不匹配,这种情况对于使用服务器组和处理请求的网站来说是非常常见的。默认情况下,Apache和IIS都会把数据嵌入ETag中,这会显著减少多服务器间的文件验证冲突。
Apache 1.3和2.x中的ETag格式为inode-size-timestamp。即使某个文件在不同的服务器上会处于相同的目录下,文件大小、权限、时间戳等都完全相同,但是在不同服务器上他们的内码也是不同的。
IIS 5.0和IIS 6.0处理ETag的机制相似。IIS中的ETag格式为Filetimestamp:ChangeNumber。用ChangeNumber来跟踪IIS配置的改变。网站所用的不同IIS服务器间ChangeNumber也不相同。 不同的服务器上的Apache和IIS即使对于完全相同的内容产生的ETag在也不相同,用户并不会接收到一个小而快的304响应;相反他们会接收一个正常的200响应并下载全部内容。如果你的网站只放在一台服务器上,就不会存在这个问题。但是如果你的网站是架设在多个服务器上,并且使用Apache和IIS产生默认的ETag配置,你的用户获得页面就会相对慢一点,服务器会传输更多的内容,占用更多的带宽,代理也不会有效地缓存你的网站内容。即使你的内容拥有Expires文件头,无论用户什么时候点击“刷新”或者“重载”按钮都会发送相应的GET请求。
如果你没有使用ETag提供的灵活的验证模式,那么干脆把所有的ETag都去掉会更好。Last-Modified文件头验证是基于内容的时间戳的。去掉ETag文件头会减少响应和下次请求中文件的大小。微软的这篇支持文稿讲述了如何去掉ETag。在Apache中,只需要在配置文件中简单添加下面一行代码就可以了:
FileETag none
15、尽早刷新输出缓冲
当用户请求一个页面时,无论如何都会花费200到500毫秒用于后台组织HTML文件。在这期间,浏览器会一直空闲等待数据返回。在PHP中,你可以使用flush()方法,它允许你把已经编译的好的部分HTML响应文件先发送给浏览器,这时浏览器就会可以下载文件中的内容(脚本等)而后台同时处理剩余的HTML页面。这样做的效果会在后台烦恼或者前台较空闲时更加明显。
输出缓冲应用最好的一个地方就是紧跟在<head />之后,因为HTML的头部分容易生成而且头部往往包含CSS和JavaScript文件,这样浏览器就可以在后台编译剩余HTML的同时并行下载它们。 例子:
... <!-- css, js -->
</head>
<?php flush(); ?>
<body>
... <!-- content -->
为了证明使用这项技术的好处,Yahoo!搜索率先研究并完成了用户测试。
16、使用GET来完成AJAX请求
Yahoo!Mail团队发现,当使用XMLHttpRequest时,浏览器中的POST方法是一个“两步走”的过程:首先发送文件头,然后才发送数据。因此使用GET最为恰当,因为它只需发送一个TCP包(除非你有很多cookie)。IE中URL的最大长度为2K,因此如果你要发送一个超过2K的数据时就不能使用GET了。
一个有趣的不同就是POST并不像GET那样实际发送数据。根据HTTP规范,GET意味着“获取”数据,因此当你仅仅获取数据时使用GET更加有意义(从语意上讲也是如此),相反,发送并在服务端保存数据时使用POST。


猜你喜欢
- 1、禁用网络管理器# chkconfig NetworkManager off # service NetworkManager stop2
- 个人认为一个站点要运营成功的有这么几个要素(从客户访问网站的角度)。我们可以模拟客户游历网站的过程,一个客户在网上游历,偶然中通过搜索引擎或
- 在新安装的Linux系统命令行下,敲入:ifconfig,显示如下界面。上面这张图显示网卡没有启动,那么我们敲入代码:ifup eth0启动
- 配置过程记录下来,防止遗忘!如有建议技术支持QQ群139785720 配置架构如下: 一.安装步骤(服务器端192.168.0.5)1) 安
- 一、您必须有一个属于您自已的域名。比如:abc.com。没有域名的必须先注册一个域名。二、在国际域名中心注册一个DNS域名,以使您的DNS服
- Windows系统内置的Internet 信息服务(IIS)对ASP具有良好的支持,因此在IIS中调试ASP网页是非常方便的。但有些朋友的网
- 中国雅虎开始逐渐更换各个频道的 Logo,将原来红色的 Logo 更换为紫色的 Logo,和 Yahoo! 相一致。而且页眉的导航链接也更换
- 作为全球中文搜索引擎的老大,百度以其强大的中文数据库和超强的中文抓取技术著称。不过中文第一的位置并不是好做的,全球性搜索引擎老大GOOGLE
- 一在google和baidu查询您网站的主题,看看排名第一页的网站的反向链接。查询一个网站的反向链接查询方式:link:网站网址。然后联系这
- 测试一下Linux下面删除大量文件的效率。首先建立50万个文件$ test for i in $(seq 1 500000);do echo
- 如何将自己的网站加入谷歌资讯索引中技术要求:文章的地址必须是独立的,静态的,并且除了日期外,必须包括至少三个数位;文章标题最好设置成H1,H
- 对一个地方行业类门户网站来说,如果保持一个稳定的流量是个很重要的问题。很多类似的站点都存在着今天IP5000,明天有可能IP2000,后天1
- 备份:1、停止DNS服务2、打开regedit,找到HKLMsystemcurrentcontrolsetservicesdns3、将DNS
- Linux动态库函数的详解加载动态库void *dlopen(const char *filename, int flag);flag的可能
- 一、在\wamp\bin\apache\Apache2.4.4\conf\extra\httpd-vhosts.conf 修改如下 Name
- 一、 基本网页的SEO手段网页是一个网站构成的基本元素,因此,对于网页本身的优化在整个SEO优化过程中有举足轻重的作用。下面分为两个部分来讨
- 今天我们来回顾下,雅虎公司标志 Yahoo! Logo 的变化历程(1994-2009)。1994,没有标志。一开始雅虎并没有标志,事实上,
- 内容优化仍是目前SEO活动最关注的,因为你会不断地为网站或是博客增加内容,因此总有新的机会可以改善搜索引擎的可视度。但要在任何网站找到正确的
- 买了一个录音笔,效果比使用笔记本话筒录音好多了还省电。当然啦,我也曾试过使用手机录音,结果是,没能录多久就中断了(Android 就是这么不
- 虽然现在的站长界,无论是个人站还是门户站,都或多或少的用了“采集”的方式来建站,比如猫扑这个看起来不至于用采集的“大站”,而众多的个人网站就