被问到: http 协议和 https 协议的区别怎么办?别慌,这篇文章给你答案

news2024/10/11 10:20:47

前言
作为软件测试师,大家都知道一些常用的网络协议是我们必须要了解和掌握的,比如 HTTP 协议,HTTPS 协议就是两个使用非常广泛的协议,所以也是面试官问的面试的时候问的比较多的两个协议;因为这两个协议有相似和关联的地址,面试官通常为了考察你对其掌握的深度,也经常会问:你能说说 http 协议和 https 协议的区别么?如果你还不了解,就跟着我一起来学习吧。

HTTP 协议
其实对于 http 协议,大家可能都比较熟悉。HTTP 协议,全称是 Hyper Text Transfer Protocol(超文本传输协议)。它是在 TCP 三次握手建立了链接的基础上工作的,所以 http 协议是基于 TCP 协议的 80 端口的应用层协议,主要作用是用于从万维网 WWW 传输资源到本地浏览器的传送协议。

HTTP 协议做的事情主要是用来规定客户端和服务端的数据传输格式,所以它是一个标准和规范。那它是怎么定义这个规范的呢?这就需要我们来看一下这个协议的具体内容了。我们接下来就用 fiddler 抓包来直观地看一下这个报文的内容:

每一个 http 连接包括请求消息和响应消息两个部分, 就像你在浏览器里发送要访问百度页面的请求,那么百度服务器就会返回给我一个响应并展示百度页面,所以 HTTP 协议都是基于请求和响应模式的。

请求消息
首先我们来看下 HTTP 协议请求消息,也就是 http request,指从客户端到服务端的请求消息,包括以下信息:

请求行:包括请求方法(GET、POST 等),请求地址 uri,HTTP 版本等信息

请求头:包括的内容非常多,比如 content-type(客户端传递到服务器端的数据格式),User-Agent(标明客户端的基本信息)等

空一行:是格式要求,表示请求头的结束

请求体:就是请求正文,一般是参数等信息

具体抓包显示如下图:

响应消息
服务器收到客户端的请求后就会给出响应,也就是 http response,同样包括以下四个部分信息:

响应行:包括 http 版本以及响应状态码信息

响应头:同样包括的内容比较多,比如 Content-Type(响应消息的格式),cookie\token 等信息

空一行:标识着响应头的结束

响应正文:从服务响应回来的具体数据,比如 XML、JSON 格式的数据,这个也是做接口测试要重点查看的内容。

通过以上抓包信息我们也可以看出来, http 协议有如下几个特点:

通信使用的明文进行数据传输的,任何一个中间截取者都可以截取数据进行篡改;
请求的客户端和响应的服务器端不会对通信双方进行身份的确认,这样就可能会导致任何人都可以假冒成为通讯方而不被发现;
也没有校验和保护数据的完整性的机制,被篡改的数据没有办法被通讯双方所发现。

但是随着互联网的不断发展,我们越来越多的业务都在网上进行,对于安全性就越来越重视。所以针对 HTTP 协议这些不安全的特点,一个新的协议就应运而生,它就是 HTTPS 协议。

HTTPS 协议
HTTPS,全称是 Hyper Text Transfer Protocol Secure(超文本传输安全协议),是以安全为目标的 HTTP 通道,简单讲就是 HTTP 协议的安全版。

那么它是怎么实现安全性的呢?看下图:

从图我们可以清晰的看到,HTTPS 协议就是在 HTTP 协议和 TCP 协议之间加入了 SSL 层,所以它的安全性就是通过 ssl 协议来实现的。所以 HTTPS 协议也经常被叫做:披着 SSL 外壳的 HTTP 协议。

那么这个 SSL 协议能提供哪些安全性呢?给大家列一个公式: HTTP+ 加密 + 认证 + 完整性保护 =HTTPS

SSL 握手过程

具体这些安全性机制如何实现的,我们就需要来看一下 HTTPS 的工作流程。下图是 SSL 建立连接的握手过程:

以上过程我们文字解释一下:

1.客户端通过发送Client Hello 报文开始 SSL 通信
客户端发起请求,以明文传输请求信息,包含版本信息,加密套件候选列表,压缩算法候选列表,随机数,扩展字段等信息。

相关信息如下:
• 支持的最高 TSL 协议版本 version,从低到高依次 SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2,当前基本不再使用低于 TLSv1 的版本;
• 客户端支持的加密套件 cipher suites 列表, 每个加密套件对应前面 TLS 原理中的四个功能的组合:

