优化网站设计(十三):配置ETags

news/2024/5/12 12:37:01/文章来源:https://blog.csdn.net/weixin_34224941/article/details/85557741

前言

网站设计的优化是一个很大的话题,有一些通用的原则,也有针对不同开发平台的一些建议。这方面的研究一直没有停止过,我在不同的场合也分享过这样的话题。

作为通用的原则,雅虎的工程师团队曾经给出过35个最佳实践。这个列表请参考  Best Practices for Speeding Up Your Web Site http://developer.yahoo.com/performance/rules.html,同时,他们还发布了一个相应的测试工具Yslow http://developer.yahoo.com/yslow/

我强烈推荐所有的网站开发人员都应该学习这些最佳实践,并结合自己的实际项目情况进行应用。 接下来的一段时间,我将结合ASP.NET这个开发平台,针对这些原则,通过一个系列文章的形式,做些讲解和演绎,以帮助大家更好地理解这些原则,并且更好地使用他们。

准备工作

为了跟随我进行后续的学习,你需要准备如下的开发环境和工具

  1. Google Chrome 或者firefox ,并且安装 Yslow这个扩展组件.请注意,这个组件是雅虎提供的,但目前没有针对IE的版本。
    1. https://chrome.google.com/webstore/detail/yslow/ninejjcohidippngpapiilnmkgllmakh
    2. https://addons.mozilla.org/en-US/firefox/addon/yslow/
    3. 你应该对这些浏览器的开发人员工具有所了解,你可以通过按下F12键调出这个工具。
  2. Visaul Studio 2010 SP1 或更高版本,推荐使用Visual Studio 2012
    1. http://www.microsoft.com/visualstudio/eng/downloads
  3. 你需要对ASP.NET的开发基本流程和核心技术有相当的了解,本系列文章很难对基础知识做普及。

本文要讨论的话题

这一篇我和大家讨论的是第十三条原则:Configure ETags (配置ETags)。

ETag,全称为:Entity Tag,意思是实体标签,从名字上看,是对于某种实体的一个标识。它属于HTTP协议的一部分,也就是所有的Web服务器都应该(也确实能)支持这个特性。它的作用是用一个特殊的字符串来标识某个资源的“版本”,客户端(浏览器)来请求的时候,可以比较,如果ETag一致,则表示该资源并没有修改过,客户端(浏览器)可以使用自己缓存的版本。

工作原理

我们通过实例来了解ETag的工作原理,当用户第一次请求某个资源(通常为静态资源)的时候

image

正常情况下,他将得到一个状态码为200的响应,并且在响应头部中会包含一个ETag的信息(ETag    "6ab823201a4ece1:0")

image

【备注】这个值是我本机的IIS 8.0提供,不同的服务器可能会有所不同。我后面会解释大致的含义。

 

接下来,如果用户再次请求这个资源的话,浏览器会尝试在请求头部中包含这个信息,以便服务器可以比较,确定是要再次发送资源的内容。

image

我们注意这一行 If-None-Match    "6ab823201a4ece1:0"

然后,服务器会怎么样响应这个请求呢?

image

服务器实际上是比较了ETag的值,它发现浏览器提供的值与该资源实际的值是一样的,所以它就返回了304的状态码,而且不需要在响应的正文里面包含任何实际内容。浏览器得到304这个状态码之后,就知道该资源并没有被修改,所以直接使用本地缓存的版本。

 

ETag的配置

在IIS产品家族中,新的版本(例如IIS 7以后的版本)会自动配置一个ETag,这个ETag的值很类似于下面这样:

6ab823201a4ece1:0

