浅谈HTTP及HTTPS协议

devtools/2025/2/28 1:03:34/
http://www.w3.org/2000/svg" style="display: none;">

1.什么是HTTP?

HTTP全称是超文本传输协议,是一种基于TCP协议的应用非常广泛的应用层协议。

1.1常见应用场景

一.浏览器与服务器之间的交互。
二.手机和服务器之间通信。
三。多个服务器之间的通信。

2.HTTP请求详解

2.1请求报文格式

我们首先看一下协议格式图,再来详细描述各个部分。

https://i-blog.csdnimg.cn/direct/07bab07821eb42ac8fc703dfddca4596.png#pic_center" alt="在这里插入图片描述" />

2.2认识请求行

2.2.1认识方法

在HTTP中,常用的方法一般有两个:GET和POST。

GET方法用于获取资源
POST方法用于提交一些数据到服务器

GET方法和POST方法的区别?
1.语义不同,GET方法一般用于获取数据,POST数据一般用于输出数据。
2.GET的body(正文)一般为空,需要传递数据通过query string传递
【GET的URL长度无限制,如果有,也是浏览器或者应用程序规定的】
POST的query string一般为空,需要传递数据通过body传递。
3.GET请求一般是幂等的,POST请求一般不是幂等的
4.GET可以被缓存在本地,(下次访问时就无需联网,而直接从本地缓存获取)POST不可以
【这就是为什么联网时点开看过的手机图片断网后也可以加载出来,而没看过的就不可以】

2.2.2认识URL

URL其实就是统一资源定位符(俗称网址)
例如:https;//www.baidu.com就是一个URL,仅此而已。

2.2.3认识Version

请求行中的version就是指HTTP协议的版本号,用于标识客户端使用的HTTP协议版本。

2.3认识请求报头(header)

HOST:表示服务器主机的地址 和端口号
Content-Length:表示Body中数据长度,单位是字节(在空行后就读取多长)
Content-Type:表示Body中的数据长度
User-Agent(简称UA):表示浏览器/操作系统的属性
Referer:表示当前页面是从那个页面跳转来的

Cookie:它的作用是存储用户在此网站的一些数据,比如登录信息和操作记录,这样用户下次登陆时就不用重新输入账号密码之类的,每个网站都有自己的Cookie,各自之间不能访问。

2.4认识空行

空行就是将请求正文和以上内容分开,但是因为大多数请求都是使用GET方法的,而GET方法的正文一般为空,所以…当我们用抓包工具例如Fidder去看请求报文时,一般到报头就结束了

3.HTTP响应详解

3.1响应报文格式

https://i-blog.csdnimg.cn/direct/24cce846b6e5430aa1f818f1f44ee002.png#pic_center" alt="在这里插入图片描述" />

3.2认识状态码

状态码;表示访问一个页面的结果。
常见状态码:
200 OK 表示访问成功
404 Not Found 表示没有找到资源【URL写错了】
403 Forbidden 表示无权访问,一般是企业内部网址

状态码总结;
1xx 信息行状态码 接收的请求正在处理
2xx 成功状态码 请求正常处理完毕
3xx 重定向状态码 需要进行附加操作以完成请求
4xx 客户端错误状态码 服务器无法处理请求
5xx 服务器错误状态码 服务器处理请求出错

3.3其余

和请求部分差不多,只不过正文部分不是空,是客户端请求的数据。

4.什么是HTTPS?

HTTPS跟HTTP差不多,只是在其基础上引入了一个“加密层”。HTTP虽然传输效率高,但是数据传输是采用明文形式的,随着互联网技术的发展,这种方式容易造成数据泄露,造成经济损失。

5.对称加密和非对称加密

那么HTTPS是如何给数据进行加密的呢?
有两种方式,分别是对称加密和非对称加密。

5.1对称加密

客户端生成一个密钥发给服务器,两方使用这个密钥对数据进行加密,进行数据传输。
对称加密是指数据加密和解密的密钥是相同的
优点: 数据传输效率高(当然跟明文传输比还差点)
缺点:一旦密钥被掌握,安全性这块也基本等于明文传输了

5.2非对称加密

客户端使用公钥加密数据变成密文,服务器使用私钥解密密文
公钥用来加密,私钥用来解密
优点:相对对称加密安全性高点
缺点:传输效率低下

如何加密数据?

是的,我们合二为一,具体思路为:
首先使用非对称加密的方式将密钥使用公钥加密发送给服务器,服务器使用私钥解密,拿到密钥,然后双方使用密钥来通信,具体如图:
https://i-blog.csdnimg.cn/direct/e91f6f1b2f9146808fdb9135ecd761b2.png#pic_center" alt="在这里插入图片描述" />

6.中间人攻击

即使采用了合二为一法,看似天衣无缝,但其实黑客还是有办法去破解的(欸我草黑客怎么这么坏)。中间人攻击就是典型的方法之一
具体如图:
https://i-blog.csdnimg.cn/direct/c76aeaaa428e4504b992e1e4dd80e022.png#pic_center" alt="在这里插入图片描述" />
为什么会造成这种情况呢?