认证算法 Au (身份验证)

密钥交换算法 KeyExchange(密钥协商)

对称加密算法 Enc (信息加密)

信息摘要 Mac(完整性校验);

2.服务器可进行 SSL 通信时,会以 Server Hello 报文应答
服务端返回协商的信息结果,包括选择使用的协议版本 version,选择的加密套件 cipher suite,选择的压缩算法 compression method、随机数 random_S 等,其中随机数用于后续的密钥协商;

3.服务器发送 Certificate 证书报文
服务器端配置对应的证书链,用于身份验证与密钥交换; 报文中包含公开密钥证书,客户端可以通过证书验证服务器的身份,这就是防止的第三方假冒身份,保证的通讯双方的身份真实性。

4.服务器发送 Server Hello Done 报文通知客户端
这个报文的发送通知客户端 server_hello 信息发送结束,就标识着最初阶段的 SSL 握手协商部分结束。

5.客户端以 Client Key Exchange 报文作为回应
客户端收到服务器的证书后,会去验证证书的合法性,如果验证通过才会进行后续通信,否则根据错误情况不同做出提示和操作。

证书的合法性验证通过之后,客户端计算产生随机数字 被称为 Pre-master secret 的随机密码串,并用证书公钥加密,发送给服务器; 该报文已用步骤 3 中的公开密钥进行加密。

此时客户端已经获取全部的计算协商密钥需要的信息:两个明文随机数 random_C 和 random_S 与自己计算产生的 Pre-master,计算得到协商密钥。

6.接着客户端继续发送 Change Cipher Spec 报文
客户端通过该报文通知服务器后续的通信都采用协商的通信密钥和加密算法进行加密通信。

7.客户端发送 Finished(encrypted_handshake_message) 报文
结合之前所有通信参数的 hash 值与其它相关信息生成一段数据,采用协商密钥 session secret 与算法进行加密,然后发送给服务器用于数据与握手验证; 该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。

8.服务器同样发送 Change Cipher Spec 报文
服务器用私钥解密加密的 Pre-master 数据,基于之前交换的两个明文随机数 random_C 和 random_S,计算得到协商密钥:enc_key=Fuc(random_C, random_S, Pre-Master);然后计算之前所有接收信息的 hash 值,并解密客户端发送的 encrypted_handshake_message,验证数据和密钥正确性;

验证通过之后,服务器同样发送 change_cipher_spec 以告知客户端后续的通信都采用协商的密钥与算法进行加密通信;

9.服务器同样发送 Finished(encrypted_handshake_message)报文
服务器也结合所有当前的通信参数信息生成一段数据并采用协商密钥 session secret 与算法加密并发送到客户端。

客户端计算所有接收信息的 hash 值,并采用协商密钥解密 encrypted_handshake_message,验证服务器发送的数据和密钥,验证通过则握手完成。

10.开始进行应用层协议的通信,即发送 HTTP 请求。
服务器和客户端的 Finished 报文交换完毕之后,SSL 连接就算建立完成。开始正式发送 HTTP 通信消息,发送的是 http 的请求消息,当然,通信报文都会受到 SSL 的保护。

应用层发送数据时会附加一种叫做 MAC(Message Authentication Code)的报文摘要。MAC 能够查知报文是否遭到篡改,从而保护报文的完整性。

11.应用层协议通信,即发送 HTTP 响应。
12.最后由客户端断开连接。断开连接时,发送 close_notify 报文。

上图做了一些省略,这步之后再发送 TCP FIN 报文来关闭与 TCP 的通信。

通过以上 12 步的解析,我们可以清楚的看到 SSL 是如何给数据提供安全性的:

1)通过证书来验证通信双方的身份吗,保证身份的真实可靠,防止第三方假冒;

2)通过协商出来的秘钥进行通信数据的加密,保证数据不会被被任何数据截取者看到,保证的数据的机密性;

3)通过 MAC 的报文摘要,确保数据没有被篡改,保证了数据的完整性。

使用 HTTP 协议还是 HTTPS 协议呢?
讲到这里我们会发现 HTTPS 协议确实比 HTTP 协议要安全很多,但是我们平时生活中还是会看到有些网站用的是 http 协议。既然 HTTPS 那么安全可靠,那为何所有的 Web 网站不一直使用 HTTPS 呢?主要的原因有以下几点:

