当前位置: 首页 > news >正文

浅谈HTTP及HTTPS协议

1.什么是HTTP?

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

1.1常见应用场景

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

2.HTTP请求详解

2.1请求报文格式

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

在这里插入图片描述

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响应报文格式

在这里插入图片描述

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非对称加密

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

如何加密数据?

是的,我们合二为一,具体思路为:
首先使用非对称加密的方式将密钥使用公钥加密发送给服务器,服务器使用私钥解密,拿到密钥,然后双方使用密钥来通信,具体如图:
在这里插入图片描述

6.中间人攻击

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

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

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

7.破局关键——证书!

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

7.1简单介绍证书

证书长这样:
在这里插入图片描述
可以把它理解为一个结构化的字符串。

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

8.小结

8.1HTTPS中涉及的三个密钥

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

8.2HTTPS的通讯过程

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

.

相关文章:

  • 亚马逊详情接口:开发、应用与实战指南
  • osgEarth安装总结
  • 洛谷 B2006:地球人口承载力估计 ← float 类型
  • 基于开源鸿蒙(OpenHarmony)的【智能家居综合应用】系统
  • 蓝桥杯---快速排序(leetcode第159题)最小的k个元素(剑指offer原题)
  • react 新手入门指南,常用命令
  • 【Uniapp-Vue3】开发userStore用户所需的相关操作
  • 【Python爬虫(85)】联邦学习:爬虫数据协作的隐私保护新范式
  • 本地部署 deepseek-r1 1.5B方法-ubuntu20.04 python3.10 pycharm虚拟环境
  • QEMU源码全解析 —— 内存虚拟化(21)
  • Elasticsearch 的分布式架构原理:通俗易懂版
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_destroy_pool 函数
  • mmdetection框架下使用yolov3训练Seaships数据集
  • 【Bug】natten:安装报错(临近注意力机制的高效cuda内核实现)
  • Ubuntu+deepseek+Dify本地部署
  • Kubernetes 资源利用率翻倍?离在线混合部署深度解析
  • 进程间的通信(消息队列和共享信息)
  • Docker 部署 MinIO 对象存储服务
  • 核货宝订货系统助力东南亚国家批发贸易企业数字化转型升级
  • 【Java】Spring Boot全量YAML配置说明
  • 泽连斯基拒绝普京72小时停火提议,坚持应尽快实现30天停火
  • 人民日报评论员:把造福人民作为根本价值取向
  • 李在明涉嫌违反《公职选举法》案将于15日进行首次重审公审
  • 安徽六安特色产品将“组团”入沪,借力五五购物节开拓市场
  • 解放日报:硬科企业由此迈出“市场第一步”
  • 强制性国家标准《危险化学品企业安全生产标准化通用规范》发布