一、DNS 域名解析 —— 获取IP地址
- 什么叫DNS域名解析:大白话,就是将URL解析成对应的IP
- 浏览器DNS域名解析顺序:
本地hosts文件查询对应IP,如果有有,告诉浏览器去访问对应的IP
如果没有,去DNS服务器寻找 - DNS服务器层次结构
DNS服务器层次结构
- DNS服务器递归查询和迭代查询
DNS服务器递归查询和迭代查询
- 客户端首先,拿着域名去本地hosts递归查询,如果查询到了www.cnblogs.com对应的IP之后,直接执行第8步,后面就不需要去根DNS服务器查询IP了
- 如果本地没有查询到IP,就去根DNS服务器,根DNS服务器注意到其com后缀,于是向本地DNS服务器返回comDNS服务器的IP地址。本地DNS服务器再次向comDNS服务器发送查询请求,comDNS服务器注意到其www.cnblogs.com后缀并用负责该域名的权威DNS服务器的IP地址作为回应。最后,本地DNS服务器将含有www.cnblogs.com的IP地址的响应报文发送给客户端。
二、建立TCP链接 —— 三次握手结束,连接成功
找到了IP,我们就开始建立TCP连接
-
与服务器连接(三次握手)
三次握手
客户端发送一个带有SYN标志的数据包给服务端,服务端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息,最后客户端再回传一个带ACK标志的数据包,代表握手结束,连接成功。
三、发送HTTP请求 —— 发送请求 request
请求包含:行头体
- 行
POST Http://www.xxx.com HTTP/1.1
- 行
Connection: keep-alive
Content-Length: 612
Accept: application/json, text/plain, */*
Origin: http://192.168.5.104:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36
Content-Type: application/json;charset=UTF-8
Referer: http://192.168.5.104:8080/businessView
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: OUTFOX_SEARCH_USER_ID_NCOO=1076356267.7392054
- 体
{a:1,b:1}
四、服务器处理请求 —— 后端获取HTTP请求,根据需求处理
这个太灵活了,自行发挥想象后端小哥如何处理前端给来的数据,大概流程图
HTTP一条龙流程图
五、返回响应结构 —— HTTP响应
响应和请求差不多,包含行头体
HTTP/1.1 504 Gateway Timeout
X-Powered-By: Express
Date: Mon, 09 Dec 2019 01:20:50 GMT
Connection: keep-alive
Transfer-Encoding: chunked
六、关闭TCP连接
为了避免服务器与客户端双方的资源占用和损耗,当双方没有请求或响应传递时,任意一方都可以发起关闭请求。与创建TCP连接的3次握手类似,关闭TCP连接,需要4次握手。
image.png