1、对计算机的资源消耗比较大:因为与纯文本通信相比,加密通信会消耗更多的 CPU 及内存资源。如果每次通信都加密,会消耗相当多的资源,平摊到一台计算机上时,能够处理的请求数量必定也会随之减少。

2、通信速度会比较慢:和使用 HTTP 相比,网络负载可能会变慢 2 到 100 倍。除去和 TCP 连接、发送 HTTP 请求,响应以外,还必须进行 SSL 通信,因此整体上处理通信量不可避免会增加;

3.对服务器和客户端的机器性能要求更高:由于大量消耗 CPU 及内存等资源,导致处理速度变慢。因为 SSL 必须在服务器和客户端都进行加密处理,因此从结果上讲,比起 HTTP 会更多地消耗服务器和客户端的硬件资源,导致负载增强。

4. 购买证书需要额外的开销:要进行 HTTPS 通信,证书是必不可少的。而使用的证书必须向认证机构(CA)购买。证书价格可能会根据不同的认证机构略有不同。通常,一年的授权需要 600 -1000+ 人民币。那些购买证书并不合算的服务以及一些个人网站,可能只会选择采用 HTTP 的通信方式

HTTP 协议和 HTTPS 协议的区别

我们来总结一下 http 协议和 https 协议的区别:

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

在这里插入图片描述

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/993355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSP 202209-1 如此编码

答题 题目就是字多 #include<iostream>using namespace std;int main() {int n,m;cin>>n>>m;int a[n],c[n1];c[0]1;for(int i0;i<n;i){cin>>a[i];c[i1]c[i]*a[i];}for(int i0;i<n;i){cout<<(m%c[i1]-m%c[i])/c[i]<< ;} }

基于 Flink CDC 高效构建入湖通道

摘要&#xff1a;本文整理自阿里云 Flink 数据通道负责人、Flink CDC 开源社区负责人&#xff0c; Apache Flink PMC Member & Committer 徐榜江&#xff08;雪尽&#xff09;&#xff0c;在 Streaming Lakehouse Meetup 的分享。内容主要分为四个部分&#xff1a; 1. Flin…

2.4 选择结构语句

选择结构语句根据是否满足某个条件确定执行哪些操作&#xff0c;分为if条件语句和switch条件语句。 1. 单分支if语句 &#xff08;1&#xff09;if语句是指如果满足某种条件&#xff0c;就进行某种处理&#xff0c;格式如下。 if(条件) {// 执行语句 } 根据上述格式中&…

有限状态机的概念

一、有限状态机的概念 有限状态机简称状态机&#xff0c;是表示有限个状态&#xff0c;以及在状态之间的转移和动作等行为的数学模型。状态机的要素有状态和状态转移两个。 在Unity中&#xff0c;动画状态机最重要的属性就是节点和连线&#xff0c;其中每个节点都是一个动画片…

zotero的使用教程

1. zotero安装 1.1 下载 官网下载地址:Zotero 1.2 安装 建议自定义安装路径,不要安装在C盘。如以下步骤: 2. 插件安装 一般安装以下四种插件,即茉莉花(Jasminum)、zotfile、zotero-scihub、zotero-pdf-translate。以安装茉莉花插件为例进行说明,如图1所示,其余插件安…

Linux mac Windows三系统 局域网文件共享方法

主要工具&#xff1a; Samba是一个开源的软件套件&#xff0c;允许Linux系统与Windows系统之间共享文件和打印机。 一、首先是Linux共享的设置 ①安装 sudo apt-get install samba ②创建共享文件夹 sudo mkdir /home/share ③配置用户 sudo smbpasswd -a kequan ④修改…

软件测评的必要性,第三方软件测试机构推荐

软件测评报告 1、什么是软件测评报告&#xff1f; 测试报告是指把测试的过程和结果写成文档&#xff0c;对发现的问题和缺陷进行分析&#xff0c;为纠正软件的存在的质量问题提供依据&#xff0c;同时为软件验收和交付打下基础。 2、软件测评报告的作用 一份详细的测试报告…

git打tag和版本控制规范

我们在开发中经常会遇到要打tag的情况&#xff0c;但这个tag应该如何打呢&#xff1f;我不知道大家平时是怎么打的&#xff0c;但我基本就是从1.0.0开始进行往上递增&#xff0c;至于如何递增&#xff0c;基本凭感觉。今天同事新打了一个tag进行发版&#xff0c;然后被架构点名…

计算机竞赛 基于深度学习的视频多目标跟踪实现