它是由两个部分组成的

  1. 第一部分称为FileTimeStamp(时间戳),我们很容易联想到这可能是跟文档修改时间有关系,事实上确实是,但你无法将其直接还原为文档修改时间(微软并没有公开这部分的算法)。我确实对此做过一些研究,但最终还是没有办法解释这个值如何生成的,所以大家也只需要知道,这个是类似于一个时间戳的值就可以了。
  2. 第二部分为ChangeNumber(修改编号)。这个值在IIS 7.0以及后续的版本中,被统一设置为0。设置为一个统一值有利于解决一些问题(例如在服务器场模式下,该问题我后续也会讨论到)。事实上,保留这个ChangeNumber我觉得主要是历史遗留问题,因为早期版本是有这个值,而且可以不一样。既然如果这个值不一样的话,会给我们惹一些麻烦,那么其实最好的做法是干脆就不要这个字段了。但我想,为了保持格式上的一贯性,微软最终保留了这个字段。

 

这个默认的ETag不需要任何的配置就会存在(反过来,你如果要删除它倒是很不容易,这个问题后续也会提到),但我们可以继续添加自己想要的特殊ETag。也就是说,对于一个资源,实际上是可以有多个ETag的。我们看看在IIS 中的设置。

image

image

你可以在这里设置任意的值。

我们可以预见到,如果这样设置的话,那么在响应的头部中应该就会有多个ETag了。如下图所示

image

 

ETag与其他技术的比较

经过上面的介绍,大家应该知道ETag的功能,主要能提供对资源的版本标识,以避免无谓的重复下载。这从一定意义上,肯定是有利的,它可以提高性能。

如果这样的话,那么它和“优化网站设计(三):对资源添加缓存控制” 中提到过的一些技术比较起来,有什么自己的特点呢?

响应标头优势 和特点劣势 和可能的问题
Expires
  • HTTP 1.0就有,简单易用。
  • 服务器通过这个Header告诉浏览器,某资源直到某个时间才会过期,所以在没有过期之前,浏览器就直接使用本地的缓存了。
  • 因为这是时间是由服务器发送的(UTC),但如果服务器时间和客户端事件存在不一致,可能会有些问题。
  • 可能存在版本的问题,因为如果在到期之前修改过了,客户端是不会知道的。
  • Cache-Control中的max-age可以实现类似的效果,但更加好,因为max-age是一个以秒为单位的时间数,而不是具体的时间,所以不存在上面提到的第一个问题。

Cache-Control

  • 服务器通过一个Header(Last-Modified)告诉浏览器,某资源最后修改的时间
  • 浏览器在请求的时候,包含一个Header(If-Modified-Since),然后服务器可以进行比较,如果在该时间后没有修改过,则返回304
  • 它比Expires多很多选项设置
  • Last-Modified 也是一个时间,但该时间只能精确到秒,如果在同一个秒中有多次修改(这个在现在的环境下应该确实是可能的),则可能会发生问题。
ETag
  • 可以更加精确地判断资源是否被修改,因为它不是一个时间值,而是对时间经过处理的一个长整型数值(当然具体算法我们目前还不得而知)
  • 浏览器发起新请求时需要包含 If-None-Match
  • 如果部署在服务器场环境中,配置不当的话,可能每个服务器会对相同的资源生成不一样的ETag,这样就增加了重复下载的可能性。要理解这个问题的原因,以及如何解决,请参考这里的文档:http://support.microsoft.com/kb/922703/en-us
  • 该问题在IIS 7以及以后的版本中应该不存在了

这几个技术其实很多时候是会结合起来用的,而且优先级也有所不同。通常,ETag是优先于Cache-Control的,而Cache-Control又是优先于Expires的

clip_image006

 

 

何时以及如何删除ETag的功能?

由于之前谈到可能的一些问题,雅虎团队在当年写这个原则的时候,是建议在服务器场的环境下面禁用ETag的,在Apache中,可以通过修改配置文件来实现。而在IIS 中,如果你所使用的是7.0以及后续的版本,实际上应该可以不禁用,因为现在不会存在他们所提到的那个问题了。但如果你真的想要了解一下如何禁用,那么请参考下面的操作

  1. 安装这个扩展:http://www.iis.net/downloads/microsoft/url-rewrite 
  2. 创建一个地址重写规则

image

image

image

这样配置了之后,就不会再有ETag,整个世界清静了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_768176.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何运维网站能让其稳定高效——稳定篇

