这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天。
在大作业的后端项目中,我们对后端的请求都是使用了http协议,本篇文章主要介绍了一次http请求所经历的步骤。
1. 主要步骤
一般来说,一次http请求主要会包括以下几个步骤:
- DNS解析:浏览器缓存→路由器缓存→DNS服务器
- HTTP协议生成HTTP请求报文
- 通过TCP协议与服务器建立连接并发送报文
- 服务端解析接收到的请求,返回对应的资源
- 客户端解析接收到的内容后浏览器渲染出页面
- 与服务端断开连接
2. 部分说明
-
DNS域名解析
- 首先会搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存);
- 如果浏览器自身的缓存里面没有找到,那么浏览器会搜索系统自身的DNS缓存;
- 如果还没有找到,那么尝试从 hosts文件里面去找;
- 在前面三个过程都没获取到的情况下,浏览器就会发起一个DNS的系统调用,向本地配置的首选DNS服务器发起域名解析请求。
-
TCP三次握手
- 服务端新建套接字,绑定地址信息后开始监听,进入LISTEN状态。
- 客户端新建套接字绑定地址信息后调用connect,发送连接请求SYN,并进入SYN_SENT状态,等待服务器的确认。
- 服务端一旦监听到连接请求,就会将连接放入内核等待队列中,并向客户端发送SYN和确认报文段ACK,进入SYN_RECD状态。
- 客户端收到SYN+ACK报文后向服务端发送确认报文段ACK,并进入ESTABLISHED状态,开始读写数据。服务端一旦收到客户端的确认报文,就进入ESTABLISHED状态,就可以进行读写数据了。
-
HTTP请求
HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP协议进行,否则无法连接。
一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4部分组成。