工作打交道最多的还是浏览器,对于输入URL到页面呈现的步骤类似的文章其实也是看了不少,但是还是觉得差点什么;最后选了《图解HTTP》这本书,基本也覆盖了HTTP协议中的大部分内容,自己也进行了知识点提炼和总结,在这里记录一下;
Web及网络基础
Web 是建立在 HTTP 协议上通信的,而 HTTP 是 TCP/IP 协议族内部的一个子集。
📌TCP/IP 协议族
为了满足不同的硬件、操作系统之间的通信,需要制定约束的规则,而这些规则也就称为协议;而 TCP/IP 指的是 TCP 和 IP 两种协议,也有说法是 IP 协议通信过程中,使用到的协议族的统称。
TCP/IP 协议族是基于分层进行管理的,分层化的设计使得改动以及任务划分更加清晰;

在发送请求的时候,客户端在应用层(HTTP协议)发出一个请求,生成请求的HTTP报文,为了传输方便,在传输层(TCP协议)将获取到的报文切割成报文段转发给网络层(IP协议),搜索对方的地址后转发给链路层; 同样的服务器端按照倒序,直到服务端应用层接收重组出HTTP报文,请求才算接受完成。
📌TCP的确保可靠性
相比较UDP为面向非连接的协议,TCP协议则是在发送数据前需要建立可靠的连接;通常TCP协议通过三次握手的策略以及Flag(SYN,ACK)标志来保证通信的可靠性。

- 发送端首先发送一个带
SYN标志的数据包给对方 - 接收端收到后,回传一个带有
SYN/ACK标志的数据包以示传达确认信息 - 最后,发送端再回传一个带
ACK标志的数据包,代表“握手”结束
若在握手过程中某个阶段莫名中断,TCP 协议会再次以相同的顺序发送相同的数据包。
同时TCP协议可以提供字节流服务,这样当HTTP报文主体的数据较大的时候,更易于传输(例如:大图加载的时候是一块一块进行加载)
📌IP协议 - 路由选择及数据传输
位于网络层的IP协议的主要作用就是各种数据包的传送;
IP协议不提供可靠的传输服务,只是尽自己最大努力支付来传输数据包,可靠性由上层协议提供(TCP协议) IP协议也是一种无连接协议,事先不会建立会话;
IP地址及MAC地址
IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。IP 地址可以和 MAC 地址进行配对
,依据ARP协议,可以通过IP地址反查出对应的MAC地址
ARP协议
ARP 同样也是网络层协议,可以通过目标主机的IP地址,查询解析目标主机的MAC地址;中转时利用下一站设备的MAC地址继续搜索下一个中转对象;
每台主机在自己的ARP缓存区中都有一个ARP列表,保存了是近期与自己有过通信的主机的IP地址和MAC地址之间的对应关系。在进行数据中转的时候,向本网段的所有主机发送一个携带IP地址的ARP请求数据包,收到后查询自己的IP地址,是否符合条件;
HTTP 协议及报文简述
HTTP 协议规定在数据由客户端开始建立通信,而服务端没有获得请求之前不会进行响应,所以在一条通信线路来说,HTTP 协议可以明确区分哪一端是客户端,哪一端是服务端。
📎HTTP 协议的特性
-
无状态
HTTP协议不会对请求和响应之间的状态做出保存,即:对于发送过的请求和响应不做持久化处理(这样的设计有利于快速的处理大量的事务),在HTTP1.1 中可以可以通过cookie进行管理状态满足业务需求 -
持久连接
在初始的
HTTP协议中,每进行一次HTTP通信需要断开一次TCP连接,但请求包含多个图片的文档时候,会频繁断开TCP连接,所以在后期的版本中(1.0 部分及 1.1 之后)采用了持久连接的方法。 其特点是: 只要任意一端没有明确的提出断开连接则继续保持TCP的连接状态 -
管线化
因为持久连使得多数请求可以以管线化的方式进行发送请求,使得可以不用等待一个请求完成就可以继续发送,可以做到**并行发送**多个请求。 使用管线化的方式可以使得请求更快的结束,请求数目越多,时间差越明显;
-
基于
Cookie的状态管理由于
HTTP协议为了减少服务器及内存的消耗被设计为无状态,但是各种业务中则需要保存登录状态等需求,于是引入了Cookie技术。Cookie技术通过在请求和响应报文中写入cookie信息来控制客户端的状态。Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。当在
cookie中设置了HttpOnly属性,那么通过 js 脚本将无法读取到cookie信息,这样能有效的防止XSS攻击。