HTTP/HTTPS

发布于:2025-03-20 ⋅ 阅读:(15) ⋅ 点赞:(0)

目录

HTTP基本概念

抓取HTTP的请求/响应数据

HTTP请求报文 

1.首行

 2.请求头(header)

3.空行

4.正文body

HTTP响应报文

1.响应首行

2.响应的报头

3.空行

​编辑 4.正文

HTTP详细情况

GET和POST的区别

HTTPS

对称加密

非对称加密:

中间人攻击:

解决中间人攻击:


HTTP基本概念

HTTP往往是基于TCP协议实现的,HTTP3.0基于UDP实现。HTTP通常在网页与服务器之间的交互,手机APP和服务器之间的交互。HTTP的作用大应用广,但实际开发中大概率使用HTTPS,本质上还是HTTP,引入了额外加密层。想要进一步了解HTTP协议工作过程,理解HTTP协议报文格式,需要用到“抓包工具”。

抓取HTTP的请求/响应数据

打开Fiddler,抓取浏览器的请求/响应内容:

这些结果都是浏览器打开bing网页的时候给bing发送的http/htpps的请求数据,浏览器访问http服务器时不止一个请求,也可能是多个请求。

蓝色的请求是服务器返回的HTML数据

黑色的请求是普通数据 

 ran对应的就是原始请求的数据,HTTP协议是一个文本格式的协议,本质上,一个HTTP数据包就是按照上述HTTP协议的格式。构造出一串文本,写入到socket中。

HTTP请求报文 

1.首行

首行包含三个部分,请求的方法、请求的URL、版本号,通过空格来区分分这3个部分:例如

请求的方法:

GET https://cn.bing.com/notifications/render?

请求的URL:

bnptrigger=%7B%22PartnerId%22%3A%22HomePage%22%2C%22IID%22%3A%22Bnp

%22%2C%22Attributes%22%3A%7B%22RawRequestURL%22%3A%22%2F%3Fmkt%3

Dzh-CN%22%2C%22Referer%22%3A%22https%3A%2F%2Fcn.bing.com%2F%22%7D%

7D&IG=D35A41719F3D460FBA7E99BEFD2930DF&IID=Bnp

版本号:

HTTP/1.1

 2.请求头(header)

header中可以包含若干行数据,本质上是一个键值对结构。

3.空行

最后一个header后面存在一个空行,类似链表使用null结尾。

4.正文body

正文是可选的http的body相当于tcp/ip等协议的载荷一样,内容任意,可以放任何你想传输的数据。 

HTTP响应报文

1.响应首行

例如:HTTP/1.1 200 OK 分别对应:版本号 状态码 状态码描述。响应的首行描述这个响应的成功或者失败,和具体的原因。

2.响应的报头

与请求的报头类似。

3.空行

报头最后有一个空行用于区分。

 4.正文

 正文中内容任意,空行没有特殊意义,只有HTTP数据包中的第一个空行才是header的结束标记。

HTTP详细情况

URL唯一资源定位符(网址)

协议名称:http://

IP地址/域名

端口号 http - 80        https - 443        ssh - 22        ftp - 23

路径(path)描述了服务器上的哪个程序,管理的哪个资源。

查询字符串 query string 浏览器给服务器传递的参数,使用 = 分割键和值

片段标识符 # 表示网页中的某个部分

GET和POST的区别

GET和POST都是HTTP中的请求方式。

GET和POST从本质上讲:没啥差别,GET的应用场景,使用POST也可以,POST的应用场景,使用GET也可以。

从使用习惯的角度来讲:

1.GET从语义上说,通常用来获取数据,POST从语义上来说,通常用来提交数据。

2.服务器对应GET请求的设计是幂等的,POST请求的设计不是幂等的。HTTP官方文档的建议。

同一个人,不同时间进行搜索,结果不一样。不同的人搜索,结果也不一样。

3.GET请求可以被缓存,POST一般不行。

HTTPS

HTTPS本质上就是HTTP基础上增加了一个加密层,即HTTPS = HTTP + SSL(安全相关的协议)。HTTP本身是一个不安全的协议,为了安全传输信息,引入了加密。

对称加密

最简单的就是对称加密:

每个客户端生成自己的密钥,告诉服务器就可以实现对称加密。如果中间有黑客,获取到的数据也是加密的,只要黑客不知道密钥,就无法知道明文是啥。那么如何把密钥传给对方呢?如果采用明文传输,黑客就会获取到密钥,此时就需要给密钥进行加密。

非对称加密:

 通过使用非对称加密的方式,对密钥进行加密。服务器生成公钥和私钥,当客户端连接上服务器后,服务器就会把公钥告诉客户端,接下来客户端生成对称密钥,通过服务器拿到的公钥,针对对称密钥进行加密,再把对称密钥的秘文传输给服务器。服务器用私钥对公钥进行解密,解密成功拿到对称密钥,最后拿到原始数据。

 即使使用对密钥加密传输,黑客还是能获取到原始数据。

中间人攻击:

黑客模仿服务器,自己生成私钥和公钥,向客户端伪造信息,在伪造客户端与服务器进行通信:

此时客户端和服务器都无法发现黑客的存在。

解决中间人攻击:

解决中间让人攻击,最关键的 就是让客户端分辨当前的公钥是不是需要通信服务器的公钥。引入第三方公证机构对公钥进行公证,此时客户端看到了这个公钥被公证了,就可以认为这是合法的公钥,然后使用合法的公钥进行加密通信。

服务器上线自己网站的时候,就会去第三方公证机构申请一个证书,客户端收到证书后,就会对这些证书进行合法性校验:

1.针对证书的字段进行计算校验和,得到校验和1。一个证书会包含类似字段,如:发证机构、证书的 有效期、服务器公钥、证书持有者、持有者网站域名等,拿到这些明文进行校验和的计算。

2.针对数字签名进行解密,得到校验和2。数字签名是用公证机构的公钥进行加密的,解密时使用公证机构的公钥进行解密。这个公钥并不是通过网络的方式获取的,而是操作系统会内置公证机构的公钥。

3.客户端比较校验和1和校验和2。当校验和相等时,就说明整个证书是没有被修改的,证书有效,证书中的公钥也自然可信服务器的公钥。

引入公证机构后,即使黑客解密公证机构的公钥,也无法对数字签名进行修改。如果黑客修改了证书中的公钥,但是不修改校验和,客户端进行校验时校验和不相同,就可以判定证书不合法。如果由于黑客不知道公证机构的私钥,黑客不就能对校验和进行修改。

文章到此结束,感谢观看