浅谈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.服务器用私钥解密获得密钥,发送响应,用密钥加密。

.

相关推荐
追风赶月、2 小时前
【网络】网络层IP协议
网络·网络协议·tcp/ip
weixin_419658314 小时前
HTTPS的加密流程
网络协议·http·https
network_tester5 小时前
5G毫米波测试规范详解:3GPP核心标准、测试流程与实战挑战
网络·网络协议·测试工具·5g·信息与通信·信号处理·射频工程
红豆和绿豆5 小时前
如何实现http请求到不同机房机器的负载均衡和路由转发
网络协议·http·负载均衡
爱写Bug的小孙5 小时前
【Http和Https区别】
网络协议·http·https
星星岛屿6 小时前
网络原理---HTTP/HTTPS
网络·网络协议·tcp/ip
java干货6 小时前
PUT vs PATCH:如何选择正确的HTTP方法优化你的API设计?
网络·网络协议·http
科技小E6 小时前
低延迟,高互动:EasyRTC的全场景实时通信解决方案
网络协议·小程序·音视频·webrtc·p2p·智能硬件·视频监控
上分小子2.07 小时前
HTTP-
网络·网络协议·http