这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
本堂课重点内容
- HTTP协议是什么
- 协议分析/发展
- 场景分析
- 静态资源方案
HTTP协议是什么
- HTTP全称是Hyper Text Transfer Protocol(超文本传输协议),它是一种运行在TCP之上的简单的请求-响应协议。HTTP也是一个简单可扩展的协议,同时也是无状态的协议,每一个请求之间都是孤立的,当前的请求并不知道之前的请求做过什么事情或携带什么信息。
协议分析/发展
- HTTP/0.9(单行协议)
在这个协议版本中只有GET一个方法,响应的也只有HTML文档。
- HTTP/1.0(构建可扩展性)
在这个协议版本中除了起始行的GET外,还增加了Header、状态码,丰富了协议可以承载的语义,也就可以承载多种文档类型,例如HTML、CSS等等。
- HTTP/1.1(标准化协议)
在这个协议版本中可以做链接复用、缓存、内容协商等等,1.1版本是目前为止使用时间最久的一个版本。
- HTTP/2(更优异的协议)
这个协议版本于2015年正式推出。
- HTTP/3(草案)
正在研究。
- Mehod字段的取值与含义
- 状态码
在状态码的设计里面都是用三位来表示,从1开头到5开头,每一个都有不同的含义,下面是较为常见的状态码。
- 常用请求头
- 常用响应头
- 缓存处理优先级示意图:
- cookie
可以借助cookie帮我们携带一些用户身份相关的信息,Set-Cookie是返回的浏览器帮我们设置的一些cookie信息,一定要携带Name=value这样的键值对,每个cookie都是以Name=value这样的键值对的形式来存在的;其他可以返回一些和控制相关的字段,比如Expires、Path、Domain等等。
场景分析
- 例:首先打开浏览器输入今日头条网站的地址:www.toutiao.com,然后按F12,切换到network,这个200状态码是一定发起了请求吗?是真的有过一遍完整的网络流程吗?
下面打开字端分析,可以看出这个200的请求状态码是from cache的,说明这个请求是从本地缓存拿到的一个响应,而没有经过真实的网络链路。
下面我们来看看这个请求里面的缓存策略是什么样的,我们可以看到与缓存相关的有cache-control,声明了max-age,cache-control是强缓存相关的,说明静态资源设置一个强缓存的策略,max-age是它的生存周期,单位是秒,换算过来就是一年。
静态资源方案
- 静态资源方案:缓存+CDN+文件名hash
结合上面的案例,静态资源部署都需要用到缓存这个概念,用了缓存之后,用户可以优先从本地缓存读取文件,所以就可以很快的拿到执行结果。但是如果第一次打开页面的时候本地没有缓存,我们也希望用户尽可能的快打开资源,所以我们一般都会把静态资源放到CDN(Content Delivery Network)上,它可以通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。下图是CDN简单原理图。
那我们要如何保证用户每次刷新拿到的都是最新的文件呢?一般我们会在文件名上做一些手脚,例如加一个文件hash,使每一次文件内容有变化的时候文件名也会变化。