应用层协议HTTP和HTTPS,一篇文章学会
nanshan 2025-04-24 06:03 13 浏览 0 评论
HTTP
HTTP 协议详解
HTTP(Hypertext Transfer Protocol,超文本传输协议)是用于分布式、协作式和超媒体信息系统的应用层协议。它最早用于万维网(WWW),是浏览器和服务器之间通信的核心协议。HTTP 协议是无状态的,意味着每次请求之间没有保持状态,这也带来了高效性和扩展性。
1. HTTP 的基本工作原理
HTTP 的工作方式是请求-响应模型。客户端(通常是浏览器)发送一个请求到服务器,服务器处理请求后返回一个响应。该模型包括以下步骤:
- 建立连接:客户端与服务器通过 TCP 连接通信,默认端口为 80(HTTPS 使用 443 端口)。
- 发送请求:客户端发送 HTTP 请求报文给服务器。
- 服务器处理请求:服务器接收请求并处理,例如返回一个网页或资源。
- 服务器响应:服务器将处理后的数据封装在响应报文中返回给客户端。
- 关闭连接:根据情况,连接可能会关闭,或者保持一段时间以等待更多请求(HTTP/1.1 默认启用持久连接)。
2. HTTP 请求报文
HTTP 请求报文由请求行、请求头部字段和请求体组成。
- 请求行:
- 包含 请求方法、请求 URI 和 HTTP 版本,例如:
GET /index.html HTTP/1.1
- 常见的请求方法:
- GET:请求资源,通常用于获取数据。
- POST:向服务器提交数据(表单、文件上传等)。
- PUT:上传文件或替换资源。
- DELETE:删除指定资源。
- HEAD:仅请求头部,不返回资源体。
- OPTIONS:询问服务器允许的请求方法。
- 请求头部字段:
- 包含了有关请求的额外信息,例如:
- Host:指定目标主机。
- User-Agent:客户端的类型和版本信息。
- Accept:客户端支持的内容类型(MIME 类型)。
- Content-Type:请求数据的类型,通常用于 POST 和 PUT 请求。
- 请求体:
- 包含客户端发送的数据(在 POST、PUT 请求中使用)。GET 请求没有请求体。
3. HTTP 响应报文
服务器处理请求后,返回 HTTP 响应报文。响应报文包含状态行、响应头部字段和响应体。
- 状态行:
- 由 HTTP 版本、状态码 和 状态短语 组成。例如:
HTTP/1.1 200 OK
- 常见的状态码:
- 1xx:信息类,表示接收的请求正在处理。
- 2xx:成功,表示请求已被服务器成功处理。
- 200 OK:请求成功。
- 201 Created:资源成功创建。
- 3xx:重定向,要求客户端采取进一步操作。
- 301 Moved Permanently:资源已被永久移动。
- 302 Found:临时重定向。
- 4xx:客户端错误,表示请求有问题。
- 400 Bad Request:请求有语法错误。
- 401 Unauthorized:未经授权,需要身份验证。
- 404 Not Found:请求的资源不存在。
- 5xx:服务器错误,表示服务器处理请求时出错。
- 500 Internal Server Error:服务器内部错误。
- 502 Bad Gateway:无效响应的网关。
- 响应头部字段:
- 提供关于响应的额外信息,例如:
- Content-Type:返回的资源类型(MIME 类型)。
- Content-Length:响应体的长度。
- Set-Cookie:设置客户端的 cookie。
- 响应体:
- 包含服务器返回的资源数据,例如网页的 HTML、CSS、图片等。
4. HTTP 的版本发展
- HTTP/1.0:
- 每次请求都需要重新建立连接,请求完成后立即关闭连接,导致了较大的性能开销。
- HTTP/1.1:
- 持久连接:允许多个请求和响应在一个 TCP 连接中完成,大幅提高性能。
- 管道化:可以并行发送多个请求,进一步提高效率。
- 增加了更多的缓存机制、Host 字段等,提升了协议的扩展性。
- HTTP/2:
- 基于二进制帧的通信,而不是文本形式。
- 支持多路复用,即同一连接中可以并发多个请求和响应,不需要排队等待。
- 支持服务器推送,即服务器可以主动向客户端发送资源,而不需要客户端请求。
- 头部压缩:通过 HPACK 算法减少了 HTTP 报文的头部大小,进一步提升性能。
- HTTP/3:
- 使用基于 QUIC 协议(基于 UDP)的传输,不再依赖 TCP。
- 提供更快的连接建立时间,减少延迟,并进一步提升了传输效率和安全性。
5. HTTP 的特点
- 无状态:HTTP 不保留每次请求的状态。每个请求都是独立的,服务器无法通过协议自动记住客户端的状态。为了解决这一问题,通常通过 Cookie 和 Session 来进行会话管理。
- 灵活性:HTTP 可以传输任意类型的数据(文本、图片、视频等),通过 MIME 类型进行标识。
- 可扩展性:HTTP 允许通过自定义的头部字段扩展协议功能,例如支持自定义缓存策略、权限管理、内容压缩等。
6. HTTP 的安全性
HTTP 本身是明文传输的协议,所有的数据都可以被中途截获和篡改。为了解决这一问题,引入了 HTTPS(HTTP Secure)。
- HTTPS:
- 通过SSL/TLS 协议对传输数据进行加密,保证数据的保密性、完整性和身份认证。
- HTTPS 使用 443 端口,而不是 HTTP 的 80 端口。
7. HTTP 的缓存机制
为了提高性能,HTTP 支持缓存。常见的缓存机制有:
- Expires 和 Cache-Control:指定资源的过期时间,减少服务器请求次数。
- ETag 和 Last-Modified:通过资源的标识符或上次修改时间,判断资源是否需要重新下载。
总结
HTTP 是现代 Web 通信的核心协议,具有简单、灵活、扩展性强等特点。通过各个版本的迭代,HTTP 的性能和安全性得到了显著提高,特别是在 HTTP/2 和 HTTP/3 中,解决了许多传统 HTTP 的性能瓶颈,使其更适用于现代网络应用。
HTTPS
HTTPS 协议详解
HTTPS(HyperText Transfer Protocol Secure,安全超文本传输协议)是在 HTTP 基础上加入了 SSL/TLS 加密协议,以确保数据在客户端和服务器之间的传输过程中的保密性、完整性和身份验证。HTTPS 是当前 Web 通信的安全标准,广泛用于保护敏感信息,如在线支付、登录认证等。
1. HTTPS 的工作原理
HTTPS 通过将 HTTP 和 SSL/TLS 结合在一起,提供加密和认证。其工作流程如下:
- 客户端发起请求:
- 用户在浏览器中输入 https:// 开头的 URL,浏览器会自动向服务器发起 HTTPS 请求。
- 服务器响应并发送证书:
- 服务器收到请求后,会将其数字证书发送给客户端。证书中包含了服务器的公钥和服务器的身份信息,由受信任的证书颁发机构(CA)签署。
- 客户端验证证书:
- 客户端使用内置的受信任 CA 列表来验证服务器的证书。如果证书可信且未过期,客户端生成一个随机的对称密钥,并用服务器的公钥加密该密钥,然后将其发送给服务器。
- 建立加密通道:
- 服务器使用私钥解密客户端发送的对称密钥,之后双方使用该对称密钥进行加密通信。
- 传输数据:
- 在加密通道上,客户端和服务器可以安全地交换数据,确保数据不会被第三方截获或篡改。
2. HTTPS 的主要组成部分
- SSL/TLS 协议:
- SSL(Secure Sockets Layer):早期的加密协议版本,现已被 TLS 取代。
- TLS(Transport Layer Security):SSL 的升级版本,提供更高的安全性。常用版本为 TLS 1.2 和 TLS 1.3。
- 数字证书:
- 由**证书颁发机构(CA)**签发,包含服务器的公钥、域名、颁发机构信息和有效期等。证书的作用是验证服务器的身份,并协助建立安全连接。
- 公钥和私钥:
- 公钥:用于加密数据,公开给任何人使用。
- 私钥:用于解密数据,仅服务器持有,需严格保密。
- 对称密钥:
- 在通信过程中临时生成,用于加密数据。由于对称加密速度快,效率高,适用于大量数据的加密传输。
3. HTTPS 的优点
- 数据加密:
- HTTPS 通过 SSL/TLS 协议加密数据传输,确保数据在传输过程中不被第三方截获或窃听。
- 身份验证:
- HTTPS 使用数字证书验证服务器身份,防止中间人攻击(Man-in-the-Middle Attack),确保客户端连接的是合法的服务器。
- 数据完整性:
- HTTPS 能够检测数据是否在传输过程中被篡改,确保数据的完整性。
- 用户信任:
- HTTPS 地址栏通常会显示绿色锁标志或其他安全提示,增强用户对网站的信任,特别是在涉及敏感信息的场景中,如电商、银行等。
4. HTTPS 的缺点
- 性能开销:
- HTTPS 相比 HTTP,有额外的加密/解密计算开销,可能导致响应时间略长,特别是在握手阶段。
- 成本增加:
- 部署 HTTPS 需要购买数字证书,且需定期续费。虽然现在也有免费的证书颁发机构(如 Let’s Encrypt),但可能不被所有浏览器信任。
- 兼容性问题:
- 一些旧的设备或浏览器可能不支持最新的 TLS 版本,这会导致无法访问使用 HTTPS 的网站。
5. HTTPS 的实现与优化
- 配置 HTTPS:
- 配置 HTTPS 时,需要在服务器上安装数字证书,并启用 SSL/TLS 协议。常见的 Web 服务器如 Apache、Nginx 都支持 HTTPS 配置。
- 证书管理:
- 证书需要定期更新和管理,确保证书不过期,并且使用强加密算法(如 SHA-256 和 RSA 2048 位密钥)。
- 性能优化:
- 使用 HTTP/2 或 HTTP/3 来减少 HTTPS 带来的性能开销。启用 OCSP Stapling 和 Session Resumption 技术来优化握手过程,减少延迟。
总结
HTTPS 是保护 Web 通信安全的关键技术,提供了数据加密、身份验证和数据完整性保护。尽管引入了额外的性能和成本开销,但在现代 Web 环境中,特别是在处理敏感数据时,HTTPS 是不可或缺的。通过合理配置和优化,HTTPS 可以为用户提供既安全又高效的网络体验。
关于HTTPS的加密过程
在 HTTPS 通信过程中,私钥和对称密钥是不同的概念,并且作用不同。
1. 私钥与公钥的关系
- 公钥和私钥是一对用于非对称加密(也叫公开密钥加密)的密钥。非对称加密的特点是:
- 公钥是公开的,任何人都可以用它来加密数据。
- 私钥是保密的,只有服务器持有。用公钥加密的数据只能通过对应的私钥解密。
在 HTTPS 中,服务器会将公钥包含在数字证书中发送给客户端。客户端通过公钥对数据加密,而只有服务器能通过自己的私钥来解密这些数据。
2. 随机对称密钥的生成和作用
- 随机对称密钥是客户端生成的,并且仅用于当前的会话。客户端生成这个对称密钥后,使用服务器的公钥对它进行加密,并发送给服务器。服务器收到加密的对称密钥后,使用自己的私钥将其解密,得到与客户端相同的对称密钥。之后,客户端和服务器都会使用这个对称密钥进行通信。对称密钥用于加密大量的数据,因为对称加密比非对称加密快得多,适合加密数据流。
3. 为什么需要对称密钥?
使用非对称加密虽然可以保证安全性,但其计算量大、速度慢,不适合用于加密大量的数据。所以,HTTPS 协议采用了一种混合加密机制:
- 在握手阶段使用非对称加密(公钥加密、私钥解密)来保护对称密钥的安全传输。
- 一旦客户端和服务器协商出一个共享的对称密钥后,后续的数据通信就用对称加密进行,保证了高效和安全。
4. 私钥与对称密钥的区别
- 私钥:服务器独有,用于解密客户端用公钥加密的数据。它是非对称加密算法的一部分。
- 对称密钥:客户端生成的一个随机密钥,用来加密通信中的实际数据。这是对称加密的密钥,双方使用相同的密钥进行加密和解密。
5. 具体流程总结
- 客户端生成随机对称密钥。
- 用服务器的公钥加密对称密钥,并发送给服务器。
- 服务器用私钥解密,获得对称密钥。
- 客户端和服务器通过对称密钥加密通信。
通过这种混合加密方式,HTTPS 实现了安全、高效的数据传输。
加密的内容是哪些呢?
在 HTTPS 通信中,后续通过对称密钥加密的主要是数据的“内容部分”,即传输的实际应用数据,而不是整个数据包的所有部分。
1. 对称加密加密的数据内容
- 对称密钥加密的通常是应用层传输的数据,比如网页的 HTML 内容、表单数据、API 请求和响应的 JSON 数据等。这是通信过程中需要保护的核心信息。
例如:
- 用户向网站提交的登录凭证(用户名、密码)。
- 在线支付的信用卡信息。
- 电子商务网站的订单信息。
这些数据通过对称加密加密后,就算在传输过程中被第三方拦截,也无法直接读取,保证了数据的机密性。
2. 整个数据包的结构
在网络传输过程中,数据包通常分为多个层次,以下是简化的结构:
- 应用层数据(HTTP 内容):这个部分是对称密钥加密的核心数据,如网页、表单数据、API 请求等。
- 传输层协议(TCP):封装了应用层数据的传输信息,比如端口号、数据段序列等。
- 网络层协议(IP):负责将封装好的数据包在网络中传输,包含 IP 地址等信息。
3. HTTPS 只加密应用层数据
HTTPS 的加密作用于应用层的 HTTP 数据部分,而不是整个数据包的所有层。具体来说,加密的是通过 HTTP 协议传输的内容,比如:
- 浏览器向服务器发送的 HTTP 请求(请求头、请求体)。
- 服务器返回的 HTTP 响应(响应头、响应体)。
HTTP 数据被加密后,在网络传输时作为传输层(TCP)和网络层(IP)的一部分进行传输。
- 传输层(如 TCP)和网络层(如 IP)的头部信息通常不加密,因为它们涉及网络路由和数据包的传递功能,网络设备需要读取这些信息来确定数据包的传输路径。因此,IP 地址、端口号等不会被加密。
4. 加密的具体范围
- 加密的内容:HTTP 请求和响应的正文(body)以及部分头部(headers)。敏感信息如 Cookie、表单内容、URL 参数等都属于加密范围。
- 不加密的部分:传输层和网络层的信息(如 IP 地址、端口号)是公开的,用于数据包在网络中的传输和路由。
5. 加密的目的是保护数据的机密性
通过对称密钥加密,HTTPS 确保了客户端与服务器之间的传输内容无法被第三方窃听或篡改。即便攻击者截获了数据包,由于内容被加密,只有持有相同对称密钥的客户端和服务器才能解密数据。
总结
在 HTTPS 中,使用对称密钥加密的主要是应用层的数据,也就是 HTTP 请求和响应的内容(如网页内容、用户提交的数据)。传输层和网络层的信息不会被加密。加密的目的在于保护敏感信息的传输安全,防止被窃听或篡改。
- 上一篇:前端开发-Nginx了解一下
- 下一篇:Nginx重定向
相关推荐
- 轻量级分析利器再升级:解读 DuckDB 1.3.0 新特性
-
DuckDB团队近日正式发布了最新版本——DuckDB1.3.0,代号“Ossivalis”。此次版本以金眼鸭的远古祖先BucephalaOssivalis命名,象征项目在演化和成长过...
- C++跨平台编译的终极奥义:用Docker把环境差异按在地上摩擦
-
"代码在本地跑得飞起,一上服务器就coredump?"——每个C++程序员都经历过的《编译器的复仇》事件!大家好,我是Henry,废话少说,今天来简单谈一下跨平台编译的那些事儿,...
- 全网最全-Version Script以及__asm__((".symver xxx"))使用总结
-
首先提醒一点,一切的前提建立在你的名字必须要mangling,不然无论你写的versionscript还是__asm__都不会起任何效果VersionScript简单用法:这是一个典型例子,这个例...
- Ubuntu 25.04 Beta发布:Linux 6.14内核
-
IT之家3月28日消息,Canonical昨日(3月27日)放出了Beta版Ubuntu25.04系统镜像,代号“PluckyPuffin”,稳定版预估将于2025年...
- 不同平台CRT的区别?什么是UCRT?如何看libc源代码?
-
若文章对您有帮助,欢迎关注程序员小迷。助您在编程路上越走越好!CRT运行时库C标准规定例如输入输出函数、字符串函数、内存操作等接口,一般采用C运行时库实现。微软的CRT微软有两套CRT,早期的MS...
- 信创力量,中兴绽放——中兴新支点桌面操作系统安装与使用全攻略
-
原文链接:「链接」Hello,大家好啊,今天给大家带来一篇中兴新支点桌面操作系统安装使用的文章,欢迎大家分享点赞,点个在看和关注吧!中兴新支点桌面操作系统是一款基于Linux内核、面向政企和信创环...
- Linux下安装常用软件都有哪些?做了一个汇总列表,你看还缺啥?
-
1.安装列表MySQL5.7.11Java1.8ApacheMaven3.6+tomcat8.5gitRedisNginxpythondocker2.安装mysql1.拷贝mysql安装文件到...
- 一篇文章解决Linux系统安全问题排查,另配实操环境
-
实操地址:https://www.skillup.host/1/linux/safe/command.md#Linux安全检查排查指南##1.系统账户安全检查###1.1检查异常账户``...
- 程序员必备的学习笔记《TCP/IP详解(一)》
-
为什么会有TCP/IP协议在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别。就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样...
- 《Linux常用命令》(linux的常用命令总结)
-
一、文件与目录操作1.目录导航pwd:显示当前工作目录路径示例:pwd关键词:当前路径、工作目录cd:切换目录示例:cd/home/user#切换到绝对路径cd..#...
- Kubernetes 教程之跟着官方文档从零搭建 K8S
-
前言本文将带领读者一起,参照者Kubernetes官方文档,对其安装部署进行讲解.Kubernetes更新迭代很快,书上、网上等教程可能并不能适用于新版本,但官方文档能.阅读这篇文章你...
- 电脑网卡坏了怎么修复(电脑网卡坏了怎么修复win7系统)
-
当电脑网卡出现故障时,无论是有线网络还是无线网络,都可能无法正常连接。下面从软件、硬件等方面,分步骤为你介绍排查与修复的解决方案。一、初步排查:锁定问题源头检查网络环境将手机、平板等其他设备连接至同一...
- 如何查询电脑/手机的物理地址(如何找手机的物理地址)
-
一、要查询电脑的物理地址(也称为MAC地址),可以按照以下步骤进行操作:1.打开命令提示符(Windows)或终端(Mac):-在Windows上,点击“开始”按钮,搜索“命令提示符”,然后点击打...
- IPv4 无网络访问权限全流程解决方案
-
当设备出现IPv4无网络访问权限问题时,多由网络配置错误、连接故障或服务异常导致。以下提供系统化的排查步骤与解决方案,帮助用户快速定位并修复问题。一、基础故障快速检查1.物理连接确认有线网络:检...
- Python教程(十九):文件操作(python操作文件夹)
-
昨天,我们学习了列表推导式,掌握了Python中最优雅的数据处理方式。今天,我们将学习文件操作—Python中读写文件的基础技能。文件操作是编程中的核心技能,无论是读取配置文件、保存用户数据,还是...
你 发表评论:
欢迎- 一周热门
-
-
UOS服务器操作系统防火墙设置(uos20关闭防火墙)
-
极空间如何无损移机,新Z4 Pro又有哪些升级?极空间Z4 Pro深度体验
-
手机如何设置与显示准确时间的详细指南
-
NAS:DS video/DS file/DS photo等群晖移动端APP远程访问的教程
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
如何修复用户配置文件服务在 WINDOWS 上登录失败的问题
-
一加手机与电脑互传文件的便捷方法FileDash
-
日本海上自卫队的军衔制度(日本海上自卫队的军衔制度是什么)
-
10个免费文件中转服务站,分享文件简单方便,你知道几个?
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
- 最近发表
-
- 轻量级分析利器再升级:解读 DuckDB 1.3.0 新特性
- C++跨平台编译的终极奥义:用Docker把环境差异按在地上摩擦
- 全网最全-Version Script以及__asm__((".symver xxx"))使用总结
- Ubuntu 25.04 Beta发布:Linux 6.14内核
- 不同平台CRT的区别?什么是UCRT?如何看libc源代码?
- 信创力量,中兴绽放——中兴新支点桌面操作系统安装与使用全攻略
- Linux下安装常用软件都有哪些?做了一个汇总列表,你看还缺啥?
- 一篇文章解决Linux系统安全问题排查,另配实操环境
- 程序员必备的学习笔记《TCP/IP详解(一)》
- 《Linux常用命令》(linux的常用命令总结)
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)