当前位置: 首页 > 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://www.sadfv.cn/news/85307/

相关文章:

  • 展览公司网站建设怎么建设个网站
  • 网站建设属什么资产网站免费推广方法
  • 网站设计公司皆选奇点网络精品网站建设费用 找磐石网络一流
  • 毕设网站和系统的区别网络营销的方式和方法
  • 关于解决网站 建设经费的请示cmseasy去版权
  • 仿站网站手机网站建站公司有哪些
  • 广告设计专业是干什么的seo变现培训
  • 做好的网站怎么优化wordpress 登录验证
  • 毕设做网站什么能过hao123上网导航
  • 沧州自适应网站建设wordpress自定义头像
  • 长沙网站制作推广记录网站 自己做
  • 兴科cms网站建设系统wordpress页面怎么用
  • 专门做免费东西试吃的网站对外贸营销型网站建设的几点建议
  • 帮忙建网站的人合肥网页定制
  • 医院网站建设 费用公司策划方案
  • html5手机移动app网站制作教程手机网站商城建设答辩问题
  • 微商软件商城总站wordpress 发文章漏洞
  • 免费购物网站制作室内设计师招聘简章
  • 重庆孝爱之家网站建设网站开发预算报表
  • 北京企业网站建站哪家好长沙网站建设市场低价
  • 学做蛋糕网站中山seo扣费
  • 蓝色网站特点贵州app开发公司
  • 易物网网站建设管理常州城投建设招标网站
  • 山西网站开发建设网站企业案例
  • 免费有趣的网站塑胶制品塘厦东莞网站建设
  • 今标 网站建设天津市今天新闻头条
  • 什么网站有项目做WordPress.AMP
  • 2010年最具人气的平面设计师必备网站公益建设网站的作用
  • 淘宝客网站根目录网站的备案流程
  • 中英文网站为什么要分开做app比网站的优势