网页的本质就是超级文本标记语言,通过结合使用其他的Web技术(如:脚本语言、公共网关接口、组件等),可以创造出功能强大的网页。因而,超级文本标记语言是万维网(Web)编程的基础,也就是说万维网是建立在超文本基础之上的。超级文本标记语言之所以称为超文本标记语言,是因为文本中包含了所谓“超级链接”点。
本篇文章给大家带来的内容是关于使用node解读http缓存的内容,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
用node搞web服务和直接用tomcat、Apache做服务器不太一样,
很多工作都需要自己做。缓存策略也要自己选择,虽然有像koa-static,express.static这些东西可以用来管理静态资源,但是为了开发或配置时更加得心应手,知其所以然,有了解http缓存的必要。另外,http缓存作为一个前端优化的一个要点,也应该有所了解。
什么是http缓存
RFC 7234 (https://tools.ietf.org/pdf/rfc7234.pdf)指出HTTP缓存是响应消息的本地存储,并且是控制其中消息的存储、检索和删除的子系统。
通俗讲: http协议规定了一些指令, 实现http协议的服务器和浏览器根据这些指令决定要不要以及如何把响应存储起来以备后续使用.
http缓存的意义
提高响应速度
减少带宽占用, 省流量
减小服务器压力
不指定任何与缓存有关的指令
这种情况下浏览器不做缓存, 每次都会想服务器请求. 但是比较奇怪的是在nginx的实现中, 这种情况下还是被代理服务器做了缓存.也就是说, 当多次请求同一个资源时, 代理服务器只向源服务器请求一次.
强制缓存
所谓强制缓存就是给出资源的到期时间expires或者有效时间max-age, 在这个时间之内该资源应该被缓存.
如何让一个资源被强缓存
1.expires
这个字段定义了一个资源到期的时间. 看一个实际的例子:
可以看到这个expires
是个GMT
时间, 它的工作机制是, 首次请求时, 服务器在响应中加上expires
标识资源的到期时间, 浏览器缓存这个资源, 再次请求时, 浏览器将上一次请求到这个资源的过期时间与自己的系统时间对比, 若系统时间小于过期时间, 则证明资源没有过期, 直接用上次缓存的资源, 不必请求; 否则重新请求, 服务器在响应中给出新的过期时间.
const d = new Date(Date.now() + 5000);
res.writeHead(200, {
'Content-Type': 'image/png',
'expires': d.toGMTString()
});
res.end(img);