其实主要原因就是公钥这玩意不是客户端自带的,是在客户端向服务器发送连接请求后服务端发给客户端的(明文发送,很容易被截获),而服务器私钥也是根据发给客户端的公钥生成的。

那公钥加密一下不就好了?
这就扯成先有蛋还是先有鸡的问题了,那加密公钥的密钥怎么让服务端知道?服务端不知道怎么解密?

7.破局关键——证书!

问题的关键就在于关键的问题的关键,嗯…那么防止中间人攻击的关键就在于鉴别收到公钥的真假,如果鉴别到假公钥我就不传数据了,嗯…那么最终的解决办法就是把公钥放在证书里,然后传证书(证书由权威机构颁发)!

7.1简单介绍证书

证书长这样:
https://i-blog.csdnimg.cn/direct/456e38f8f5164333bf532e2bb51a26bd.png#pic_center" alt="在这里插入图片描述" />
可以把它理解为一个结构化的字符串。

那么有没有可能黑客截获证书,将其中公钥修改成自己生成的公钥(欸我草黑客怎么这么坏),进行中间人攻击?
啊还真是有可能的,那么问题就变成了
如何验证证书有没有被修改?
权威机构将证书中所有信息生成一个字符串,然后进行运算(如MD5算法)得到一个值,这个值就是数据签名,客户端拿到证书首先将除签名外所有信息进行运算,算出来值与证书中的数据签名一样即可证明没有被修改。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。真的可以证明吗?有没有可能黑客根据算法去修改公钥,只要保证最后值不变就行了(欸我草黑客怎么这么坏!!!!)?可行吗?
还真可行!那么问题又变成了
如何验证证书中的数字签名有没有被修改?
那么我们就需要给数字签名加密,具体过程:权威机构用私钥给数字签名加密,公钥则由客户端自带,当客户端收到证书时,使用自带的公钥解密数字签名,再自己根据证书内容算一个数字签名,两者相同则表示数字签名没有被修改。至此,HTTPS数据传输安全就得到了保证。

8.小结

8.1HTTPS中涉及的三个密钥

1.正常通讯使用的密钥
2.用于保证发送密钥安全的非对称加密的公钥和私钥
3.证书机构和客户端使用的用于保证证书真伪的公钥和私钥

8.2HTTPS的通讯过程

1.三次握手
2.客户端发送连接请求
3.服务器发送证书,包含公钥
4.客户端使用自带私钥解密数字签名的值,并验证证书真伪
5.若证书为真则发送之后通讯用的密钥,用公钥加密
6.服务器用私钥解密获得密钥,发送响应,用密钥加密。

.


http://www.ppmy.cn/devtools/163211.html

相关文章

Go语言--语法基础1--下载安装

2、下载安装 1、下载源码包: go1.18.4.linux-amd64.tar.gz。 官方地址:https://golang.google.cn/dl/ 云盘地址:链接: https://pan.baidu.com/s/1N2jrRHaPibvmmNFep3VYag 提 取码: zkc3 2、将下载的源码包解压…

DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求

DeepSeek 新的 LLM 推理方法 DeepSeek 通过强化学习(RL)提出了一种创新的改进大规模语言模型(LLM)推理能力的方法,这在他们最近关于 DeepSeek-R1 的论文中有详细介绍。这项研究代表了在不依赖于大量有监督微调的情况下…

element-ui使用时间选择器 datetime 类型报错

datetime 类型报错 当使用日期组件的type"datetime"时,可能会遇到mask.replace is not a function的错误提示,导致组件无法正常渲染。这通常是因为在项目中定义了与Element UI内部冲突的全局方法,例如dateFormat等方法名与组件内部…

Deepin(Linux)设置开机自动启动 MySQL

要在系统启动时自动启动 MySQL,可以通过配置 systemd 来实现。由于已经完成了 MySQL 的安装并且能够启动 MySQL 服务,接下来我们将创建一个 systemd 服务单元文件,让 MySQL 在系统启动时自动启动。 1. 创建 systemd 服务文件 首先&#xff…

百度觉醒,李彦宏渴望光荣

文 | 大力财经 作者 | 魏力 2025年刚刚开年,被一家名为DeepSeek的初创公司强势改写。在量化交易出身的创始人梁文锋的带领下,这支团队以不到ChatGPT 6%的训练成本,成功推出了性能可与OpenAI媲美的开源大模型。 此成果一经问世,…

angular新闻列表分页

说明:使用angular技术,material控件,ngfor循环,img网络图片展示,分页组件 效果图: step1: C:\Users\Administrator\WebstormProjects\untitled4\src\app\home\home.component.ts import { Component, V…

java进阶1——JVM

java进阶——JVM 1、JVM概述 作用 Java 虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对 应平台上的机器码指令行,每一条 java 指令,java 虚拟机中都有详细定义,如怎么取操 作数&#xff0c…

突破“第一崇拜“:五维心理重构之路

一、视频介绍 在这个崇尚"第一"的时代,我们如何找到自己的独特价值?本视频将带您踏上五维心理重构之旅,从诗意人生的角度探讨如何突破"圣人之下皆蝼蚁"的局限。我们将穿越人生的不同阶段,从青春的意气风发到…