全面解析:HTML页面的加载全过程(二)--发送HTTP请求,并返回响应

70 阅读10分钟

一、发送HTTP请求

建立连接后,浏览器构造并发送一个HTTP请求到服务器

image.png

1、 http协议介绍

(1)HTTP,即[超文本传输协议](Hypertext Transfer Protocol),是一种应用层协议,用于从网络传输超文本到用户的浏览器。它定义了客户端和服务器之间请求和响应的格式。

(2)HTTP基于TCP/IP通信协议进行传送输数据(HTML文件、图片文件、查询结果等)。

(3)HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统

2、 HTTP协议之请求消息Request

可在浏览器控制台查看http请求信息

<img src="/image-20241115112822896.png" alt="image-20241115112822896" style="zoom:67%;" />

HTTP请求报文结构:

请求行(Request Line):

请求的资源路径(URL)。 所使用的HTTP版本(如HTTP/1.1或HTTP/2)。

请求HTTP方法(如GET、POST、PUT等)。

image.png

请求首部字段(Request Header Fields)

Accept:客户端能够处理的媒体类型。 Host:请求的资源服务器的主机名和端口。 User-Agent:客户端的浏览器信息。 Accept-Language:客户端接受的语言类型。 Accept-Encoding:客户端支持的压缩算法。 Authorization:客户端提供的认证凭证。 Cookie:存储在客户端的cookies,用于会话管理。 If-Modified-Since:如果资源在此时间后未修改,则返回304状态码。 Range:请求资源的一部分。 Referer:指示请求的来源页面。

空行(Empty Line):

请求首部字段之后是一个空行,表示首部字段的结束和实体正文的开始。 空行由回车符(\r)和换行符(\n)组成。

实体正文(Entity Body):

实体正文可以包含提交的数据,如表单数据、文件上传内容等

二、服务器处理请求并返回响应

服务器接收到请求后,根据请求URL匹配相应的服务器端路由规则,确定要执行的操作或调用的服务。 处理请求:执行相应的业务逻辑,如从数据库查询数据、调用API、生成动态页面等。 生成响应:服务器根据请求结果构建HTTP响应,实际返回的内容,对于HTML页面请求,通常就是HTML文档。

1、 HTTP协议之响应消息Response

服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息包括:状态行、消息报头、空行和响应正文

可在浏览器中查看

在这里插入图片描述

状态行:

包含HTTP版本、状态码和状态消息。 例如:HTTP/1.1 200 OK,表示请求成功。

响应首部字段:

Allow:资源允许的HTTP方法。 Content-Encoding:响应内容的编码方式。 Content-Language:响应内容的语言。 Content-Length:响应体的长度。 Content-Type:响应体的媒体类型。 ETag:资源的特定版本的标识符。 Expires:响应的过期时间。 Last-Modified:资源最后被修改的时间。 Location:用于重定向的URL。 Server:服务器的软件信息。 Set-Cookie:服务器发送给客户端的cookie。 实体正文:

响应报文的有效载荷,包含服务器返回的数据。 如HTML文档、图片、JSON数据等。

响应状态码

1**:信息,服务器收到请求,需要请求者继续执行操作

2**:成功,操作被成功接收并处理

3**:重定向,需要进一步的操作以完成请求

4**:客户端错误,请求包含语法错误或无法完成请求

5**:服务器错误,服务器在处理请求的过程中发生了错误

在这里插入图片描述在这里插入图片描述在这里插入图片描述

2、常见面试题:

【1】http 协议的请求方式 get与post区别?

(1)使用方式‌:

