HTTP请求历程 | 青训营笔记

67 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天。

在大作业的后端项目中,我们对后端的请求都是使用了http协议,本篇文章主要介绍了一次http请求所经历的步骤。

1. 主要步骤

一般来说,一次http请求主要会包括以下几个步骤:

  1. DNS解析:浏览器缓存→路由器缓存→DNS服务器
  2. HTTP协议生成HTTP请求报文
  3. 通过TCP协议与服务器建立连接并发送报文
  4. 服务端解析接收到的请求,返回对应的资源
  5. 客户端解析接收到的内容后浏览器渲染出页面
  6. 与服务端断开连接

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部分组成。