一、协议栈
- 应用层——提供服务。HTTP、HTTPS、DNS、FTP。
- 传输层——为应用层提供端到端的通信。UDP、TCP。
- 网络层——主机之间通信。
- 数据链路层——负责主机与网络之间的数据交换。
- 物理层——实际透明传输数据的硬件相关。
二、http概念
http协议是超文本传输协议,是发送请求和接受响应的规范。
http协议是是应用层协议,基于传输层的TCP协议。
三、http请求模型
简单的http请求模型,拥有2个端——客户端、服务端;拥有2个动作——请求、响应。
谁发起请求,谁就是客户端。通常浏览器是客户端。如果浏览器和服务器中间有一层nodeJs中台,那么他既是客户端也是服务端。
四、http的工作过程
一次http操作称为一个事务(由多个步骤组成,只要有一个步骤失败就整体失败的规则),其工作过程分为四个步骤(以http1.x~2.x为主的tcp传输层举例):
- 客户端与服务端建立tcp连接。
- 客户端发送请求,包括:资源标识符url、协议版本、各种描述请求的信息和请求内容。
- 服务端接收请求,给予相应的响应。
- 客户端接收响应,断开tcp通信链路。
所谓的三次握手和四次挥手,握手都发生在第一步,挥手都发生在第四步。
http事务占用IO资源,IO资源非常宝贵,所以断开TCP连接是非常重要的。
1.请求组成
- 请求行:方法符号 + url + 协议版本
- 消息报头:描述请求的信息
- 请求正文:post 的 body
2.响应组成
- 状态行,协议版本 + 状态码 + 描述文本
- 消息报头:描述响应的信息
- 响应正文:response
五、http状态码
- xx:提示信息,比如101协议协商:判断是否需要切换协议。发送一个http1.1的协议,然后服务端返回1xx说明希望另一个版本的协议进行通信。比如请求websocket。
- xx:成功、接收
- xx:重定向。
- xx:客户端错误,请求有语法错误或无法实现。401,协议层验证错误。403,没有访问权限。
- xx:服务器错误。502Gateway,反向代理错误。
六、重要的http版本
http1.1:1999年,长链接机制。
http2.0:2015年,默认已经加密了,带s。
http3.0:基于UDP协议。
https:实际上不是http协议,与比http协议多了一个加密模块。
七、浏览器键入url后发生了什么?
- 键入url。
- 检查网络通畅,可能通过一些硬件、软件网关设备。
- dns解析。把字符串转为对应的ip地址,要从dns服务器查询,这个服务器相当于一个超大的数据库。然后浏览器才能知道要访问哪个服务器。dns协议与http协议一样,都是应用层协议。
- 发送请求。
- 服务器收到请求,由服务器的代理转发到某个具体的服务上。
- 具体的服务会返回相应的响应。返回的过程经过的路由节点,不一定是请求时候的路由节点,这是因为互联网的网络结构。
- 浏览器接受响应后解析数据、渲染。
八、互联网为什么是一个网络结构?
互联网上有无数联网的设备,这些设备是互联网上的节点。
当一个请求发送时,它会根据它的一个路由表取把信息跳(传递)到下一个节点。
如果下一个节点挂了,那么它会寻找路由表的第二、第三、第四选项。
所以网络结构是为了提升互联网信息传递的健壮性的。
这个路由表是一个策略,可以设置优先级,理论上会跳最少的节点。