news 2026/7/13 19:33:21

【计算机网路】HTTP与HTTPS通信协议

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【计算机网路】HTTP与HTTPS通信协议

文章目录

  • 一、HTTP协议:互联网的基础通信协议
    • 1.1 什么是HTTP?
    • 1.2 HTTP的发展历程
    • 1.3 HTTP的特性
  • 二、HTTP协议的组成
    • 2.1 HTTP报文格式
      • 2.1.1 请求报文
      • 2.1.2 响应报文
    • 2.2 URL:资源的唯一标识
    • 2.3 HTTP请求方法
    • 2.4 报头(Header)
    • 2.5 HTTP状态码
  • 三、HTTP的实际应用
    • 3.1 浏览器地址栏 + HTML标签
    • 3.2 HTML表单(form)
  • 四、HTTPS
    • 4.1 为什么需要HTTPS?
    • 4.2 HTTPS的加密机制
      • 4.2.1 对称加密
      • 4.2.2 非对称加密
      • 4.2.3 证书与CA认证
    • 4.3 HTTPS的完整工作流程
    • 4.4 HTTP与HTTPS的区别

一、HTTP协议:互联网的基础通信协议

1.1 什么是HTTP?

HTTP(HyperText Transfer Protocol,超文本传输协议)是一种应用层协议,诞生于1991年,如今已发展为互联网最主流的通信协议。它基于TCP/IP协议族工作,负责规范客户端与服务器之间的数据传输格式和交互流程。

这里的“超文本”不仅指文本数据(如HTML、CSS),还包括图片、视频、音频等二进制资源。我们打开一个网站时,浏览器通过HTTP协议向服务器发送请求,服务器返回响应,响应内容经浏览器解析后,就变成了我们看到的网页界面。

1.2 HTTP的发展历程

HTTP协议历经多次迭代,不断优化性能和功能:

  • HTTP/0.9(1991):最初版本,仅支持GET方法,只能传输纯文本HTML。
  • HTTP/1.0(1997):新增POST、HEAD等方法,支持多种数据类型(图片、音频等),引入HTTP头部字段。
  • HTTP/1.1(1999):目前应用最广泛的版本,支持长连接(Keep-Alive)、管道化请求、Chunked编码等,解决了1.0版本的性能瓶颈。
  • HTTP/2.0:基于二进制帧传输,支持多路复用、头部压缩、服务器推送,大幅提升传输效率。
  • HTTP/3.0:正在完善中,基于UDP协议实现,解决了TCP协议的队头阻塞问题,Google、Facebook等大厂已率先支持。

1.3 HTTP的特性

  • 无状态:协议本身不记录客户端的历史交互信息,每次请求都是独立的。如需保持状态(如登录状态),需通过Cookie、Session等机制实现。
  • 基于请求-响应模式:客户端主动发送请求,服务器被动返回响应,不存在服务器主动向客户端推送数据的情况。
  • 文本协议:HTTP报文是明文的文本格式,便于调试和理解,但也存在安全隐患。

二、HTTP协议的组成

2.1 HTTP报文格式

HTTP通信的基本单位是报文,分为请求报文和响应报文,两者结构相似,均由“首行+头部+空行+正文”四部分组成。

2.1.1 请求报文

以访问CSDN页面为例:

  • 首行:格式为方法 + URL + 协议版本
  • 请求头(Header):由多个键值对组成,每个键值对占一行,键和值用: (空格)分隔,头部用于描述请求的属性,如数据类型、缓存策略等。
    http请求头中键的取值和值的取值都是固定的
  • 空行:用于分隔头部和正文,是HTTP协议的强制要求,避免出现“粘包问题”。
  • 正文(Body):可选部分,用于传输请求数据(如POST请求的表单数据),长度由Content-Length头部字段指定。

2.1.2 响应报文

  • 首行:格式为协议版本 + 状态码 + 状态码描述
  • 响应头(Header):与请求头部格式一致,包含响应的属性
  • 空行:分隔头部和正文。
  • 正文(Body):服务器返回的实际数据,可以是HTML页面、JSON数据、图片等。

2.2 URL:资源的唯一标识

我们俗称的“网址”其实是URL(Uniform Resource Locator,统一资源定位符),它唯一标识互联网上的一个资源。URL的完整格式如下:

http://www.example.com:80/dir/index.htm?uid=1#ch1

