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版本,状态信息

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

相关推荐
pcplayer7 分钟前
Delphi WebService 使用 HTTP Header 管理 Session
http·webservice·soap·web server·http header
SendTomo42 分钟前
跨设备文件互传新方案
javascript·网络·webrtc·html5·p2p
啦啦啦啦啦zzzz1 小时前
moduo网络库 Acceptor TcpConnection
服务器·网络·c++·reactor·网络库
微硬创新1 小时前
大点数模拟量采集落地:耐达讯自动化32路0-20mA适配PROFINET总线实践解析
运维·人工智能·网络协议·自动化·信息与通信
Shadow(⊙o⊙)2 小时前
Linux网络部分——TCP协议服务端客户端交互接口,入门级硬核解析1.0
linux·网络·tcp/ip
小新讲网安2 小时前
HTTP请求走私攻击实战:CL.TE与TE.CL绕过前端服务器全解析
服务器·前端·网络·web安全·http·架构·漏洞
zhengqiqiqinqin2 小时前
Ubuntu16.04 升级ssl到3.5.7、升级ssh到9.8p1
网络协议·ssh·ssl
上海安当技术13 小时前
固件签名与Secure Boot:安当CAS如何构建汽车固件信任链
网络·汽车·信任链·boot·secure·固件签名·安当cas
上海安当技术14 小时前
诊断接入认证:安当CAS如何堵住汽车网络安全的物理后门
网络·web安全·汽车·access·secure·安当cas·诊断接入认证
ze^014 小时前
【软考信息安全】第2章 网络攻击原理与常用方法
网络·web安全·网络安全