当前位置:   article > 正文

HTTP协议内容以及HTTPS加密方式_从http请求中如何判断body加密方式

从http请求中如何判断body加密方式


前言

HTTP 协议是被我们广泛使用的应用层协议,我们平时使用浏览器时,就可以都看到浏览器网址前面有一个 http:// 表示我们使用的是 HTTP 协议。目前 HTTP 协议大多是基于 TCP 协议实现的,只有最新的少部分版本是基于 UDP 实现。本文会通过 Fiddler 抓包来简单介绍 HTTP 协议内容,并介绍 HTTPS 的加密方式


提示:以下是本篇文章正文内容,下面案例可供参考

一、HTTP 协议内容

1. 请求内容

在这里插入图片描述


在这里插入图片描述


HTTP 请求大概可以分为四个部分:首行、请求头、空行、body。

  1. 上面两图,第一行的内容就是首行,可以看到第一张图是 GET 开头,第二张是 POST 开头,GET 和 POST 就表示这个 HTTP 请求使用的方法类型,从首行下面一行开始,一直到空行,是请求头,在第二张图中可以明显的看到一个空白的换行,这个就是空行,第一张图的最下面也能看到,但是因为没有 body 被隔开,所以不算明显 ,空行下面就是 body,是 HTTP 请求的内容。

  2. 首行:首行大概可以分为三个部分,HTTP 请求的方法、URL 和 HTTP 版本号。版本号是首行最后面的部分,例如上图中的 HTTP / 1.1 就表示 HTTP 的 1.1 版本。 HTTP 请求的方法,下面再做简单介绍,它就表示这个请求大概是要做什么。然后是一个 URL,URL 就是网络资源唯一定位符,通过一个 URL 就能访问到网络中一个具体的资源。一个 URL 大概包括这些内容:
    在这里插入图片描述
    以上只介绍了个大概,还有部分 URL 内容并没有介绍到。首行的最后一个部分是版本号,也就是图中query string 后面的 HTTP/1.1,表示这个请求使用 HTTP 版本是 1.1。

  • GET 方法和 POST 方法的差别:HTTP 请求可以使用的方法很多,一般使用 GET 表示取数据、POST 表示上传数据,类似的还有 PUT 传输文件、DELETE 删除文件、HEAD 获得报头等等。虽然方法很多,但实际使用中,一般只用 GET 和 POST 两个方法完成所有的任务,这众多的方法只是为了表达不同请求的语义,是设计者为了让这些请求看起来更清晰明了,但用着用着就变成 GET ,POST 一把梭了。而 GET 和 POST 其实功能上并没有本质差别,使用 GET 的场景,也可以使用 POST ,使用 POST 的场景,同样可以换成 GET,二者只有一些细节上的差别。比如上面提到的语义不同,但这个语义的界限也已经很模糊了。然后就是 HTTP 请求的构成不同,通常,GET 请求的具体内容是放在 query string,而不是 body,POST 则是放在 body 中,这个也不是强制性的区别,只是使用习惯而已。然后就是 GET 请求一般是幂等的,而 POST 一般不是,而这个区别同样不是强制性的区别。幂等,指的是同样的请求发送多次,得到的结果都是一样的、确定的,如果多个同样的请求得到的结果不同、不确定,那就说它不是幂等的。最后,GET 是可以被缓存的,POST 不行,这个实际上是与是否幂等相关联的,如果请求幂等,那么我们将响应进行缓存,每次有同样的请求过来,直接将缓存好的结果返回就行,这样可以提高服务器的效率,如果不幂等,那就一定不能进行缓存。
  1. 请求头:从首行结束,一直到空行,都属于请求头的内容。从上图中可以看到,请求头中有很多不同的内容,他们是通过“:”连接的键值对,这里只挑出部分进行介绍。
  • Content-length:表示整个请求的长度
  • User-Agent:表示用户使用的设备、系统等,它可以对浏览器做提示,早期的浏览器还没有现在那么强大的功能,并且不同的浏览器实现的功能也有较多的差异,所以就需要对不同的设备和系统做出不同的应对。我们现在的浏览器主要是对手机和电脑做区别。
  • Content-Type:数据以及字符集编码的类型。

2. 响应内容

