15分钟巩固你的HTTP知识体系,和谁扯皮都没问题
一、简介
前端工程师打交道最多的就是浏览器,不管做什么都离不开浏览器,其中HTTP协议往往会被我们忽略,但其实资源缓存、CDN加载、页面性能优化等等都离不开对HTTP协议的了解。
最简单的例子:
- 输入url打开网页
- AJAX获取数据
- img标签加载图片
从输入URL到看到页面发生了什么?
DNS解析
发起TCP连接
发送HTTP请求
服务器处理请求并返回HTTP报文
浏览器解析渲染页面
连接结束。
其实,我们了解这个过程对前端的性能优化是有意义的,在这个过程中找到优化点,去缩短请求的时间,从而去加快web前端的访问速度,提升性能
详细参考:https://juejin.cn/post/6844903832435032072
二、HTTP协议基础及发展历史
HTTP协议的发展历史
http/0.9:
(1)只有一个命令get
(2)没有header等描述数据的信息
(3)服务器发送完毕就关闭TCP连接
http/1.0:
(1)增加了很多命令(如get、post、put、delete、head等)
(2)增加响应状态码和header数据描述信息
(3)多字符集支持、多部分发送、权限、缓存等
http/1.1:
(1)持久链接(http1.0中每发起一次http请求,就要进行一次TCP连接;减少三次握手的消耗,提高性能 tcp 建立服务器与客户端的连接不再关闭)
(2)pipeline(一次TCP连接可以发送多个http请求,但是服务端同一时间只能处理一个http请求,处理完成后才能处理下一个请求,即服务端处理请求是串行的)
(3)增加host与其他一些命令(增加了host头部字段,可以在同一物理服务器上跑多个不同Web服务器)
http/2.0:
(1)所有数据以二进制传输
(2)同一个连接里面发送多个请求不再需要按照顺序来,即服务端处理请求是并行的
(3)对头部字段进行压缩,减少带宽占用量;及推送功能(服务端可以主动发送信息,根据http请求的HTML的文件主动推送文件中需要用到的js文件和css文件,不用等到客户端解析渲染时再请求,大大提高了效率)
创建一个http服务
HTTP的三次握手
http是不存在连接这个概念的,只有请求与相应
请求和响应都是数据包,需要一个传输的通道,这个通道由TCP创建。