HTTP请求全过程解析【个人八股】

前面我们主要是聊了一下http的状态码以及请求方式,主要是在怎么用上?那么我们后续接着去深入HTTP底层去探究一下底层的一些奥秘

既然你了解了这么多有关于HTTP的知识,那请你说一说HTTP的请求过程以及原理!知道了原理,有没有想过用多线程的方式来下载文件?以及如何选择一段文件来进行下载的操作!

接着就是谈一下你对于HTTP报文结构的了解,响应报文和请求报文一样吗?

++HTTP 请求的过程与原理?++

HTTP 是基于 TCP/IP 协议的应用层协议,它使用 TCP 作为传输层协议,通过建立 TCP 连接来传输数据。

HTTP 遵循标准的客户端-服务器模型,客户端打开连接发出请求,然后等待服务器返回的响应。

首先是需要指出HTTP是应用层的协议,TCP/IP是传输层的协议,然后传输数据的方式是通过TCP建立的连接!

接着是需要知道谁和谁之间进行通信,客户端与服务器之间!请求方式就是,客户端发送一个请求(你点击了一个界面/链接),就会发送一个请求到达服务器!服务器根据你的请求来进行响应的过程!

  • 在浏览器输入 URL 后,浏览器首先会通过 DNS 解析获取到服务器的 IP 地址,然后与服务器建立 TCP 连接。

  • TCP 连接建立后,浏览器会向服务器发送 HTTP 请求。

  • 服务器收到请求后,会根据请求的信息处理请求。

  • 处理完请求后,服务器会返回一个 HTTP 响应给浏览器。

  • 浏览器收到响应后,会根据响应的信息渲染页面。然后,浏览器和服务器断开 TCP 连接。

这个过程我们前面前面聊过的,如果想了解DNS解析过程的小伙伴可以看看前两期的内容哈!

在知道了HTTP是什么之后应用层协议,怎么传输的之后基于传输层协议TCP/IP,你就需要知道到底是怎么获取到服务器的IP地址的,怎么建立TCP链接的这一系列的过程!

大家脑子里面大概要有这么一个过程:

DNS解析->IP地址->建立连接TCP/IP->客户端发送请求->服务器响应请求【这个过程中客户端一直等待服务器的响应结果!】

客户端发送一个请求到服务器,服务器处理请求并返回一个响应。这个过程是同步的,也就是说,客户端在发送请求后必须等待服务器的响应。在等待响应的过程中,客户端不会发送其他请求!

那你提到了客户端会一直等待服务器的响应,那么你有没有++想过用++ ++多线程++ ++的方式来下载一个文件呢++?

这就需要用到HTTP请求头当中的Range字段来进行处理了!

采用的是分片下载的方式,首先,通过 HEAD 请求获取文件的总大小 。然后根据文件大小和 线程数 ,将文件进行切割。每个线程负责下载一个特定范围的数据

需要知道当前的这个文件是多大?5MB,10MB?需要知道这些数据

然后是根据这个大小,和当前多线程的线程的具体梳理来进行数据的切割操作!将文件进行切割!每个线程下载它对应的负责的那一部分文件就可以了!

那怎么去设置线程下载的那一部分文件了,就需要用到下面的RANGE字段了!range字段是保留在HTTP请求头里面的!

可以通过设置 HTTP 请求头的 Range 字段指定下载的字节区间。例如,Range: bytes=0-1023 表示下载文件的前 1024 字节。

最后启动多线程下载。

++那我++ ++如果只要下载数据的前十个字节呢?++

只需要设置 Range 字段为 Range: bytes=0-9 即可。

好的我知道HTTP的请求过程以及原理了,那你可不可以++讲一讲HTTP的报文结构呢++?

HTTP 的报文结构分为:请求报文和响应报文。两者在结构上很相似,都包含了起始行、头部和消息正文。

既然你说有请求报文和响应报文,那你说一说HTTP请求报文的结构?