在这里插入图片描述
HTTP响应同样可以分为四个部分:首行、响应头、空行、body。

  1. 首行:响应的首行有三个内容,首先图中的 HTTP/1.1 表示协议名和版本号,200 表示状态码,OK 是对状态码的描述。响应中的状态码一般可以按照 1开头、2开头、3开头、4开头、5开头和 6开头来分别理解。1 开头和 6 开头的比较少见,这里就不做介绍了。2 开头最多见的就是 200,表示一次成功的交互,请求、响应都没有问题。3 开头常见的有 301 和 302,表示重定向,将请求导向另外的坐标,举个例子:我打电话找我的朋友,但是我朋友的手机号码换了,他之前的号码给他的妈妈在用,这时,我打他之前的号码就会是他妈妈接到,然后他妈妈就会给我他的新号码,我再打这个新号码找他,这就是将我的请求重新导向另外的坐标了。4开头最常见的是 403 和 404404 not found 相信很多人平时都见到过,这个就表示要访问的文件不存在403 一般搭配的是 forbidden,表示没有访问权限,不能访问目标文件。5 开头是 500 和 504 常见,表示服务器出现问题,导致无法访问。
  2. 响应头:同样是若干键值对,键值对的数量和含义都是不确定的,其中第一个 Content-type: application / json 表示响应的 body 数据格式为 JSON 格式,是现在非常常用的前后端交互数据格式。其余的这里不做过多解释。
  3. 空行:用来分割响应头和 body。
  4. body:响应的数据,采用的是 JSON 格式,用 “ { } ” 框起来的若干键值对,键和值之间用 “:”连接,键值对之间用 “,”隔开,其中,键必须是字符串,值可以是任意类型,甚至可以是另一个JSON。

二、HTTPS 的加密

首先我们要知道,HTTPS 和 HTTP 之间基本只有加密与未加密的区别。网络上传输的数据很多都设计隐私或机密,所以对网络传输加密是非常有必要的。接下来就是对 HTTPS 加密方式的简要介绍。以下内容仅涉及基本的加密方式,不涉及具体的加密方法。

1.对称加密和非对称加密两种基本方式

对称加密:客户端和服务器持有相同的密钥:公钥,公钥就是大家都能获取到的密钥,加密和解密都由这个公钥完成,公钥由客户端生成,当一个服务器同时连接了多个客户端时,每个客户端持有的公钥都是不相同的。
非对称加密:客户端和服务器持有不同的密钥,公钥和私钥,,私钥就是只有自己知道的,一般是服务器持私钥,并由服务器给每个客户端分发公钥,使用非对称加密的成本比对称加密高很多。

  1. 只使用对称加密:如果只使用对称加密,就会出现如下情况请添加图片描述
    这样的加密看起来好像很不错,但黑客很容易就能从第一次交互中截获公钥,这样,之后的每次数据传输,就都会被黑客解密。

  2. 只使用非对称加密:那如果只使用非对称加密,是否就能安全呢?答案是可以的,因为非对称加密的私钥是只有自己知道的,不管是使用私钥加密,公钥解密,还是使用公钥加密,私钥解密,拿不到私钥的黑客都是获取不到明文数据的,但使用非对称加密的成本是非常高的,如果所有的数据传输都是用非对称加密,就会造成非常大的资源浪费。

  3. 使用非对称加密对对称加密的公钥进行加密:看起来有点绕,但并不难理解,既然对称加密的公钥很容易被截获,非对称加密又能保证安全,那使用非对称加密将对称加密的公钥进行加密,不就可以既能保证安全,又能最大程度降低成本了吗。这个加密过程大致如下:在这里插入图片描述

这个加密方法看起来就非常完美了,但其实,还存在一个致命的问题

  1. 使用证书补充第3种加密:我们同样用一张图来说明上述过程的问题
    在这里插入图片描述
    上图描述的过程,我们一般称为中间人攻击,简单来说,就是黑客在服务器分发公钥的时候进行偷梁换柱。
    我们是通过引入证书来解决这个问题的。这个很好理解,就是服务器和客户端双方,选择一个共同信任的机构来分发证书,只有持有这个机构分发的证书的机器传输的信息才是被信任的、可以使用的。配合上图,就是在第 3 步时,服务器分发的公钥777搭载了一个证书,而黑客是获取不到这个证书的,黑客截取到777之后,分发给客户端的666没有这个证书,那么客户端就不会信任这个666,也就不会触发后续的一系列操作。

总结

以上就是对 HTTP 请求、响应内容以及 HTTPS 加密的简要介绍,希望能对你有帮助。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/616316
推荐阅读
相关标签
  

闽ICP备14008679号