作为一名运维工程师,工作中最大的希望就是自己运维的网站能够稳定高效运行,但理想很丰满现实很骨感,实际情况是总会有各种各样状况导致网络、服务器或者应用环境发生故障。面对这种情况,我觉得还是要能从故障中总结出经验规律&…

最大偷情网站再遭黑,一张图告诉你哪里的人最不忠

专为已婚人士提供约会服务的知名网站 AshleyMadison.com 二次遭遇黑客袭击,导致3700万用户包括姓名、邮箱地址、喜爱的招式等个人资料曝光。这些曾经乐享春宵一刻的人们接下来一周可能都要过着和松鼠牙王迅一样担惊受怕的生活了。 而那些曾经怀疑过自己遭枕边人背叛…

您与此网站建立的是私密连接,但网络上的某用户也许能改变此网页的外观

Windows server 2008 IIS7.5设置https的详细方法看这里:https://yq.aliyun.com/articles/86584?spm5176.8091938.0.0.vMff1F 1、https:// 上有个大大的红线,看着就让人望而却步,以为是个危险的网站! 出现大大的红线,要…

刚子扯谈:网站运营在左 技术在右 真TM扯

朋友的书 鄙人的书 2013年8月5日,雨未下,天猴焖 开片语:今天的扯谈内容是我转载我Java学习交流群里面一个哥们,当然我推荐他加入了朋友的网络分析师这个群,我认为那样对他有更大帮助。现在他是XX婚恋网的SEO高级工程师…

Gomez网站性能用户体验排行说明书

Gomez 是 Compuware 的 Web 性能部门,互联网时代用户体验管理专家,用于组织优化其Web和移动应用可用性和质量,并预先识别对业务产生影响的问题。Gomez Benchmarks的目标是提升用户体验,帮助互联网时代下的企业,及时了解…

跑马灯不间断循环(网站首页)

跑马灯不间断循环(网站首页) <TABLE width"96%"border0 align"center"cellPadding0 cellSpacing0><TBODY><TR><TD ><div iddemo styleoverflow:hidden;height:135px;width:550px;><TABLE cellSpacing0 cellPadding0 bord…

跟 陌生人吃饭-这样的网站你认为如何?

拼桌 被定义为一个社会化的拼桌平台&#xff0c;旨在帮助一群有需求的陌生人从线上发展到线下&#xff0c;临时组成一个小团体在饭桌上吃饭和交友。 拼桌 被定义为一个社会化的拼桌平台&#xff0c;既是社会化&#xff0c;同时也是一种全新的电商。用户可以在拼桌网上上搜索到自…

25个国外优秀的餐饮网站设计作品欣赏

这篇文章收集了25个国外优秀的餐饮网站设计作品&#xff0c;希望能带给你灵感。很多餐饮店都会建立自己网站&#xff0c;提供在线订餐服务&#xff0c;这些通常会搭配诱人的食物图片&#xff0c;吸引顾客订购&#xff0c;一起欣赏。 McDonald’s Ruby Tuesday La Bruschetta To…

非常实用的10款网站数据实时分析工具

网络分析工具可以帮助你收集、预估和分析网站的访问记录&#xff0c;对于网站优化、市场研究来说&#xff0c;是个非常实用的工具。每一个网站开发者和所有者&#xff0c;想知道他的网站的完整的状态和访问信息&#xff0c;目前互联网中有很多分析工具。 1. Google Analytics 这…

在Nginx下对网站进行密码保护

很多时候我们需要对一些网站进行密码保护&#xff0c;比如团队内部的站点、demo站点等等。这里所说的密码保护是服务器级的&#xff0c;并非网站应用层的注册登录那一套&#xff0c;而是利用服务器配置和htpasswd文件来实现访问的密码验证。最后的效果就类似&#xff08;不同浏…

怎么在页面中使用mixins_Elementor新手教程:怎么使用elementor设计网站页面!

