HTTP 协议核心组件与安全扩展深度解析

目录

一、什么是HTTP协议

二、HTTP协议通信过程

三、URL

[四、HTTP 请求](#四、HTTP 请求)

【1】请求报文

【2】请求方式

[五、HTTP 响应](#五、HTTP 响应)

【1】响应报文

【2】状态码

六、HTTP首部字段

七、连接管理

【1】短连接和长连接

【2】管线化连接

八、HTTPS

【1】HTTP协议存在的问题

【2】什么是HTTPS协议?

【3】HTTP和HTTPS有哪些区别?

【4】加密方式

【5】HTTPS的工作原理


一、什么是HTTP协议

HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于在客户端和服务器之间传输数据的应用层协议,基于 TCP/IP 通信。

HTTP是一个属于应用层的协议,同时也是一个双向协议,基于浏览器-服务器架构模型进行工作。浏览器 与 服务器之间,基于http协议进行通信 ,浏览器发送请求数据给服务器,服务器根据接收到并处理请求后,向浏览器发送响应信息。


二、HTTP协议通信过程

HTTP 是一个应用层协议,默认端口为80,在传输层使用 TCP协议进行数据的传输。

http协议通信过程包括如下步骤:

1.当用户发起一个新的请求;

2.浏览器发起对服务器的 TCP连接请求;

3.服务器与浏览器之间会按照TCP协议的三次握手,建立之间的 TCP 连接;

4.浏览器按照http协议格式,创建请求数据包(http请求报文);

5.将请求数据包(http请求报文)发送至服务器;

6.服务器按照http协议格式,解析请求报文;

7.执行请求处理,调用相关业务逻辑方法,产生响应数据;

8.服务器按照http协议格式,将响应数据封装至响应数据包(http响应报文);

9.服务器将响应数据包,发送至浏览器;

10.浏览器按照http协议格式,对响应数据包进行解析;

11.浏览器将响应数据包中的响应内容,显示至浏览器页面,呈现给用户;


三、URL

HTTP协议使用URL( Uniform Resource Locator,统一资源定位符 )来定位资源。

格式:http://host[":"port][abs_path]

示例:http://192.168.0.116:8080/index.html

  • http表示要通过HTTP协议来定位网络资源;
  • host表示合法的Internet主机域名或者IP地址;
  • port指定一个端口号,为空则使用缺省端口80;
  • abs_path指定请求资源的URI;

四、HTTP 请求

【1】请求报文

浏览器通过URL发起一个请求时,会发送一个http请求报文给目标服务器,服务器根据请求报文中携带的请求数据进行处理。

请求报文结构

  • 第一行是包含:请求方式、URL、协议版本;
  • 接下来的多行都是http请求首部内容,其中包含若干个http首部字段。
  • 一个空行用来分隔首部和内容主体 Body
  • 最后是请求的内容主体

【2】请求方式

HTTP请求报文 第一行为请求行,其中包含了请求方式字段,常见的请求方式:GET、POST、HEAD、PUT、DELETE、OPTIONS。

  • **GET : 获取资源。**用于使用给定的URL从给定服务器中检索信息,完成从指定资源中请求数据。使用GET方法的请求应该只是检索数据,并且不会对数据产生其他影响。

  • **POST :提交数据增加资源。**用于将数据发送到服务器以创建或增加资源。使用post方法,如果两个请求相同,后一个请求不会覆盖第一个请求,所以post用于增加资源。

  • **HEAD :获取响应报头。**HEAD 和 GET方法类似,但是不返回响应报文内容主体部分,仅传输响应报头部分。主要用于确认 URL的有效性以及资源更新的日期时间等。

  • **PUT :修改资源。**用来修改资源,要求在请求报文的主体中包含数据内容,然后保存到请求URL指定位置。使用put方法,如果两个请求相同,后一个请求会覆盖第一个请求,所以put用于修改资源。

  • **DELETE :删除资源。**用来删除指定的资源。

  • **OPTIONS :查询支持的方法。**查询指定的 URL能够支持的方法。会返回 Allow: GET, POST, HEAD, OPTIONS等请求方式内容。

GET 和 POST 的区别

  • GET用于获取数据 ,POST用于提交数据

  • GET和POST的请求报文格式不同

    • POST方法请求报文第一行是这样的 POST /URL HTTP/1.1 \r\n

    • GET方法请求报文第一行是这样的 GET /URL HTTP/1.1 \r\n

  • GET使用请求报文中的首部字段URL传递请求参数,POST使用Request Boby提交数据;

  • GET是幂等且可缓存 ,POST非幂等且不可缓存

    • 「幂等」:意思是多次执行相同的操作,结果都是「相同」的。

五、HTTP 响应

【1】响应报文

当服务器处理完请求后,会将响应数据放入http响应报文中返回给浏览器。

响应报文结构

  • 第一行包含:协议版本、状态码以及描述。

    • 最常见的状态码及描述是: 200OK ,表示请求成功。
  • 接下来的若干行是首部内容

  • 一个空行分隔首部和内容主体

  • 最后是响应的内容主体

【2】状态码

服务器返回的 响应报文 中第一行为状态行,包含了状态码以及原因短语,用来告知客户端请求后的响应结果。

1XX 信息

  • 1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际工作中使用场景比较少。

2XX 成功

2xx 类状态码表示服务器成功处理了客户端的请求。

  • 「200 OK」最常见的成功状态码,表示一切正常。

  • 「204 No Content」常见的成功状态码,与 200 OK 基本相同,但响应报文没有 body 数据。

  • 「206 Partial Content」是应用于 HTTP 分块下载或断点续传,表示响应返回的 body 数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。


3XX 重定向

3xx 类状态码表示客户端请求的资源发送了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向。

  • 「301 Moved Permanently」表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。

  • 「302 Found」表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。


4XX 客户端错误

4xx 类状态码表示客户端发送的报文有误,服务器无法处理。

  • 「400 Bad Request」表示客户端请求的报文有错误。

  • 「403 Forbidden」表示服务器禁止访问资源,并不是客户端的请求出错。

  • 「404 Not Found」表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。

  • 「405 Not Allowed」表示服务器不支持客户端采用的请求方式。


5XX 服务器错误

5xx 类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码。

  • 「500 Internal Server Error」服务器发生了内部错误。

  • 「501 Not Implemented」表示客户端请求的功能还不支持,类似"即将开业,敬请期待"的意思。

  • 「502 Bad Gateway」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。

  • 「503 Service Unavailable」表示服务器当前很忙,暂时无法响应服务器,类似"网络服务正忙,请稍后重试"的意思。


六、HTTP首部字段

  • Host字段:浏览器发送http请求时,用来指定服务器的域名。

例如:Host : www.apesource.com

  • Content-Length字段 :服务器在响应数据时,会通过 Content-Length 字段,表明本次响应数据的长度。

    例如:Content-Length: 1000

  • Connection 字段 :Connection字段用于浏览器要求服务器使用长连接,以便其他请求复用该连接。

    例如:Connection: keep-alive

  • Content-Type 字段 :Content-Type 字段用于服务器响应时,告诉浏览器,本次响应数据的内容类型。

    例如:Content-Type: text/html; charset=utf-8

  • Accept 字段 :Accept 字段用于浏览器发起请求的时候,声明可以接受哪些响应数据格式。

    例如:Accept: */*

  • Content-Encoding 字段 :Content-Encoding 字段说明数据的压缩方法,表示服务器响应的数据使用的压缩格式。

    例如:Content-Encoding: gzip

  • Accept-Encoding 字段 :客户端在请求时,用 Accept-Encoding 字段说明自己可以接受哪些压缩方法。

    例如:Accept-Encoding: gzip, deflate


七、连接管理

【1】短连接和长连接

HTTP 1.0 默认使用短连接,每次使用HTTP协议进行通信,都需要重新按照三次握手的方式,建立一个独立的TCP连接,响应完毕后,通过四次挥手断开连接。这种重复的连接创建和断开,增加了通信的开销。

为了解决这个问题,HTTP/1.1 改用长连接的通信方式,也叫持久性连接。

长连接只需要建立一次 TCP 连接就能进行多次 HTTP通信,这种方减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。

  • 在 HTTP/1.0 默认是短连接,如果需要使用长连接,则使用 Connection : Keep-Alive
  • 从 HTTP/1.1 默认是长连接,如果要断开连接,需要由客户端或者服务器端提出断开,使用 Connection : close;

【2】管线化连接

将多个HTTP请求(request)整批提交的技术,在传送过程中不需先等待服务端的回应。管线化机制须通过长连接(persistent connection)完成,仅HTTP/1.1支持此技术(HTTP/1.0不支持)。


八、HTTPS

【1】HTTP协议存在的问题

HTTP由于使用明文传输,所以存在以下安全问题:

  • 使用明文进行通信,内容可能会被窃听,比如被抓包;
  • 不验证通信方的身份,通信方的身份有可能遭遇伪装,比如钓鱼网站;
  • 无法证明报文的完整性,报文有可能遭篡改,比如强制在线广告植入。

【2】什么是HTTPS协议?

HTTPS(HyperText Transfer Protocol Secure,超文本传输安全协议)是 HTTP 协议的安全增强版本 ,核心是在 HTTP 的基础上加入了 SSL/TLS 加密层,解决了 HTTP 明文传输的安全隐患,确保客户端与服务器之间的数据交互 "机密、完整、可信任"。

【3】HTTP和HTTPS有哪些区别?

对比维度 HTTP(HyperText Transfer Protocol) HTTPS(HyperText Transfer Protocol Secure)
安全性 明文传输,无加密 / 身份验证,数据易被窃听、篡改、冒充 基于 SSL/TLS 加密层,实现身份验证、数据加密、完整性校验,安全可靠
核心本质 纯应用层协议,直接基于 TCP 传输 HTTP + SSL/TLS(在 HTTP 与 TCP 之间增加加密层)
默认端口 80 端口(无需额外配置) 443 端口(需专门配置 SSL/TLS 环境)
数字证书 无需证书,任何服务器可直接提供 HTTP 服务 必须配置CA 机构颁发的有效数字证书(如 Let's Encrypt、Symantec),否则浏览器提示 "不安全"
性能开销 无加密 / 解密、证书校验过程,传输效率略高 需额外执行 "证书验证、密钥协商、数据加解密",有轻微性能损耗(可通过 TLS 优化、CDN 加速缓解)
浏览器标识 地址栏无特殊标记,部分浏览器(如 Chrome)会标注 "不安全" 地址栏显示绿色小锁图标,点击可查看证书信息,部分场景(如银行网站)显示 "EV 绿色地址栏"
数据传输过程 客户端请求 → 服务器明文响应,全程无加密 1. 证书验证 → 2. 协商对称密钥 → 3. 加密传输数据 → 4. 完整性校验

【4】加密方式

1.对称密钥加密

对称密钥加密(Symmetric-Key Encryption),加密和解密使用同一密钥。

  • 优点:运算速度快;

  • 缺点:无法安全地将密钥传输给通信方。

2.非对称密钥加密

非对称密钥加密,又称公开密钥加密(Public-Key Encryption),加密和解密使用不同的密钥。

公开密钥所有人都可以获得,通信发送方获得接收方的公开密钥之后,就可以使用公开密钥进行加密,接收方收到通信内容后使用私有密钥解密。

非对称密钥除了用来加密,还可以用来进行签名。因为私有密钥无法被其他人获取,因此通信发送方使用其私有密钥进行签名,通信接收方使用发送方的公开密钥对签名进行解密,就能判断这个签名是否正确。

  • 优点:可以更安全地将公开密钥传输给通信发送方;

  • 缺点:运算速度慢。

【5】HTTPS的工作原理

  1. 用户通过浏览器请求https网站,服务器收到请求,选择浏览器支持的加密和hash算法,同时返回数字证书给浏览器,包含颁发机构、网址、公钥、证书有效期等信息。

  2. 浏览器对证书的内容进行校验,如果有问题,则会有一个提示警告。否则,就生成随机秘钥X,同时使用证书中的公钥进行加密,并且发送给服务器。

  3. 服务器收到之后,使用私钥解密,得到随机秘钥X,然后使用随机秘钥X对网页内容进行加密,返回给浏览器。

  4. 浏览器则使用随机秘钥X和之前约定的加密算法进行解密,得到最终的网页内容

    文确认加密,hash请求https://xxxxx算法返回证书校验证书发送密钥x生成随机密钥私钥解密,获得X,证书公钥加X密返回加密内容使用x解密网页使用X加密网页内容内容服务器浏览器


感谢你花时间读到这里~ 如果你觉得这篇内容对你有帮助,不妨点个赞让更多人看到;如果有任何想法、疑问,或者想分享你的相关经历,欢迎在评论区留言交流,你的每一条互动对我来说都很珍贵~ 我们下次再见啦!😊😊

相关推荐
MoloXuanhe5 小时前
[TryHackMe]Oh My WebServer(nday漏洞+容器逃逸)
运维·网络·tryhackme·thm
FreeBuf_9 小时前
普渡外卖机器人存在安全漏洞,黑客可劫持送餐路径
网络·安全·机器人
博睿谷IT99_11 小时前
以 R1 为视角,手把手教你画 OSPF 最短路径树与推导路由表
网络·华为·智能路由器·华为认证·it·ospf·拓扑图
贝锐11 小时前
分公司、工厂、出差人员远程访问办公系统,如何安全稳定又省钱?
网络
relis12 小时前
USB4与PCIe的技术融合:新一代接口协议的架构革新
网络·架构
小白不想白a14 小时前
【计算机网络】HTTP是什么?
网络协议·计算机网络·http
月光在发光15 小时前
03_网关ip和端口映射(路由器转发)操作和原理
网络·tcp/ip·智能路由器
绵绵细雨中的乡音16 小时前
简易TCP网络程序
linux·网络