【物联网基础04】HTTP和HTTPS

发布时间:2026/8/7 9:46:43
【物联网基础04】HTTP和HTTPS 引言在当今互联网中HTTP 与 HTTPS 是 Web 通信的基石。本文将从 HTTP 的基础概念与工作原理出发通过详细的报文示例解析其通信机制进而深入探讨 HTTPS 如何通过 SSL/TLS 加密层解决 HTTP 的安全缺陷并附上从免费证书申请到 Nginx/Apache 服务器部署的完整实战指南。最后清晰对比两者的核心区别帮助读者全面掌握 Web 通信的安全基石与工程实践。 文章目录一、了解HTTP协议二、HTTP协议工作原理三、HTTP请求的详细报文示例四、了解HTTPS协议五、HTTPS工作原理六、实战获取与部署SSL/TLS证书6.1 准备工作6.2 安装 Certbot 客户端6.3 申请证书以 Nginx 为例6.4 手动配置 Nginx 使用证书6.5 手动配置 Apache 使用证书6.6 设置证书自动续期6.7 验证部署6.8 总结核心区别总结一、了解HTTP协议HTTP 全称超文本传输协议是运行在 TCP/IP 协议栈之上的应用层通信协议默认使用 80 端口核心作用是在客户端和服务器之间按照约定规则可靠地传输网页、图片、接口数据等各类资源是万维网体系的核心基础协议。二、HTTP协议工作原理 HTTP 底层网络定位HTTP 是运行在 TCP/IP 协议栈之上的应用层协议它向下依托 TCP 完成可靠的字节流传输向上为各类业务提供统一的资源交互规则。在经典的 OSI 七层网络模型中HTTP 实际上覆盖了会话层、表示层和应用层的能力不需要开发者手动处理底层的连接维护、数据分片等细节就能直接完成文本、图片、接口数据等各类资源的传输。 完整交互全流程HTTP 基于经典的「请求-响应」模型运行一次完整的 HTTP 事务分为4个核心步骤‌建立连接‌客户端主动向服务器的默认80端口发起TCP连接请求完成三次握手后建立稳定的传输通道。‌封装并发送请求‌客户端按照HTTP规范组装请求报文通过已建立的TCP通道把数据发送给服务器。‌服务器处理并返回响应‌服务器解析收到的请求完成资源查找、逻辑计算等操作后组装响应报文回传给客户端。‌断开/复用连接‌早期HTTP 1.0默认请求完成后立刻断开TCP连接HTTP 1.1引入Keep-Alive机制支持连接复用一次连接可以连续完成多次请求交互大幅降低了反复握手的性能开销。 报文结构细节HTTP 的请求和响应报文都遵循统一的纯文本格式结构清晰且易于解析‌请求报文‌由四部分组成第一部分是请求行明确标注请求方法、目标URL和HTTP版本第二部分是数十个自定义的请求头用来传递客户端环境、身份标识等附加信息第三部分是一个空行用来标记头部内容结束第四部分是可选的请求体GET请求通常没有请求体POST、PUT等方法会在这里携带表单、JSON、文件等提交数据。‌响应报文‌和请求报文结构对应第一部分是状态行标注HTTP版本、状态码和状态描述第二部分是响应头用来返回资源格式、长度、缓存规则等信息第三部分同样是空行标记头部结束第四部分是响应体也就是客户端最终获取到的HTML、图片、接口返回数据等实际内容。✨ 核心运行特性‌无状态运行‌每一次HTTP请求都是完全独立的服务器不会默认记录客户端的历史访问信息需要通过Cookie、Token这类附加标识才能实现登录态、用户偏好的留存。‌灵活适配多类型数据‌通过Content-Type头部字段HTTP可以适配任意格式的数据传输从普通网页文本、JSON接口数据到大体积文件上传都能完美支持。‌版本迭代优化‌从HTTP 1.0的基础短连接到HTTP 1.1的长连接复用再到HTTP 2的多路并发传输、HTTP 3基于QUIC协议摆脱TCP限制每一代版本都在持续降低传输延迟提升高并发场景下的运行效率。三、HTTP请求的详细报文示例 HTTP 报文基础结构说明所有HTTP报文都遵循统一的三段式结构起始行、头部字段、空行分隔符请求报文额外可选携带请求体不同场景下的报文差异主要体现在起始行和请求体部分。经典GET请求报文示例GET请求用于获取服务器资源通常没有请求体是浏览器直接访问网页时最常用的报文类型GET/chn/yxsz/index.htmHTTP/1.1Host:www.tsinghua.edu.cnConnection:close User-Agent:Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36Accept:text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8 Accept-Language: zh-CN,zh;q0.8,en-US;q0.5,en;q0.3第一行请求行明确标注请求方法、资源路径和HTTP版本头部字段依次声明目标主机、连接策略、浏览器标识、可接受的资源类型和语言偏好末尾的空行标记头部结束没有额外请求体内容2. 表单提交POST请求报文示例这是最常见的普通表单提交场景使用application/x-www-form-urlencoded格式传递数据POST/api/loginHTTP/1.1Host:www.example.com Content-Type:application/x-www-form-urlencoded Content-Length:47User-Agent:Mozilla/5.0(WindowsNT10.0;Win64;x64)Accept:application/jsonCookie:sessionidabc123def456 usernamezhangsanpassword123456remember_me1请求行将方法替换为POST指向登录接口路径新增Content-Type和Content-Length字段明确告知服务器请求体的格式和字节长度空行之后的内容就是表单提交的键值对数据3. JSON格式POST请求报文示例前后端接口交互中最常用的格式直接在请求体中传递结构化JSON数据POST/api/user/infoHTTP/1.1Host:www.example.com Content-Type:application/json;charsetutf-8Content-Length:68Authorization:Bearer token_789xyz User-Agent:Mozilla/5.0{user_id:1001,nickname:张三,avatar:https://example.com/avatar.jpg}头部指定JSON类型的Content-Type避免服务器解析乱码请求体直接携带完整的JSON结构化数据适配RESTful接口的交互规范4. 文件上传POST请求报文示例使用multipart/form-data格式支持同时传递普通表单字段和二进制文件POST/api/uploadHTTP/1.1Host:www.example.com Content-Type:multipart/form-data;boundary----WebKitFormBoundary7MA4YWxkTrZu0gW Content-Length:321------WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition:form-data;nameuser_id1001------WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition:form-data;nameavatar;filenamehead.jpgContent-Type:image/jpeg[图片二进制数据]------WebKitFormBoundary7MA4YWxkTrZu0gW--通过自定义的boundary分隔符把不同的表单字段拆分为独立分段文件分段中额外声明了文件名和文件类型服务器可以直接解析保存上四、 了解HTTPS协议 HTTPS 基础定义HTTPS 全称为超文本传输安全协议是在原生 HTTP 协议外层嵌套了 SSL/TLS 加密层的安全增强版本默认使用 443 端口核心作用是彻底解决 HTTP 明文传输带来的数据窃听、内容篡改、身份冒充三大安全风险是当前互联网中涉及账号登录、支付交易等敏感场景的标准通信五、 HTTPS工作原理️ 核心加密技术基础HTTPS 结合了多种加密机制的优势兼顾安全性和传输效率‌对称加密‌加密和解密使用同一把密钥加密速度极快适合大流量数据传输常见算法有 AES、3DES 等。但它的核心问题是密钥本身的安全传递无法直接解决。‌非对称加密‌拥有公钥和私钥一对密钥公钥可以公开分发私钥仅由服务器自己持有。用公钥加密的数据只能用对应的私钥解密反过来用私钥加密的数据也只能用公钥解密天生解决了密钥传递的身份校验问题但加密运算速度极慢不适合直接用来加密大量业务数据。‌数字证书与数字签名‌为了避免非对称加密中公钥被中间人恶意篡改引入了权威 CA 机构颁发的数字证书。证书内包含服务器的公钥、域名信息以及 CA 用自己私钥生成的数字签名客户端可以通过系统内置的 CA 根证书验证证书合法性彻底杜绝公钥被冒充的风险。⚙️ 完整工作流程HTTPS 的交互分为两个核心阶段全程运行在 TCP 连接建立之后。以下流程图清晰地展示了从客户端发起请求到加密数据传输的完整步骤验证通过加密数据传输阶段HTTP 请求/响应数据使用对称密钥加密/解密TLS 记录层传输附加 MAC 校验TLS 握手阶段Client Hello支持算法列表 随机数Server Hello选定算法 随机数Certificate发送服务器证书 (含公钥)Key Exchange密钥交换 (如 ECDHE)客户端发起 HTTPS 连接请求TCP 三次握手建立连接 (端口 443)客户端验证证书CA 根证书校验客户端生成预主密钥并用服务器公钥加密发送服务器用私钥解密获得预主密钥双方计算对称会话密钥完成通信连接关闭或复用六、实战获取与部署SSL/TLS证书理解了 HTTPS 的工作原理后下一步就是为自己的网站或服务部署 SSL/TLS 证书。本节将以免费的 Let‘s Encrypt 证书为例详细介绍从申请、部署到自动续期的完整操作流程。6.1 准备工作在开始之前请确保你拥有一个已备案的域名例如example.com并且 DNS 解析已指向你的服务器公网 IP。你有一台运行 Linux 的服务器如 Ubuntu 20.04/22.04 或 CentOS 7/8并已安装 Nginx 或 Apache Web 服务器。服务器已开放 80HTTP和 443HTTPS端口。6.2 安装 Certbot 客户端Certbot 是 Let‘s Encrypt 官方推荐的自动化证书管理工具支持 Nginx、Apache 等多种 Web 服务器。Ubuntu/Debian 系统# 更新软件包列表sudoaptupdate# 安装 Certbot 及其 Nginx/Apache 插件sudoaptinstallcertbot python3-certbot-nginx# 如果使用 Nginx# 或sudoaptinstallcertbot python3-certbot-apache# 如果使用 ApacheCentOS/RHEL 系统# 启用 EPEL 仓库如未启用sudoyuminstallepel-release# 安装 Certbotsudoyuminstallcertbot python3-certbot-nginx# Nginx# 或sudoyuminstallcertbot python3-certbot-apache# Apache6.3 申请证书以 Nginx 为例Certbot 可以自动读取 Nginx 的配置文件并完成域名验证和证书申请。自动申请推荐sudocertbot--nginx-dexample.com-dwww.example.com执行命令后Certbot 会自动读取 Nginx 配置中与example.com和www.example.com相关的 server 块。临时修改配置通过 HTTP-01 挑战验证你对域名的控制权需要在 80 端口放置验证文件。验证成功后自动下载证书和私钥并更新 Nginx 配置将 HTTP 重定向到 HTTPS。手动申请适用于其他 Web 服务器或需要更多控制sudocertbot certonly--webroot-w/var/www/html-dexample.com-dwww.example.com--webroot: 使用 Webroot 插件在网站根目录-w指定下创建验证文件。申请到的证书和私钥默认保存在/etc/letsencrypt/live/example.com/目录下。6.4 手动配置 Nginx 使用证书如果选择手动申请或需要自定义配置需修改 Nginx 的站点配置文件通常位于/etc/nginx/sites-available/或/etc/nginx/conf.d/。一个基本的 HTTPS 服务器配置示例server { listen 443 ssl http2; server_name example.com www.example.com; # 证书路径由 Certbot 生成 ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # 启用安全的 SSL 协议和密码套件 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512; ssl_prefer_server_ciphers off; # 其他配置... root /var/www/html; index index.html index.htm; location / { try_files $uri $uri/ 404; } } # 将 HTTP 重定向到 HTTPS server { listen 80; server_name example.com www.example.com; return 301 https://$server_name$request_uri; }修改后测试配置并重载 Nginxsudonginx-tsudosystemctl reload nginx6.5 手动配置 Apache 使用证书对于 Apache配置文件通常位于/etc/apache2/sites-available/Ubuntu或/etc/httpd/conf.d/CentOS。启用 SSL 模块并配置虚拟主机# Ubuntu/Debiansudoa2enmod sslsudoa2ensite default-ssl# CentOS/RHEL# SSL 模块通常已默认启用编辑 SSL 虚拟主机配置文件指定证书路径VirtualHost *:443 ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/html SSLEngine on SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem # 其他配置... /VirtualHost # 重定向 HTTP 到 HTTPS VirtualHost *:80 ServerName example.com Redirect permanent / https://example.com/ /VirtualHost保存后测试并重启 Apache# Ubuntu/Debiansudoapache2ctl configtestsudosystemctl restart apache2# CentOS/RHELsudoapachectl configtestsudosystemctl restart httpd6.6 设置证书自动续期Let‘s Encrypt 证书有效期为 90 天。Certbot 内置了自动续期功能通常通过系统定时任务cron实现。检查自动续期定时任务是否已存在sudosystemctl list-timers|grepcertbot# 或查看 cronsudocrontab-l|grepcertbot如果未设置可以手动添加一个 cron 任务通常 Certbot 安装时会自动配置。也可以手动创建# 编辑 root 用户的 crontabsudocrontab-e添加以下行表示每天凌晨 2:30 尝试续期所有快过期的证书仅当证书剩余有效期不足 30 天时才会真正续期30 2 * * * /usr/bin/certbot renew --quiet --post-hook systemctl reload nginx--quiet: 静默运行仅在出错时输出。--post-hook: 续期成功后执行的命令例如重载 Web 服务器使新证书生效。6.7 验证部署部署完成后可通过以下方式验证浏览器访问直接访问https://example.com查看地址栏是否有锁形安全标识。命令行工具curl-Ihttps://example.com# 或使用 SSL 检测工具openssl s_client-connectexample.com:443-servernameexample.com在线检测使用 SSL Labs SSL Test 等工具进行全面的安全性评分。6.8 总结通过 Certbot 工具获取和部署 Let‘s Encrypt 免费 SSL/TLS 证书已变得非常简单自动化。关键步骤包括安装 Certbot、运行证书申请命令可自动配置 Web 服务器、手动调整配置文件如需、以及设置自动续期定时任务。部署 HTTPS 不仅能提升网站安全性也是现代 Web 服务的标准配置。TP和HTTPS区别 核心本质差异HTTP 是原生的明文传输应用层协议所有数据直接在网络中裸奔没有任何安全防护机制HTTPS 是在 HTTP 外层嵌套了 SSL/TLS 加密层的安全增强版本通过混合加密机制实现数据加密、身份校验和防篡改从根源上解决了 HTTP 明文传输的安全风险。 核心区别汇总‌安全特性不同‌HTTP 全程明文传输传输的账号密码、浏览记录等数据很容易被中间人直接窃取、篡改也无法验证服务器真实身份极易遭遇钓鱼网站冒充HTTPS 通过对称加密非对称加密的混合机制加密所有传输数据同时通过CA签发的数字证书验证服务器身份能有效抵御窃听、篡改和身份冒充攻击。‌连接与端口不同‌HTTP 直接和 TCP 层建立连接默认使用 80 端口连接流程简单无额外握手步骤HTTPS 需要先完成 SSL/TLS 握手协商加密密钥再建立 HTTP 通信默认使用 443 端口连接流程更复杂。‌资源与成本不同‌HTTP 无需任何额外证书成本服务器运算开销极低HTTPS 需要向权威CA机构申请数字证书大部分付费仅少量免费证书可选同时加密解密过程会额外消耗服务器CPU资源页面加载速度会比HTTP慢约50%设备耗电也会提升10%-20%。‌协议层级与体验不同‌HTTP 直接工作在应用层连接无状态缓存效率极高HTTPS 的 SSL/TLS 层介于应用层和传输层之间缓存效率不如HTTP现在主流浏览器会对HTTP网站标记不安全提示HTTPS网站则会在地址栏显示安全锁标识用户信任度更高。户信任度更高。