目录

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

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


一、什么是HTTP协议

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

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


二、HTTP协议通信过程

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

https://i-blog.csdnimg.cn/direct/7995d26d2bf746a88562726e136d0ab7.png

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;

https://i-blog.csdnimg.cn/direct/704017c56a6d4c03a4f82e07875e3f29.png


四、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】状态码

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

https://i-blog.csdnimg.cn/direct/fbcb8d02fc9e4267bdbdc46df24ad43b.png

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 :

  • 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;

https://i-blog.csdnimg.cn/direct/14c80569cff04d81a6e7a946b3f93d6b.png

【2】管线化连接

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


八、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),加密和解密使用同一密钥。

  • 优点:运算速度快;
  • 缺点:无法安全地将密钥传输给通信方。

https://i-blog.csdnimg.cn/direct/6f39dce4fad74f92b3c496b708f31313.png

2.非对称密钥加密

        非对称密钥加密,又称公开密钥加密(Public-Key Encryption),加密和解密使用不同的密钥。
        公开密钥所有人都可以获得,通信发送方获得接收方的公开密钥之后,就可以使用公开密钥进行加密,接收方收到通信内容后使用私有密钥解密。
        非对称密钥除了用来加密,还可以用来进行签名。因为私有密钥无法被其他人获取,因此通信发送方使用其私有密钥进行签名,通信接收方使用发送方的公开密钥对签名进行解密,就能判断这个签名是否正确。

  • 优点:可以更安全地将公开密钥传输给通信发送方;
  • 缺点:运算速度慢。

https://i-blog.csdnimg.cn/direct/6fe540f7492c4f1b84a09df6d28e539b.png

【5】HTTPS的工作原理

  1. 用户通过浏览器请求https网站,服务器收到请求,选择浏览器支持的加密和hash算法,同时返回数字证书给浏览器,包含颁发机构、网址、公钥、证书有效期等信息。
  2. 浏览器对证书的内容进行校验,如果有问题,则会有一个提示警告。否则,就生成随机秘钥X,同时使用证书中的公钥进行加密,并且发送给服务器。
  3. 服务器收到之后,使用私钥解密,得到随机秘钥X,然后使用随机秘钥X对网页内容进行加密,返回给浏览器。
  4. 浏览器则使用随机秘钥X和之前约定的加密算法进行解密,得到最终的网页内容
    文确认加密,hash请求https://xxxxx算法返回证书校验证书发送密钥x生成随机密钥私钥解密,获得X,证书公钥加X密返回加密内容使用x解密网页使用X加密网页内容内容服务器浏览器

https://i-blog.csdnimg.cn/direct/021bdde611964f328e1000c53c4827c9.png


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