zsdnishishui的博客

唯有创造才是“真”

HTTP 概述

1. 起源

1.1 HTTP之父(李博士)

​ 90年代,为了解决多个实验室之间纯文本共享的问题,而发明了HTTP(超文本传输协议)。超文本就是含 有超链接的文本。两台电脑之间传输文件还好解决一些,但是多台电脑之间怎么传输呢。一种就是提供一种共享的平台,也就是中心化的思想。一种就是每台电脑都有副本,也就是去中心化的思想。李博士选择了第一种,进而就有了服务器的概念,c/s架构就此诞生。

2. 底层协议

2.1 OSI七层网络模型

2.1.1 物理层

​ 就是看的见的部分,比如:蓝牙,usb端口,网线端口,集线器,网卡,modem,中继器等。传输类型有:无线,有线。传输的方式有:单向,半双工,全双工。传输通道的大小:带宽。

2.1.2 数据链路层

​ 也就是两个网卡之间怎么通讯的问题。就引入了MAC协议,和MAC地址。就像两个人打电话一样,我要先知道对方的手机号,才能建立通话。MAC地址就是那个手机号。相关的网络设备: 2层交换机,网桥。

2.1.3 网络层

​ 多个网卡之间怎么通讯的问题。就引入了路由机制和ip地址。ip地址的出现就是为了更好的找到mac地址。比如我想找到张三这个人,但是公司有100人,一个一个的询问太慢了,所以如果知道他坐在哪一排,就好找一些是吧。路由的发展历程:静态路由表,动态路由表,动态分级路由表。静态路由表可以理解为员工座次表,但是员工有时会变动座位,就出现了动态路由表,但是员工越来越多了,动态路由表查询效率太慢了,就引入了分级查询。也就是一级一级的查下去。类似数据结构中的树。

​ 最出名的协议:ip协议。

2.1.4 传输层

​ 这一层有了进程的概念,有进程就会有端口。最出名的协议:TCP,UDP协议。下面会讲到。

2.1.5 业务层

​ 其中最出名的就是HTTP协议,SSL/TLS协议。

2.2 TCP/IP协议

​ 这是一个协议簇。多个协议之间会配合使用。

2.2.1 TCP协议

​ 有3次握手,4次挥手断开连接,保证可靠的连接。并且传输的数据是分块传输的,每一个块会自动寻址,到达目的地后会按顺序组合成一个完整的数据块。

2.2.2 IP协议

​ 包括路由和寻址功能,上面的网络层比较详细的讲了。

3. 组成部分

3.1 浏览器

​ 解析超文本,并显示出来的应用。作为客户端来使用,但是随着互联网的发展,其安全性越来越重要。比如:用户的隐私会被一些别有用心的人采集到。

3.2 服务器

​ 此处指的是web服务器。最常用的是tomcat,nginx,IIS。

3.3 URL

​ 指出文件所在的位置。也就是浏览器地址栏中的地址。为绝对路径,相对路径,锚点路径。

3.4 报文

3.4.1 请求头

​ 方法,状态码,http的版本,请求的载荷,请求头的参数等

img

3.4.2 响应头

img

3.5 代理

​ 位于客户端与服务器之间的实体,比如:vpn代理,nginx代理。vpn代理会虚拟出来一个ip地址,这样服务器只能看到虚拟地址,看不到真实的地址。nginx代理,代理的是服务器,客户端以为和真实的服务器交互,相比较vpn代理,就叫反向代理了。我们的浏览器是可以设置代理地址的。

3.6 缓存

​ 主要说的是浏览器的缓存。为了减少请求服务器的次数,提高了性能,比如:js文件,图片等

3.7 网关

​ 网关与代理的界限比较模糊。http请求一般是与web服务器进行连接。但是web服务器不能满足所有的资源请求,比如 FTP的文件。还有一些过滤网关,安全网关等。网关是一个逻辑概念。

4. 发展历程

4.1 http 0.9

只支持get方法,只是为了获取简单的html对象。

4.2 http 1.0

使获取图片,多媒体,表格成为可能,加入了更多的方法

4.3 http 1.0+

有了keep-alive,对虚拟主机的支持,对代理的支持

4.4 http 1.1

优化了keep-alive,加入了持久连接和管道机制。是目前应用最广泛的版本。

4.5 http 2.0

可参考 https://zhuanlan.zhihu.com/p/293378068

5. 识别

​ 由于http请求是无状态的,所以服务器不知道是谁发出的请求,就有了cookie机制。注意这种机制不只浏览器有。只是浏览器用的最广泛。请求头中有一个参数:Cookie,响应头中有一个参数:Set-cookie。是传送cookie,和设置cookie用的。它有广泛的应用:session机制,记录用户标识,网站浏览量,免登陆,广告观看量等。

6. 认证

6.1 基本认证

​ 在请求头上加入了Authorization,用于基本认证。但是会明文传输用户名与密码

6.2 摘要认证

​ 对Authorization参数进行加密传输,比如:JWT。

7.启迪

​ http的发展历经简单到复杂的过程。不会走一步到位的路,而是走逐步迭代升级的路。虽然这个过程会面对很多困难,但是总好过copy。因为copy的话自己很难成长,并且copy的东西很难在生根。