开始之前,我们先介绍一下客服端和服务器的概念,以及网络的五层架构
- 客户端和服务器
1.客户端的概念:什么是客户端?客户端其实就相当于一个浏览器,用户输入网址向服务器发送请求,服务器把请求响应给客户,并生成响应的页面。
2.服务器的概念:什么是服务器?服务器就相当于一台装有特殊软件的电脑,用于接收客户端的请求,对客户端提供一系列服务。 - 网络的五层架构
网络的五层架构如图所示。(至于这些架构层可以先不理解,我们接着看) 当我们在浏览器中输入网址按下回车之后,会发生如下经历。
1.通过DNS解析得到IP地址
- 客户端首先会提出解析请求,并且将请求发送给本地的域名服务器。
- 当本地的域名服务器收到请求后,会先查询本地的缓存记录,如果有,则会把查询的结果返回。
- 如果本地缓存没有此记录,则会直接把请求发送给根域名服务器,根域名服务器会在子域中查找主域名服务器,然后会将地址返回给本地域名服务器。
- 本地域名服务器会向上一步的域名服务器发送请求,然后接受请求后,域名服务器会查询缓存,如果没有此记录,则会返回到相关的下级域名服务器的地址。
- 重复上一步,直到查询到正确的缓存记录为止。
- 本地域名服务器将查到的结果保存到缓存中,为下一次的使用做好准备,与此同时会将结果返回给客户端(这里的结果就是我们的IP地址了)。
- 根据IP地址就会找到对应的服务器。
2.通过TCP三次握手与服务器建立连接
HTTP协议是使用TCP作为其传输层协议的,为了准确传输数据,TCP协议采用三次握手策略建立连接进行数据传输,具体三次握手方式如下:
- 客户端首先发送一个SYN(synchronize)标志的数据包给服务器端。
- 服务器端收到之后,会向客户端回传一个带有SYN/ACK(acknowledegment)标志的数据包以示传达确认信息。
- 客户端收到之后,也会向服务器端回传一个回传一个带有ACK(acknowledegment)标志的数据包以示传达确认信息,握手结束。
TCP是一个可靠的面向连接的协议,当三次握手过程中出现中断的情况,TCP会再次发送相当的数据包。
3.客户端发送HTTP请求
- 构建HTTP请求报文。
- 通过TCP协议中发送到服务器指定端口(HTTP协议80/8080, HTTPS协议443)。
HTTP请求报文包括请求头和请求主体两个部分,其中请求头包含了非常重要的信息,包括请求的方法(GET / POST)、目标url、遵循的协议(http / https / ftp…),返回的信息是否需要缓存,以及客户端是否发送cookie等。
4.服务器根据请求做出http响应
- 服务器接收到客户端发送的HTTP请求后,查找客户端请求的资源数据。
- 返回响应报文。
5.浏览器得到响应内容,解析HTML内容,对这棵树进行渲染
- 构建DOM(Document Object Model)树。
- 构建CSS树。
- 合并DOM树和CSS树,形成渲染树。
- 显示在客户端上
6.四次挥手断开连接
在数据传输完成之后,需要将客户端和服务器的连接断开,TCP协议采用四次挥手策略将客户端和服务器的连接断开,具体四次挥手方式如下:
- 客户端发送断开连接的请求。
- 服务器确认收到,并检查数据在传输过程中的完整,处理完所有的事件,防止出错。
- 服务器发送断开连接请求。
- 客户端确认收到 最后断开连接,两者不可再传输数据。