文章目录 1 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的视频多目标跟踪实现 …

AJAX学习总结+Axios异步框架+Filter拦截器学习+JSON介绍+Listener监听器介绍

壹、AJAX 一、AJAX介绍 AJAX&#xff08;Asynchronous JavaScript And XML&#xff09;&#xff1a;异步的JavaScript和XML AJAX作用&#xff1a; 1. 与服务器进行数据交换&#xff1a;通过AJAX可以给服务器发送请求&#xff0c;并获取服务器响应的数据。&#xff08;原先…

过于依赖性的危机:探索品牌代理商背后的实质含义

据IDC中国报道称&#xff1a;2023年中国低代码与零代码软件市场规模将达到34.7亿元人民币&#xff0c;同比增长32.4%。预计到2027年市场规模将达到106.3亿元人民币&#xff0c;未来5年市场年复合增长率&#xff08;CAGR&#xff09;为32.3%。 随低代码市场规模不断扩大&#xf…

【计算机网络】 确认应答机制与超时重传

文章目录 ACK机制——确认应答机制超时重传 ACK机制——确认应答机制 当我们客户端发送了一个数据&#xff0c;seq是1100&#xff0c;那么服务端在收到时就会回一个ack101的ACK包&#xff0c;代表101之前的包我都收到了&#xff0c;下面请你从101继续发送。然后客户端就会发送1…

无涯教程-JavaScript - IMARGUMENT函数

描述 IMARGUMENT函数返回参数$\theta $(theta),以弧度表示的Angular,如- $$x yi \left | x yi \right | e ^ {i \theta} \left | x yi \right |(\cos \theta \sin \theta)$$ 语法 IMARGUMENT (inumber)争论 Argument描述Required/OptionalInumberA complex number f…

【C++基础】7. 控制语句

文章目录 【 1. 循环 】1.1 循环类型1.2 循环控制语句break 语句continue 语句goto 语句 1.3 无限循环 【 2. 选择 】switch 语句&#xff1f;&#xff1a;语句 【 1. 循环 】 1.1 循环类型 循环类型描述while 循环当给定条件为真时&#xff0c;重复语句或语句组。它会在执行…

floodfill算法(洪水灌溉算法)

一)floodfill算法简介: 二)图像渲染 733. 图像渲染 - 力扣&#xff08;LeetCode&#xff09; class Solution {int[] dx {1, 0, 0, -1};int[] dy {0, 1, -1, 0};//上下搜索的时候要使用向量数组int row0;int col0;int target0;public void dfs(int[][] image,int i,int j,int…

认识模块化

1. 模块化的基本概念 1.1 什么是模块化 模块化是指解决一个复杂问题时&#xff0c;自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说&#xff0c;模块是可组 合、分解和更换的单元。 1. 现实生活中的模块化 2.编程领域中的模块化 编程领域中的模块化&#xff0c;…

教你如何快速阅读葡萄酒标签

我们经常被问及葡萄酒标签上写了什么&#xff0c;总体而言这些信息可以分为四个关键部分&#xff0c;第一品牌或生产商&#xff1b;第二国家或地区&#xff1b;第三葡萄品种&#xff1b;第四年份。 第一品牌或生产商&#xff0c;在寻找葡萄酒的制造商时&#xff0c;著名的品牌名…

手机充值的功能测试框架 - 测试要点

手机充值有微信营销活动的、有 APP 页面应用等&#xff0c;以下是我以前公司的手机充值话费或流量应用的测试要点&#xff0c;分享给大家参考下。 一、手机号码输入框检查 1、手机号码框要控制成只能输入11位数字的文本框。 2、输入以非1开头的手机号&#xff0c;给出提示&a…

第 2 章 线性表 (设立尾指针的单循环链表(链式存储结构)实现)

1. 背景说明 循环链表(circular linked list)&#xff0c;是另一种形式的链式存储结构。它的特点是表中最后一个结点的指针域指向头结点&#xff0c; 整个链表形成一个环。由此&#xff0c;从表中任一结点出发均可找到表中其他结点 。 2. 示例代码 1) status.h /* DataStruct…

Parsing error: The keyword ‘const‘ is reserved

Parsing error: The keyword ‘const’ is reserved 在文件.eslintrc.js中 因为eslint默认审查的es5&#xff0c;需要明确让他审查es6.&#xff0c;所以需要配置parserOptions 配置如下: module.exports {"plugins": ["prettier"],"rules": {…