工作打交道最多的还是浏览器,对于输入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
协议不会对请求和响应之间的状态做出保存,即:对于发送过的请求和响应不做持久化处理(这样的设计有利于快速的处理大量的事务),在HTTP
1.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
攻击。