‌GET请求‌:主要用于从服务器获取数据,通常用于查询操作。GET请求将请求参数附加在URL后面,以键值对的形式传递给服务器。例如:GET /api/users?id=1‌12。 ‌POST请求‌:主要用于向服务器提交数据,通常用于创建、更新或删除资源。POST请求将请求参数放在请求体中,并通过请求头中的Content-Type指定数据格式。例如:`POST /api/users HTTP/1.1 Host: example.com Content-Type: application/json {"id": 1, "name": "Alice"}‌12。 (2)数据传输方式‌:

‌GET请求‌:将请求参数附加在URL后面,以查询字符串的形式传输,数据是明文传输,可以在URL中直接看到。例如:example.com/api/users?i… ‌POST请求‌:将请求参数放在请求体中,不会在URL中直接暴露,数据传输是隐含的,对于敏感数据更加安全‌12。 ‌**(3)请求长度限制‌:**

‌GET请求‌:对URL的长度有限制,不同浏览器和服务器对URL的长度限制不同,一般在2KB到8KB之间。如果请求参数过多或过长,可能会超过URL的长度限制‌12。 ‌POST请求‌:没有对请求体长度做特别限制,可以传输大量数据‌12。 ‌**(4)安全性‌:**

‌GET请求‌:由于参数直接附加在URL中,敏感信息(如用户名和密码)可能会被缓存或监听,安全性较低‌12。 ‌POST请求‌:参数在请求体中传输,不会被缓存或监听,安全性较高‌12。 ‌(5)缓存和幂等性‌:

‌GET请求‌:通常会被缓存,且GET请求是幂等的,即多次执行相同的GET请求不会改变服务器的状态‌24。 ‌POST请求‌:默认不被缓存,且POST请求不是幂等的,多次执行相同的POST请求可能会改变服务器的状态‌24。 (6)使用场景‌:

‌GET请求‌:适用于查询操作、信息获取等场景‌12。 ‌POST请求‌:适用于创建、更新或删除资源等需要提交数据的场景‌12。

【2】解释一下http中间人攻击问题

中间人攻击是指攻击者通过某种方式截取网络通信的双方之间的数据,以获取或者篡改通信内容的一种攻击手段

image.png

为什么会出现中间人攻击问题?

(1)HTTP 协议以明文传输数据,中间人拦截数据包之后能轻易地还原 HTTP 包文的内容,这使得中间人能监听 HTTP 通信的数据。 (2)使用 HTTP 协议的请求和响应方不验证对方的身份,因此请求方无法确保发起的请求由预计的响应方接受,它收到的数据也不能确保来自预计的响应方;从响应方的角度来看,它接受的请求不一定来自预计的请求方,它返回的数据也不一定被预计的请求方接受。

在HTTP协议中进行中间人攻击通常方法:

使用代理服务器:

攻击者设置一个代理服务器,所有通过HTTP协议的网络通信都需要先通过这个代理。攻击者可以在代理服务器上拦截和修改进出代理的所有数据。

在WiFi网络中设置MITM(Man-in-the-Middle)

攻击者通过某些手段获取WiFi网络的控制权,然后通过ARP欺骗或DNS劫持的方式,将网络中的设备引导至自己的服务器,从而实现中间人攻击。

防御中间人攻击措施:

(1)使用HTTPS:HTTPS通过SSL/TLS协议对HTTP内容进行加密,使得攻击者无法直接读取或篡改传输内容。

(2)使用VPN:使用VPN可以加密整个网络通信流量,从而防止中间人攻击。

(3)安全软件或硬件:使用防火墙、入侵检测系统(IDS)、入侵防御系统(IPS)等安全软件或硬件设备来检测和阻止中间人攻击。

【3】请解释一下HTTPS协议

‌HTTPS协议(Hypertext Transfer Protocol Secure)‌是HTTP协议的安全版本,旨在通过加密和身份认证来确保数据在传输过程中的安全性和完整性。HTTPS在HTTP的基础上增加了一层加密层,通常使用SSL(Secure Sockets Layer)或TLS(Transport Layer Security)协议来实现加密功能‌。

<img src="/image-20241115131328410.png" alt="image-20241115131328410" style="zoom:67%;" />

HTTPS协议的工作原理 ‌**客户端发起请求‌:**用户通过浏览器或其他客户端软件输入HTTPS网址,发起对服务器的请求。浏览器首先会查找并连接服务器的443端口(HTTPS的默认端口)‌。 **‌SSL/TLS握手‌:**在数据传输之前,客户端和服务器之间会进行SSL/TLS握手过程,以协商加密算法、交换密钥,并验证双方身份。

握手过程包括以下几个步骤: 客户端发送请求:发送SSL/TLS协议的版本号、加密套件列表、随机数等信息。 服务器响应:返回自己的SSL/TLS协议版本号、加密套件选择、服务器证书、公钥以及一个随机数。 证书验证:客户端验证服务器证书的合法性,包括证书颁发机构、证书有效期、证书是否被吊销等。 密钥协商:如果证书验证通过,客户端生成一个新的随机数,并使用服务器的公钥加密后发送给服务器。服务器使用自己的私钥解密后,将三个随机数通过一定的算法生成会话密钥。这个会话密钥用于后续的对称加密通信‌。 **‌数据传输‌:**握手完成后,客户端和服务器之间将使用会话密钥进行对称加密通信。客户端发送的HTTP请求和服务器返回的HTTP响应都会被加密后再进行传输,确保数据的安全性‌。

HTTPS协议的安全性机制

加密‌:使用SSL或TLS协议对数据进行加密,保证数据在传输过程中不被窃听‌23。 ‌数据完整性‌:确保数据在传输过程中未被修改,保护了数据的完整性‌2。 ‌身份验证‌:通过SSL/TLS证书验证服务器的身份,防止“中间人”攻击‌23。

‌【4】HTTP协议支持长连接吗?

‌HTTP协议本身并不直接支持长连接,而是通过Keep-Alive机制来实现长连接的效果。‌ 在HTTP/1.0中,默认是短连接,每次请求后连接都会关闭。 如果需要使用长连接,需要在请求头中添加Connection: Keep-Alive。 而在HTTP/1.1中,默认启用了Keep-Alive机制,除非在请求头中明确指定Connection: close,否则连接会保持打开状态‌。

长连接和短连接的定义和区别 ‌长连接‌:在一个TCP连接上可以连续发送多个请求和响应报文,直到通信双方中的任何一方主动关闭连接。长连接通过Keep-Alive机制实现,减少了TCP连接的建立和关闭次数,降低了网络资源消耗,提高了数据传输效率‌。 ‌短连接‌:每次HTTP操作都会建立一次连接,任务结束后断开连接。短连接不需要长时间占用服务器资源,适用于请求量较小、连接数较多的场景‌。

Keep-Alive机制的工作原理 Keep-Alive机制通过在客户端和服务端之间保持一个持久的TCP连接,使得多个HTTP请求可以复用同一个连接。

适用场景和优缺点 ‌长连接的优点‌:减少TCP连接的建立和关闭次数,降低网络资源消耗,提高数据传输效率,减少网络延迟‌。 ‌长连接的缺点‌:占用更多的服务器资源,如内存和文件描述符,当有大量客户端同时连接时,可能会导致服务器资源耗尽‌。 ‌短连接的优点‌:不会长时间占用服务器资源,适用于请求量较小、连接数较多的场景‌。 ‌短连接的缺点‌:需要频繁建立和关闭TCP连接,增加了网络资源消耗‌。

我的csdn原创作品地址:全面解析:HTML页面的加载全过程(二)--发送HTTP请求,并返回响应_解析html响应数据-CSDN博客