HTTP 使用指南 | 青训营笔记

60 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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字段的取值与含义

image.png

  • 状态码

在状态码的设计里面都是用三位来表示,从1开头到5开头,每一个都有不同的含义,下面是较为常见的状态码。

image.png

  • 常用请求头

image.png

  • 常用响应头

image.png

  • 缓存处理优先级示意图:

image.png

  • cookie

可以借助cookie帮我们携带一些用户身份相关的信息,Set-Cookie是返回的浏览器帮我们设置的一些cookie信息,一定要携带Name=value这样的键值对,每个cookie都是以Name=value这样的键值对的形式来存在的;其他可以返回一些和控制相关的字段,比如ExpiresPathDomain等等。

image.png

场景分析

  • 例:首先打开浏览器输入今日头条网站的地址:www.toutiao.com,然后按F12,切换到network,这个200状态码是一定发起了请求吗?是真的有过一遍完整的网络流程吗?

image.png

下面打开字端分析,可以看出这个200的请求状态码是from cache的,说明这个请求是从本地缓存拿到的一个响应,而没有经过真实的网络链路。

image.png

下面我们来看看这个请求里面的缓存策略是什么样的,我们可以看到与缓存相关的有cache-control,声明了max-agecache-control是强缓存相关的,说明静态资源设置一个强缓存的策略,max-age是它的生存周期,单位是秒,换算过来就是一年。

image.png

静态资源方案

  • 静态资源方案:缓存+CDN+文件名hash

结合上面的案例,静态资源部署都需要用到缓存这个概念,用了缓存之后,用户可以优先从本地缓存读取文件,所以就可以很快的拿到执行结果。但是如果第一次打开页面的时候本地没有缓存,我们也希望用户尽可能的快打开资源,所以我们一般都会把静态资源放到CDN(Content Delivery Network)上,它可以通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。下图是CDN简单原理图。

image.png

那我们要如何保证用户每次刷新拿到的都是最新的文件呢?一般我们会在文件名上做一些手脚,例如加一个文件hash,使每一次文件内容有变化的时候文件名也会变化。