Caching Files With Service Worker

浏览器的缓存是把双刃剑,使用得当的话,可以加快页面的加载速度,减少向服务器的请求次数,进而减少带宽和服务器压力。但是如果使用不得当的话,会造成新功能或者问题修复未能正常生效等问题,用户体验有所下降。常见的缓存方式包括强制缓存和协商缓存,分别用在不同情境下,通过相关的 Headers 控制(感兴趣的可以看之前 HTTP Headers 文章中关于缓存的介绍),也是大多数网站的首要技术选择。那么还有什么其他缓存相关的技术可以使用吗?让我们来关注一下Service Worker

快速入门

Service Worker旨在通过代码精确控制缓存文件和 HTTP 请求,是已经被废弃掉的AppCache技术的替代方案。Service Worker有相关的生命周期概念,如下所示:

Read more

HTTP Headers

上一篇我们对 HTTP 做了整体的介绍,主要介绍了 HTTP 不同版本的区别以及 HTTP Messages 相关的 Method,Status 和 Reason Phrase。这篇文章我们将重点放在 Headers 上,谈一谈 Headers 相关的 API 以及日常开发中涉及到的内容。

The Headers Interface

Headers 在浏览器环境下是有相关的 Interface 的,常和 Fetch API 结合使用。Headers 实例内部部署了 Iterator,所以可以使用for...of来遍历,相关的方法从字面意义上都很好分辨用途,如下所示:

  • append(name,value): 添加一个 name 对应的新值,如果 name 存在则在原来的 value 上追加新值,用逗号隔开
  • set(name, value): 添加一个 name 对应的新值,如果 name 存在则覆盖原来 name 对应的 value,所以更推荐使用set来添加新值
  • get(name): 返回 name 对应的 value
  • delete(name): 删除 name 及其对应的 value
  • has(name): 判断 name 是否存在
  • keys(),values(),entires(): 返回对应的迭代器用于遍历

Headers Interface 为我们提供了一整套维护 Headers 的机制,并且可以很方便的遍历其中的内容,所以推荐使用HeadersInterface 来维护需要的 Headers。

在使用Headers Interface 时需要注意,大写的 name 会自动转为小写,因为 HTTP 规范中明确 Headers 是大小写不敏感的,并且 HTTP/2 只支持小写的 Header name。

Read more