请求报文由请求行、请求头部、空行和消息正文组成。

①、请求行包括请求方法、请求 URL 和 HTTP 协议的版本。例如:GET /index.html HTTP/1.1

②、请求头部包含请求的附加信息,如客户端想要接收的内容类型、浏览器类型等。例如:

  • Host: ``www.javabetter.cn,表示请求的主机名(域名)

  • Accept: text/html,表示客户端可以接收的媒体类型

  • User-Agent: Mozilla/5.0,表示客户端的浏览器类型

  • Range:用于指定请求内容的范围,如断点续传时表示请求的字节范围。

③、请求头部和消息正文之间有一个空行,表示请求头部结束。

④、消息正文是可选的,如 POST 请求中的表单数据;GET 请求中没有消息正文。

首先至少要知道的就是不要少了请求行!包括了请求的方法,对应的URL的路径和HTTP协议的版本等一系列的信息!

接着是你要知道它附加的头部里面包含了哪些信息! 域名告诉我要访问哪个网址,响应的类型你需要返回什么样的文件,客户端浏览器浏览器的类型是什么

空行嘛,空一行,代表请求头部就上面的信息

消息正文里面的消息是可选的:比如你是post,你是要去修改表中的数据的,那么你的需要修改的数据就可以放到正文里面去!你如果是get,你本身只是去获取数据,就不需要放数据了!

emmmmm,再说一下HTTP响应报文的结构?

①、状态行

包括 HTTP 协议的版本、状态码(如 200、404)和状态消息(如 OK、NotFound)。例如:HTTP/1.0 200 OK

②、响应头部

包含响应的附加信息,如服务器类型、内容类型、内容长度等。也是键值对,例如:

  • Content-Type: text/plain,表示响应的内容类型

  • Content-Length: 137582,表示响应的内容长度

  • Expires: Thu, 05 Dec 1997 16:00:00 GMT,表示资源的过期时间

  • Last-Modified: Wed, 5 August 1996 15:55:28 GMT,表示资源的最后修改时间

  • Server: Apache 0.84,表示服务器类型

③、空行

表示响应头部结束。

④、消息正文(可选)

响应的具体内容,如 HTML 页面。不是所有的响应都有消息正文,如 204 No Content 状态码的响应。

其实这个部分是和请求的格式是差不多的!

最主要的区别还是在状态行和请求行的区别!状态行里面主要就是响应码,HTTP版本,状态信息

响应头部,包含了响应的附加信息,响应的内容类型,响应的是一个什么样的数据啊,资源什么时候过期等等

相关推荐
2401_8919573115 分钟前
简单了解传输层协议UDP
网络·网络协议·udp
AvatarAI_Walker29 分钟前
2026年7月安徽本地健康IP孵化行业观察:不同需求下的服务方向梳理
大数据·网络·tcp/ip·搜索引擎·精选
一棵星31 分钟前
WebSocket 长连接不稳?一次完整的排查与修复之旅
网络·websocket·网络协议
发量惊人的中年网工32 分钟前
AI服务器托管怎么选机房?GPU集群对机柜、电力和网络的硬要求
服务器·网络·人工智能
玖玥拾1 小时前
Unity 3D 笔记(十五)Unity/C# Socket 网络笔记4
服务器·网络·unity·c#
JackieDYH1 小时前
WebSocket-不同平台封装-Hooks和使用案例
网络·websocket·网络协议
andxe12 小时前
安科士 AndXe 技术博客:400G QSFP112 SR4 光模块|AI 算力与超算短距互联最优方案
网络·人工智能·光模块·光通信
shiyi.十一13 小时前
第2章:应用层 — 知识要点与架构
网络·计算机网络·架构
DFT计算杂谈13 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
水境传感 李兆栋13 小时前
GNSS 位移监测站 :毫米级感知,筑牢安全监测防线
网络