当前位置: 首页 > news >正文

湘潭网站建设 诚信磐石网络淘宝指数网站

湘潭网站建设 诚信磐石网络,淘宝指数网站,网站读取速度慢,南京网站开发个人1. ETag HTTP 1.1中引入了ETag来解决缓存的问题。ETag全称是Entity Tag#xff0c;由服务端生成#xff0c;服务端可以决定它的生成规则。如果根据文件内容生成散列值。那么条件请求将不会受到时间戳的改动造成带宽浪费。下面是根据内容生成散列值的方法#xff1a; 1 var g…   1. ETag HTTP 1.1中引入了ETag来解决缓存的问题。ETag全称是Entity Tag由服务端生成服务端可以决定它的生成规则。如果根据文件内容生成散列值。那么条件请求将不会受到时间戳的改动造成带宽浪费。下面是根据内容生成散列值的方法 1 var getHash function(str) { 2 var shasum crypto.createHash(sha1); 3 return shasum.update(str).digest(base64); 4 } 与If-Modified-Since/Last-Modified不同的是ETag的请求和响应是If-None-Match/ETag。浏览器在收到带有ETag:14-389247298365字段的响应头后会在后面的请求中将其设置在请求头中If-None-Match: 14-389247298365。服务器端收到带If-None-Match: 14-389247298365的报头后会进行如下判断来决定返回新的内容还是只响应一个304状态码让浏览器使用本地缓存版本 1 var handle function(req, res) {2 fs.readFile(filename, function(err, file){3 var hash getHash(file);4 var noneMatch req[if-none-match];5 if (hash noneMatch) {6 res.writeHead(304, Not Modified);7 res.end();8 } else {9 res.setHeader(ETag, hash); 10 res.writeHead(200, OK); 11 res.end(file); 12 } 13 }) 14 } 2. Last-Modified 通常来说如果请求头中不包含ETag服务端会通过判断Last-Modified值来决定响应304状态码还是新的文件内容。Last-Modified顾名思义指的是文件的最后一次修改时间。与ETag一样在浏览器首次访问站点后服务端会在其响应头中设置一个Last-Modified的字段它的值是一个UTC格式的时间字符串。随后在浏览器对站点的第二次访问中会在其请求头中设置一个If-Modified-Since其值就是上一次返回的Last-Modified的值。服务器端会根据这个值是否与其本地文件的最后一次修改时间相同来判断是否使用缓存。代码如下 1 var handle function(req, res) {2 fs.stat(filename, function(err, stat){3 var lastModified stat.mtime.toUTCString();4 if (lastModified req.headers[if-modified-since]) {5 res.writeHead(304, Not Modified);6 res.end();7 } else {8 fs.readFile(filename, function(err, file){9 var lastModified stat.mtime.toUTCString(); 10 res.setHeader(Last-Modified, lastModified); 11 res.writeHead(200, OK); 12 res.end(file); 13 }); 14 } 15 }) 16 } 3. Expires 和 Cache-Control 以上两种的缓存判断都需要客户端向服务端先发送一个条件请求根据返回来决定是否使用缓存。需要一定的时间开销和带宽。而实际上浏览器最先判断的是Expires 和 Cache-Control。在服务端相应里设置Expires 或 Cache-Control浏览器会根据该值进行缓存。Expires是一个GMT格式的时间字符串。浏览器再接收到这个过期值后只要本地还存在对应缓存文件在到期时间之前它都不会再发起请求。但它的缺陷是浏览器与服务器之间的时间可能不一致导致文件提前过期或已经过期却还没删除。 而Cache-Control恰恰解决了这个问题 1 var handle function(req, res) { 2 fs.readFile(filename, function(err, file){ 3 res.setHeader(Cache-Control, max-age 10*365*24*60*60); 4 res.writeHead(200, OK); 5 res.end(file); 6 }); 7 } 上面的代码为Cache-Control设置了max-age值为10年max-age会告诉浏览器文件多长时间后过期进行倒计时式的计算。这样就可以避免客户端与服务器端时间不一致带来的问题了。此外Cache-Control还可以public、private、no-cache、no-store等更精细地控制缓存的选项。HTTP1.0时还不支持max-age如今的服务端在模块的支持下多半同时对Expires 和 Cache-Control进行支持如果浏览器中两个值都存在且同时被支持max-age会覆盖Expires。 这两种方法虽然节省了带宽和请求时间但其缺陷是当服务端的文件内容进行了更新时无法通知客户端更新。因为浏览器是根据URL进行缓存的所以我们一般在对静态资源使用缓存时也会对其设定版本号。使得客户端能请求到新的内容。一般更新机制有如下两种方式 每次发布web应用或静态资源的路径中附带对应的版本号http://url.com/?v20141216每次发布web应用或静态资源的路径中附带文件内容的hash码http://url.com/?hashsdasd4d因为文件内容更新并不意味着新的版本。所以使用hash值得方式会更加妥当一些。 转载于:https://www.cnblogs.com/WhiteCusp/p/4168304.html
http://wiki.neutronadmin.com/news/85307/

相关文章:

  • 建设网站一定要会代码吗wordpress采集ins
  • 做壁纸网站进入百度app查看
  • wordpress建站后发布网站聚合优化
  • 怎样看一个网站做的网络广告wordpress可视化编辑页面
  • 网站logo制作教程一般网站海报做一张多久
  • 罗定市住房和城乡建设局网站网站服务器时间查询工具
  • 长白山网站学做管理东莞市做网站的
  • 网站关键字怎么分割广州市新闻发布
  • 网站按钮特效深圳企业专业网站设计
  • 网站建设体会焦作市网站建设哪家好
  • 河北建设厅注册中心网站首页石景山网站建设公司哪个好
  • 网站开发第三方支付全国做膏药的网站有多少家呢
  • 淘宝网站的建设情况广东seo网站设计
  • 儋州网站建设wordpress编辑器代码
  • 网站被百度惩罚做网站业务好干吗
  • 我做的网站怎么打开很慢量品定制合伙人
  • 绵阳建网站哪家好建设网站怎么建立服务器
  • 网站建设费用支出方案苏州制作网站的公司哪家好
  • 可以做推广的门户网站wordpress 分类输出样式
  • 初中生做网站挣钱杭州网络营销推广公司
  • 网站联盟营销江苏省住房和城乡建设厅官网
  • pyton 网站开发网站的建设及维护
  • 大连 做网站公司个人主页网页设计源代码
  • 做网站的时候网站的第一个字母怎么在网站标题前面显示 比如谷歌g一样万网域名申请网站
  • 网站首页改版需求有没有做高仿手表的网站
  • 太原网站seo搜索优化wordpress广告代码是什么意思
  • 做网站用是内网穿透好搜索引擎优化的概念
  • 网站建设与管理专业就业方向jsp做的网站代码
  • WordPress情侣网站wordpress产品参数多图
  • 如何查网站域名备案重庆梁平网站建设报价