各部分含义:

  • 协议方案名:如http、https,也可以是jdbc:mysql(访问MySQL数据库)等。
  • 服务器地址(www.example.com):可以是域名IP地址,域名会通过DNS解析为IP。
  • 服务器端口号(:80):HTTP默认端口80,HTTPS默认443,省略时使用默认端口。
  • 带层次的文件路径(/dir/index.htm):想要访问的是某个主机(IP确定)上某个程序(端口号确定)管理的某个资源在服务器上的存储路径。层次可以理解为目录。
  • 查询字符串[Querry String](?uid=1):键值对结构,用于向服务器传递额外参数,键值对之间用&分隔,键与值用=分割。
  • 片段标识(#ch1):用于页面内跳转,不会发送到服务器。常用于文档类网站。

2.3 HTTP请求方法

方法说明特点
GET获取资源无请求正文,参数通过URL传递,可缓存,幂等
POST提交数据有请求正文,参数通过正文传递,不可缓存,非幂等
PUT更新资源用于全量更新资源,幂等
DELETE删除资源用于删除服务器资源,幂等
HEAD获取响应头部与GET类似,但仅返回响应头部,无正文
OPTIONS询问支持的方法用于获取服务器支持的HTTP方法

GET与POST的区别

GET和POST没有本质区别,大多数情况都可以混用

  • 语义不同:GET用于“获取”资源,POST用于“提交”数据。
  • 数据传输方式:GET一般没有body,通过Query String传递数据,POST通过正文传递。
  • 缓存特性:GET请求可被浏览器缓存,POST请求不可缓存。
  • 幂等性:GET请求建议设计为多次执行结果一致(幂等),POST请求多次执行可能产生不同结果(如重复提交订单)。
  • POST典型使用场景:登录、上传。请求中带有正文的,正文就是保存了当前上传的数据内容

2.4 报头(Header)

报头中常见的键值对:

  • Host:表示服务器主机的地址和端口号。绝大情况下Host与URL中的IP地址和端口号属性是一致的。在HTTPS协议中,传输过程涉及到加密,url部分不会被加密,而header和body部分会被加密

  • Content-Length:表示body中数据长度,单位是字节。对于TCP来说,一个链接可以发送多个请求,而服务器收到的数据需要区分:

    • 没有body的http请求:读到空行就可以认为是结束了
    • 有body的http请求:先读取首行和header,读到空行;解析header中Content-Length的值,再读固定的字节长度
  • Content-Type:表示body中数据格式。

类型取值浏览器解析方式
HTMLtext/html解析其中的标签,把标签转换为界面显示
CSStext/css解析其中的选择器和属性,把指定内容应用到页面样式上
JSapplication/javascript通过JS引擎执行JS中的逻辑
JSONapplication/json浏览器不会做任何处理,由对应的JS,也就是程序员写的逻辑来处理
图片image/png(jpg)按照图片的二进制格式解析出来处理

2.5 HTTP状态码

状态码用于表示服务器对请求的处理结果,分为5大类:

类别含义常见状态码
1XX信息性状态码100 Continue(继续)
2XX成功状态码200 OK(请求成功)、204 No Content(无内容)
3XX重定向状态码301 永久重定向、302 临时重定向、304 Not Modified(缓存命中)
4XX客户端错误状态码400 Bad Request(请求参数错误)、403 Forbidden(访问拒绝)、404 Not Found(资源不存在)
5XX服务器错误状态码500 Internal Server Error(服务器内部错误)、504 Gateway Timeout(网关超时)

常见状态码场景:

  • 200 OK:最常见,表明请求成功,服务器返回了请求的资源。
  • 302 临时重定向:常用于登录成功后跳转到主页。
  • 404 Not Found:URL对应的资源不存在,可能是地址输入错误。
  • 403 Forbidden:服务器拒绝访问,通常是未登录或无权限。
  • 418 I am a teapot:我是一个茶壶🤪 彩蛋
  • 500 Internal Server Error:服务器代码执行出错(如程序bug)。

三、HTTP的实际应用

在实际开发中,我们可以通过多种方式构造HTTP请求,以下是常见场景:

3.1 浏览器地址栏 + HTML标签

  • 浏览器地址栏输入URL:直接发送GET请求。
  • HTML标签:<link>(加载CSS)、<img>(加载图片)、<script>(加载JS)等标签会自动发送GET请求。

3.2 HTML表单(form)

form标签是HTML中用于提交数据的标签,支持GET和POST方法:

  • GET 请求
<formaction="https://www.example.com/api"method="GET"><inputtype="text"name="username"placeholder="用户名"><inputtype="password"name="password"placeholder="密码"><inputtype="submit"value="登录"></form>
  • POST 请求
<formaction="https://www.example.com/api"method="POST"><inputtype="text"name="username"placeholder="用户名"><inputtype="password"name="password"placeholder="密码"><inputtype="submit"value="登录"></form>
  • action:指定请求的URL。
  • method:指定请求方法(GET/POST)。
  • input标签的name属性:作为请求参数的key,value为用户输入的内容。

四、HTTPS

4.1 为什么需要HTTPS?

HTTP协议的最大问题是明文传输,数据在传输过程中可能被篡改、窃取或劫持,如运营商劫持、黑客攻击。

HTTPS(HTTP Secure)正是为解决HTTP的安全问题而生,它在HTTP基础上增加了SSL/TLS加密层,实现数据传输的机密性、完整性和身份认证。

4.2 HTTPS的加密机制

HTTPS结合了对称加密非对称加密的优点,既保证安全性,又兼顾传输效率。

4.2.1 对称加密

  • 特点:使用同一个密钥进行加密和解密,运算速度快,但密钥传输存在安全风险:密钥被窃取则加密失效。
  • 示例:按位异或运算,明文a=1234与密钥key=8888异或得到密文9834,密文再与密钥异或可还原明文。

4.2.2 非对称加密

  • 特点:使用一对密钥(公钥+私钥),公钥可公开,私钥仅持有者拥有。公钥加密的密文只能用私钥解密,私钥加密的密文只能用公钥解密。运算速度慢,但密钥传输安全。
  • 应用场景:用于协商对称加密的密钥,避免密钥明文传输。

4.2.3 证书与CA认证

为解决“公钥伪造”问题(中间人替换服务器公钥),HTTPS引入了数字证书CA(Certificate Authority)认证

  • 服务器向CA机构申请数字证书,证书包含服务器公钥、域名、有效期等信息,并由CA机构用私钥签名。
  • 客户端获取证书后,通过操作系统内置的CA公钥验证签名,确认证书合法性(未篡改、未过期)。
  • 只有验证通过的证书,客户端才会使用证书中的公钥进行后续通信。

4.3 HTTPS的完整工作流程

  1. 客户端向服务器发送HTTPS请求,请求中包含支持的加密算法和哈希算法。
  2. 服务器返回数字证书(包含公钥)和选定的加密/哈希算法。
  3. 客户端验证证书合法性:
    • 检查证书有效期是否过期。
    • 检查证书发布机构是否受信任(操作系统内置信任的CA)。
    • 用CA公钥解密证书签名,与本地计算的证书哈希值对比,确认证书未被篡改。
  4. 证书验证通过后,客户端生成随机对称密钥R,用服务器公钥加密R,发送给服务器。
  5. 服务器用私钥解密,获取对称密钥R。
  6. 后续通信:客户端和服务器均使用对称密钥R加密/解密数据,实现安全传输。

4.4 HTTP与HTTPS的区别

特性HTTPHTTPS
传输方式明文传输SSL/TLS加密传输
端口80443
安全性无身份认证、数据易被篡改/窃取有身份认证、数据机密性和完整性保障
性能无加密开销,性能略高加密/解密有开销,性能略低
证书无需证书需向CA申请数字证书
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/13 19:32:41

多功能饮品机四季通用,冷热饮品全年都可在家制作

多功能饮品机四季通用&#xff0c;冷热饮品全年都可在家制作四季更迭&#xff0c;饮食需求随之变化。夏天渴望一杯冰爽果汁消暑&#xff0c;冬天则想喝暖胃豆浆或热饮。蓝宝多功能饮品机&#xff08;新一代原汁机&#xff09;正是为解决这一痛点而生&#xff0c;凭借冷热双制、…

作者头像 李华
网站建设 2026/7/13 19:30:40

如何高效微调Qwen2.5-7B-Instruct模型:Ryzen AI NPU部署的完整指南

如何高效微调Qwen2.5-7B-Instruct模型&#xff1a;Ryzen AI NPU部署的完整指南 【免费下载链接】Qwen2.5-7B-Instruct_rai_1.7.1_npu_16K 项目地址: https://ai.gitcode.com/hf_mirrors/amd/Qwen2.5-7B-Instruct_rai_1.7.1_npu_16K Qwen2.5-7B-Instruct_rai_1.7.1_npu_…

作者头像 李华
网站建设 2026/7/13 19:30:34

揭秘OpenMotor:如何用开源工具精准模拟火箭发动机性能

揭秘OpenMotor&#xff1a;如何用开源工具精准模拟火箭发动机性能 【免费下载链接】openMotor An open-source internal ballistics simulator for rocket motor experimenters 项目地址: https://gitcode.com/gh_mirrors/op/openMotor 火箭发动机模拟对于推进系统设计和…

作者头像 李华
网站建设 2026/7/13 19:30:05

项目文档中的字体声明

项目文档中的字体声明 【免费下载链接】fonts-wqy-microhei Debian package for WenQuanYi Micro Hei (mirror of https://anonscm.debian.org/git/pkg-fonts/fonts-wqy-microhei.git) 项目地址: https://gitcode.com/gh_mirrors/fo/fonts-wqy-microhei 使用的开源字体 …

作者头像 李华
网站建设 2026/7/13 19:26:52

实战教程:使用vLLM后端部署dbrx-instruct-FP8-KV模型的最佳实践

实战教程&#xff1a;使用vLLM后端部署dbrx-instruct-FP8-KV模型的最佳实践 【免费下载链接】dbrx-instruct-FP8-KV 项目地址: https://ai.gitcode.com/hf_mirrors/amd/dbrx-instruct-FP8-KV dbrx-instruct-FP8-KV是一款基于Databricks dbrx-instruct模型优化的量化版本…

作者头像 李华
网站建设 2026/7/13 19:26:26

Java并发编程核心原理,程序员进阶必会!

不知道大家最近去面试过没有&#xff1f;有去面试过的小伙伴应该会知道现在互联网企业招聘对于“高并发”这块的考察可以说是越来越注重了。基本上你简历上有高并发相关经验&#xff0c;就能成为企业优先考虑的候选人。其原因在于&#xff0c;企业真正需要的是能独立解决问题的…

作者头像 李华