Elementor是一款网页设计生成器&#xff0c;通过‘拖放’来设计我们的站页面&#xff0c;不需要任何代码知识就能完全设计出精美并且响应式的页面&#xff0c;通过这个工具让很多小白都能实现自己外贸建站的想法。推荐阅读&#xff1a;Elementor Pro插件购买和安装详细教程Elem…

如何在网站上加入google地图 .net (by yfdong22)

1.上网下载GoogleMaps.Subgurim.NET(bll文件来的) 2.在.net&#xff0c;vs2005里引用下载的文件&#xff0c;再添加工具选项, 3.在左边拉动一个GMap到页面里&#xff0c;代码就写成以下这样 using Subgurim.Controles; protected void Page_Load(object sender, EventArgs e) …

nginx检测到隐藏目录_提升网站安全性-隐藏nginx信息

一般使用nginx的web网站&#xff0c;访问网站时&#xff0c;可以从请求头中看到使用了nginx以及nginx的版本号。暴露这些信息将给网站带来一定的风险&#xff0c;因此安装nginx时最好把这些信息隐藏。隐藏nginx 版本号与WEB服务器信息如果未安装nginx&#xff0c;先去官网下载压…

8个精美的 HTML5 网站案例分享

与大家分享 8 个精美的 HTML5 网站作品。HTML5 是现在Web开发领域的热点&#xff0c;越来越多的开发人员开始使用 HTML5 来开发交互性强、效果出众的Web应用和游戏。希望这些 HTML5网站案例能帮助大家更好的学习 HTML5 网站制作。 Worry Free Labs Fore Fathers Group TEDxPort…

分享14个超酷的视差滚动效果网站

为什么80%的码农都做不了架构师&#xff1f;>>> 日期&#xff1a;2012-3-31 来源&#xff1a;GBin1.com Javascript视差滚动特效最早出现的时候使用多个不同的透明PNG背景图片叠放来实现&#xff0c;如果我们移动鼠标&#xff0c;将会以不同的速度移动不同层次上 …

怎么让网站在本地支持SSL?

打开vs&#xff0c;点击项目&#xff0c;查看属性&#xff0c;打开ssl 如果有什么危险提示&#xff0c;就允许 右击项目&#xff0c;选择属性 运行项目 本文转自毒逆天博客园博客&#xff0c;原文链接&#xff1a;http://www.cnblogs.com/dunitian/p/5248957.html&#xff0c;如…

不同类型的网站,不同的优化策略

不同类型的网站&#xff0c;不同的优化策略1&#xff0e;网站站群的使用与构建如果优化的主关键词特别多&#xff0c;在30个以上&#xff0c;这时要考虑使用站群来优化&#xff0c;因为一个网站不可能优化上来这么多的关键词。例如&#xff0c;需要优化30个关键词&#xff0c;那…

推荐10个HTML5游戏网站

2019独角兽企业重金招聘Python工程师标准>>> 导读&#xff1a;原文作者Julio Rivera是一名来自纽约市的创意总监和网页设计师&#xff0c;他是Underworld Magazines的创始人。以下是全文。 到现在为止&#xff0c;我玩了好几年的在线游戏。我已经看过用Flash和其他软…

推荐10个ICON网站,程序员必备!

每个人都爱漂亮的图标&#xff0c;如果能免费下载那就更好了。网络上也很多这样的网站&#xff0c;提供免费的图标下载&#xff0c;个人对国内的几个设计网站提供的下载也感觉挺好的&#xff0c;虽然很多是转国外的或者是模仿的&#xff0c;不过制作的相当不错&#xff0c;今天…

扫描线算法 python_刷了几千道算法题,这些我私藏的刷题网站都在这里了

遥想当年&#xff0c;机缘巧合入了 ACM 的坑&#xff0c;周边巨擘林立&#xff0c;从此过上了"天天被虐似死狗"的生活…然而我是谁&#xff0c;我可是死狗中的战斗鸡&#xff0c;智力不够那刷题来凑&#xff0c;开始了夜以继日哼哧哼哧刷题的日子&#xff0c;从此&qu…