HTTP协议

 HTTP~

目录

          1.HTTP请求

              1.1请求行(首行)

                  1.1.1HTTP的方法(主谈GET和POST)

                  1.1.2URL

                  1.1.3版本号

             1.2请求头(header)

                 1.2.1User-Agent(UA)

                 1.2.2Referer

                 1.2.3Cookie

            1.3空行

            1.4请求正文(body)

        2.HTTP响应

            2.1首行

                  2.1.1版本号

                  2.1.2状态码

                  2.1.3OK

            2.2响应

            2.3空行(header)

            2.4正文(body)

       1.基于form表单构造

       2.基于ajax

       3.基于Java socket构造

       1.引入原因

       2.加密形式

         2.1对称加密

         2.2非对称加密


一、什么是HTTP协议

HTTP (全称为 "超文本传输协议") 是一种应用非常广泛的 应用层协议。

网络协议的种类是非常多的,比如TCP,IP,HTTP......协议等。而HTTP协议大概是我们之后日常开发中用到的最多的协议。HTTP协议是处于TCP/IP五层协议栈的应用层位置处。而HTTP在传输层是基于TCP实现的(HTTP1.0, HTTP1.1, HTTP2.0 均为TCP, HTTP3 基于 UDP实现,当下互联网上绝大部分使用的HTTP都是HTTP1.1)

传输层协议,主要关注的是端对端之间的数据传输. TCP重点关注的是可靠传输。

应用层协议,则是站在程序应用的角度要对传输的数据来进行具体的使用。而应用层协议,很多时候是程序员根据具体需求来设定实现的,然而程序员的水平也是参差不齐的,于是一些大佬就发明了一些很好用的协议,大家都可以直接套搬,HTTP协议就是其中一个典型的代表。HTTP虽然是已经设计好的协议,但是它的可拓展性是非常强的,可以根据实际需要,让程序员传入各种自定义的数据信息。

而HTTP的应用场景也是相当规范的,比如:

随便打开浏览器的一个网站,以及手机APP打开一个软件时,加载的数据等等。

二、抓包工具Fiddler

①简介:

Fiddler是一个专门的针对于HTTP进行抓包的工具。(没法抓TCP,UDP,IP等这些)

而抓包工具的作用就相当于一个中间代理。举个通俗易懂的例子:比如我要把作业交到办公室,但是我现在有点事,我就让我室友帮我去交,她交了之后,回来后给我说已经交了。这个过程中,我室友就相当于中间的代理,通过这个中间代理,我的请求得到了响应。

②下载源头:(通过官网)

Fiddler | Web Debugging Proxy and Troubleshooting Solutions (telerik.com)

③具体使用:

a.Fiddler左侧是一个列表:(显示了当前抓到的所有HTTP和HTTPS的数据报)

 注意:HTTPS是在HTTP的基础上进入了加密协议,这个在后续将会谈到。

b.当选中左侧某个条目,并双击后,在右侧就会得到其详细的信息:

右侧上方是请求:

 右侧下方是响应:

 c.若是字体太小看不清,可以点击View in Notepad进行形成文本形式的放大。

 d.针对出现乱码的操作:

为啥会出现乱码呢?大概率是因为文件本身内容过多,进行了压缩,这个时候我们不必紧张,更具一下操作即可看到原来本身的内容

三、HTTP协议格式

①协议格式:

数据是怎么组织的

②原理及部分说明:

UDP:报头(源端口,目的端口,长度,校验和)+载荷

UDP/TCP/IP这些协议都是二进制协议,经常要理解到二进制的bit位,而HTTP是一个文本的格式,更方便肉眼进行观察。而我们也是通过上面提到的抓包工具才能看到其中的细节部分的。如:交互过程中的请求与响应。

注意:我们上面在介绍fiddler中,我们说了代理的作用就是一个中间者。并且举了室友帮我交作业的这个例子。在这个例子中,交作业通过了室友代理,交完了的结果也是由室友给我进行反馈,所以说请求和响应是都要路过代理的。

          1.HTTP请求

HTTP请求的格式如下:

实际图中:

              1.1请求行(首行)

                  1.1.1HTTP的方法(主谈GET和POST)

①什么是HTTP方法:

HTTP方法主要是描述了这个请求想做什么;一般我们常用到的方法就是GET和POST方法。

下图还介绍了一些其他的方法:

 而HTTP引入这些方法的初衷,是为了表示不同的“语义”。(比如常见的语义:HTML,h3,p,a,img......这些有语义标签,以及div,span等这些无语义标签。)

设计HTTP的人希望大家根据语义来写标签。但是随着时间的推移,GET和POST方法逐渐成为了主流,就没怎么再过多考虑语义的情况。

②GET与POST方法的区别与联系:

注意!!!GET和POST方法在本质上是没有什么区别的。具体来说就是使用于GET和POST的场景,往往是能够互换的。但是在细节上还是存在一定的差距。

a.语义上:

GET:是从服务器获得到的数据。更多是取数据的过程。

POST:是向服务器提交/发送要被处理的数据,更多是用来上传数据。

但现状是,GET也经常用来上传数据,POST也经常用来取数据。

b.body有否:

GET是没有body的,它是通过query string(查询字符串)向服务器传递数据

但POST是有body的,POST通过body向服务器传递数据,但POST没有 query string。

但是我们是可以通过一定方式让GET拥有body,POST拥有query string的。

c.幂等与否:

GET的请求一般是幂等的,而POST的请求则一般是不是幂等的。

(幂等:是指每次相同的输入得到的结果是相同的;不幂等:每次相同的输入得到的结果是不确定的)

d.缓存与否:

GET可以被缓存,POST不能被缓存。

能不能缓存是与是否幂等相关联的,因为幂等的结果是相同的,这样的记录就提高了效率,不用重新查找,而非幂等结果本身就是不确定的,因此也没有必要被缓存而浪费空间。

                  1.1.2URL

①什么是URL:

URL是“网络唯一资源的地址符”。顾名思义:既要明确主机是谁,又要明确取主机哪个资源。要访问网络资源具体地址在哪。

②URL的组成:

一图带你详解URL

③对各部分进行详细说明:

 a.协议方案名:

描述了当前URL是给哪个协议使用的。比如:http://自然是给HTTP使用的;而https://是给HTTPS使用的。

b.登录信息:

这个是在很久之前,在URL中我们直接可以看到用户的用户名和密码,很显然,放到如今是很不适用的,所以现在没有这种写法了。

c.服务器地址:

这告诉了我们要访问的主机是哪个,这里可以是一个IP地址,也可以是域名

d.服务器端口号:

表明我们要访问主机上的哪个程序。而端口号在大部分情况的时候是省略了的。但是省略并不是代表着没有,我们常用默认值来代表省略。比如:对于以http开头的URL我们设置的默认端口号值为80;而对于以https开头的URL我们设置的默认端口号值为443。

e.带层次的文件路径:

文件路径,描述了当前要访问的服务器资源是啥。虽然请求的URL中,写的是一个文件路径,但是不一定服务器上就真实存在这样一个对应的文件。这个文件可能是真实存在的,也有可能是在磁盘上存在的,也可能是虚拟的,由服务器代码构造出的一个动态数据。

f.查询字符串:

本质上是浏览器/客户端,给服务器传递的自定义的信息,相当于对获取到的资源提出了进一步的要求,查询字符串的内容,本质上也是键值对结构,完全是程序员自己定义的,查询字符串和路径之间,常使用?来进行分割

h.片段标识符:

描述了要访问当前HTML页面中哪个具体子部分,能够控制浏览器滚动到相关位置

④URL小结:

上述的IP地址+端口+带层次的文件路径其实就描述了一个网络上具体的资源但是在这个基础之上,还可以携带一些其他的要求,也就是后面的参数。

对URL来说,里面的结构看起来比较复杂,其实最重要的部分与开发相关的就以下四点:

a.ip地址/域名

b.端口号

c.带层次结构的路径

d.query string查询字符串

⑤URL eocode和decode:

当query string中如果包含了特殊字符,就需要对特殊字符进行转义,在这个转义的过程,就叫做url encode。反之,把转义后的内容还原回来,就叫做url decode。
需要注意的是,/:?&=.......这些符号都是在URL中具有特定含义的。

万一,query string里也包含这类特殊符号,就可能导致URL被解析失败.

下面我们举一个例子:

当你搜索C++,就会出现以下的情况:

                  1.1.3版本号

版本号:HTTP/1.1表示当前使用的HTTP的版本号是1.1(当然此时的版本号是当下的主流)

             1.2请求头(header)

①什么是请求头?

请求头包含了很多行,每一行都是一个键值对,键和值之间常使用:空格来进行分割。且键值对的个数也是不固定的,不同的键值对的含义也是不同的。

②示例:

③对一些简单常见的键值对进行介绍:

a.Host:

后面跟的是一个域名,可以通过DNS解析转化成IP地址 

b.content-length:

body中的数据长度;前面也提到过,HTTP协议是基于TCP协议的,而TCP协议是一个面向字节流的协议,这里就会出现粘包问题,对于同一数据内容被处理在了不同的包中,这个时候想要对整体数据进行处理,是很麻烦的。所以我们通过合理设计应用层协议,来明确包和包之间的边界;比如在HTTP中通过使用分隔符和长度。

如果当前有若干个GET请求到了TCP缓冲区中,应用程序读取请求时,以空行为分隔符。

如果当前有若干个POST请求到了TCP缓冲区中,应用程序读取请求时,这个时候空行后面仍有body,当应用程序读到空行之后,就需要按照content-length表明的长度,继续读若干长度的数据。

c.content-type:

表示请求中body的数据格式;

常见三种数据格式如下:

(1)application/x-www-form-urlencoded: form 表单提交的数据格式 .
(2) multipart/form-data: form 表单提交的数据格式 ( form 标签中加上
enctyped="multipart/form - data" . 通常用于提交图片 / 文件 .
(3)application/json: 数据为 json 格式
content-length和content-type这两个属性都是用来描述含有body的的请求(POST),如果不含有body,就不需要这两个字段了。

                 1.2.1User-Agent(UA)

①什么是User-Agent?

简称UA;表示的是用户在拿一个什么样的东西在上网;

②详细示例:

③UA的作用:

早期的时候,有人用棒棒机上网,有人用智能手机上网,浏览器的差别是相当大的,这个时候就给网站开发人员带来了困难,所以就通过UA采取自报家门的这种方式,通过报出相应的需求来得到响应。

但是到如今,主流的浏览器差别就很小了,因此UA这个字段的作用就没有那么大了,但是却也被赋予了新的使命,比如现阶段用来区分是pc端还是手机端,给相应的客户端打开相适应的页面的需求。

                 1.2.2Referer

①什么是Referer?

Referer是用来表示当前页面是从哪个页面跳转过来的字段。

②示例:

需要注意的是并不是所有页面都有Referer ,如果是直接通过地址栏输入地址或者是在收藏夹内点开访问,这个时候是没有Referer的

③Referer的作用:

这个关键字是相当重要的,比如广告点击的收费,商家通过广告的Referer跳转页面可以判断出是由哪个网站跳过来,然后进行相应费用的结算。值得注意的是,这些网站可能被黑客篡改,后面我们将会介绍,如何进行加密等。

                 1.2.3Cookie

①什么是Cookie?

Cookie就是给浏览器提供一种能够持久化存储数据的机制。这里的持久化是指不会因为电脑或者应用程序重启而导致数据丢失,也就是说实质上是写在磁盘上的内容。

②Cookie的组织形式:

a.根据域名来组织,针对每个域名分配一个小房间。

举个例子,当我访问力扣的时候,浏览器会给这个域名记录一组cookie

b.在其中一个小房间里,又会按照键值对的形式来组织数据。

例如:

③Cookie数据的来源:

Cookie数据实际上是服务器返回给客户端的,例如下图

 包含了一组这样的header。当服务器完成身份认证之后,就给客户端返回了一些具体的信息,信息就是通过set-cookie这样的响应报头来表示的。

④如何更好理解cookie?

这里举一个通俗易懂的例子:

 当你去一个医院看病的时候,往往那个医院会让你去办一张就诊卡,后续的所有操作都是基于就诊卡上来进行的操作,这个就诊卡就有唯一确定你身份的身份证号码和名字。因此当你后续需要再次来该医院看病时,医生一刷你的就诊卡就能够知道你的既往病史,若是医生给你开了检查或者是药,那么这个时候就存储在了你的就诊卡上。此时cookie就相当于这个就诊卡,但是它存储的大小也是有限的,因此实际上存储我信息的并不是这张卡,而是可以由这张卡连接的医院的服务器。服务器通过这张卡作为媒介来存储需要的信息。

Cookie的最重要的应用场景就是存储会话id,进一步的让访问服务器的后续页面的时候。能够带上这个id 从而让服务器能够知道当前的用户信息.(服务器上保存用户信息这样的机制就称为Session会话)。
如同这里,每个session上存储了用户的关键信息(基本信息,既往病史......)

每个session也有一个会话标识sessionld(这里就诊卡的sessionld就是指存储这个会话的id)

那么cookie能不能存别的信息?

答案是可以的,这个是可以根据程序员的需要来进行设定的。

⑤对session会话的理解:

我们可以把微信列表的所有聊天对象作为会话,那么每一个对象中的详细内容就是该会话的详细信息

            1.3空行

空行就是表示响应头header结束的标志。

            1.4请求正文(body)

就是指服务器返回给客户端的具体内容,这里面的格式也是不尽相同的,最常见的是HTML格式。而这个body的详细内容在上述内容中已经做了详细的解释,这里就不再说明了。

        2.HTTP响应

HTTP响应如下:

            2.1首行

                  2.1.1版本号

版本号:HTTP1.1(这就是一个版本号)

                  2.1.2状态码

①什么是状态码?

用来表示一个页面的访问结果是如何的,成功的还是失败的,或者其他什么情况

②常见状态码:

a.200 OK:这是一个最常见的状态码,用来表示成功

b.404 Not Found:表示当前访问资源不存在

c.403 Forbidden表示访问被拒绝(虽然资源有,但是你没有权限访问)

比如访问你的私有空间

d.405 Method Not Allow:这个情况,你去外面的网站上抓包,很难遇到,但是如果后面自己写网站后台,这个就很容易出现.
例如,尝试使用GET来访问人家的服务器,但是可能人家只支持POST,于是就会返回405。

e.500 Internal Server Error:表示服务器出问题了,这种情况在网络上发生的概率是极低的。
f.504 Gateway Timeout:表示服务器太繁忙了;
g.302 Move temporarily:表示重定向,在计算机的很多情况下都会使用到这种方式,不止是HTTP,虽然在不同情况下会有不同,但是核心都是呼叫转移的过程。下面为大家演示一下,非常典型的一个过程。

 表示重定向过程有个Location关键字:表示了接下来要跳转的位置是哪里。

                  2.1.3OK

OK 状态描述码:通过一个/一组简单的单词,来描述当前状态码的含义

            2.2响应头

响应头里面同样也是键值对结构,每个键值对占一行,每个键和值用:空格隔开,这里的键值对个数是不固定的,而且不同的键值对表示的含义也是不同的。

            2.3空行(header)

表示响应头的结束标记

            2.4正文(body)

服务器返回给客户端的具体数据,这里面可能有各种不同的格式,其中最常见的就是html格式

四、构造HTTP请求

最常见的HTTP客户端就是浏览器。

       1.基于form表单构造

①示例:核心是HTML标签,就是form标签

 ②相关说明:

(1)此处的action是指:把请求提交给哪个服务器,这里也是一个URL

(2)此处method:method的取值只能是GET/POST;若是按照get提交,则参数放于query string中,而要是按照post提交,则参数放于body中。(注意!!!此处并不区分大小写)

(3)form中的input标签:form表单给服务器提交的数据在本质上是键值对,而这里的name属性就在描述当前输入框对应的key是什么

 红框内容就是其提供给服务器的内容。

       2.基于ajax

①为什么要引入基于ajax来实现:

因为如我们上面可知,form表单这种形式是一个比较原始的方式,使用form就一定会涉及到页面跳转,这个时候就需要加载浏览器的全部页面,很显然,这是非常麻烦的,尤其是当本身牵扯到的页面较多的时候。所以我们就想能不能只对局部进行变化。而这个情况,就可以用ajax了。

②什么是ajax:

而实现ajax主要是基于js代码,构造出HTTP请求,再通过js代码来处理响应,并且把一些数据更新到页面上。

③理解异步:(举个通俗的例子)

小张和小王一同约定去办公室,小张准备好了,但是小王还没回来,小张就给小王说,我先睡个午觉,你要到了就给我打个电话。等到小王到了就给小张拨通电话,小张就下来,这就是异步。

当调用者发出一个调用请求后就不管了,等到被调用者结果出来后会主动通知调用者。 

④同步和异步的区别:

同步和异步的主要区别主要取决于是调用者主动关注,还是被调用者来给调用者进行通知。

这里再举个例子:

我去店里吃饭,我点了一份牛肉面,这个时候我就有几种选择;

(1)同步阻塞等待:

当我点了牛肉面后,我就守在窗口,直到取到我的牛肉面为止(类似Scanner输入输出流对象)

(2)同步非阻塞等待:

当我点了牛肉面后,我看着队伍还长,我就想着去隔壁买个东西,当我买完回来发现还没到我,就重复这个过程,直到到我

(3)异步等待:(ajax用的方式

当我点了牛肉面后,我就直接在饭桌旁玩会手机,等牛肉面好了之后,老板给我端到了桌子上。

其中(2)(3)的区别就是在于(2)中的开销相对更大,而(3)是更优的选择。

⑤ajax基于异步等待是如何进行的?

首先构造出一个HTTP请求,发送给服务器,但是我们不确定什么时候能够得到回应,这个时候我们就可以在浏览器里执行其他的代码,直到服务器响应回来后,在通过回调函数的形式,通知相关的js代码

⑥基于jQuery来演示ajax的相关操作:

(1)引入jquery :

a.先在搜索引擎中搜索jquery cdn查询词

b.在结果中,找一个合适的cdn的url;

c.打开对应的url,加载出jquery本体;

d.复制粘贴内容到本地文件

 (2)使用jQuery的ajax:

a.$:这是一个变量名;变量名.js允许$作为变量的一部分,这个$就是jquery中最核心的对象,jQuery中的各种api,都是通过$来触发的。

b.$.ajax():通过$对象来调用ajax.参数只有一个,但是是一个“对象”。(通过一个对象中的若干个键值对来表示不同的参数,这是ajax中非常巧妙的部分)

核心代码:

<body>
    <script scr="jquery.js">      </script>
   <script>
       $.ajax({
           type:'get',//表示是get还是post
           url:'http://www.sogou.com/index.html',//表示要访问的地址,请求的目标
           success:function(body){
               //success对应的是一个回调函数
               //这个函数会在正确获取到HTTP响应后来调用
               //"这就是前面说的异步"
               //回调函数的参数,就是HTTP响应的body部分
               console.log("获取到响应数据"+body);
           },
           error:function(){
               //这也是一个回调函数,这个函数会在请求失败后被调用,也是异步
               console.log("获取响应失败")
           }

       });
   </script>
</body>

当然ajax也有其他的参数,我们可以直接在网上搜索。

运行结果进行抓包:

ajax请求,通过抓包看到,响应里面是200 OK,并且body也是html数据:

但是浏览器却认为是一个失败的请求

 出现这个错误的原因:

浏览器禁止ajax进行跨域访问。也就是跨越多个不同的域名(服务器);对于当前而言,页面处在的服务器是本地文件,而ajax请求的URL是搜狗,这种服务器的不同就导致了跨域操作。

那怎么才不算跨域?

比如:本来页面就属于搜狗,再在页面中通过ajax请求URL,搜狗,这种就不算是跨域。并且端口也要是一样的。

 当然跨越这个限制,我们也是可以避免的,如果对方服务器返回的响应中带有相关的响应头,允许跨域操作,那么就是可以的。

因此,当下构造的ajax请求是无法被正确处理的.如果要正确处理,就需要咱们自己有一个服务器,让页面和ajax的地址都是这一个服务器就行了。

       3.基于Java socket构造

所谓的 " 发送 HTTP 请求 ", 本质上就是按照 HTTP 的格式往 TCP Socket 中写入一个字符串 .
所谓的 " 接受 HTTP 响应 ", 本质上就是从 TCP Socket 中读取一个字符串 , 再按照 HTTP 的格式来解析。 我们基于 Socket 的知识 , 完全可以构造出一个简单的 HTTP 客户端程序 , 用来发送各种类型的 HTTP 请求。
这里就不做过多的介绍了。

五、HTTPS

       1.引入原因

①HTTP和HTTPS:

HTTP和HTTPS实质上相当于一堆孪生兄弟,而不同的是,HTTPS在HTTP的基础上引入了加密的操作。

②为什么要引入?

主要是运营商劫持。

比如我们上面提到的广告跳转的前页面,如果没有加密操作,那么黑客就可以进行修改跳转页面的网址,那么原先收益的网址的权益不再得到保障。所以,引入HTTPS能够更好地保证数据的安全。

       2.加密形式

在讲述如何加密之前,我们先了解几个专有名词:

明文:要传递的原始信息

密文:通过加密手段对明文进行加密,让别人看不出来的操作

密钥:通过密钥可以把明文变为密文,也可以把密文变为明文。

HTTPS中引入的加密层,称为SSL(旧的叫法)/TLS(新的叫法)

在SSL中涉及到的加密方式有两种,分别是对称加密和非对称加密。下面将会介绍。

         2.1对称加密

①什么是对称加密:

使用同一个密钥,既可以进行加密,也可以进行解密

②图示过程:

 客户端和服务器持有同一个密钥。客户端传入的数据(HTTP请求的header和body)都通过这个密钥进行对称加密,实际上在网络传输过程中,传递的是密文,服务器在收到密文后,接下来就可以根据刚才的密钥,来进行解密,从而拿到明文。

③缺点:

上述操作仍然存在着一定的缺点。

这个致命的缺点就是如何保证所有的客户端和服务器用的是同一套密钥。因为要是使用同一套密钥的话,黑客直接可以作为其中一个客户端,那么这个时候就掌握了这套密钥。因此,我们不能够采用这种方式。应该是不同的客户端对应不同的密钥来进行操作。像下图一样。

 ④改进:

因此我们就需要让不同客户端和服务器之间通过网络传输密钥。要么是客户端主动生成一个密钥,告诉服务器,要么是服务器生成一个密钥告诉客户端。如下图所示:

在这里,是假设成为客户端生成的密钥,通过网络来告诉服务器的过程。客户端生成了密钥888888,客户端就告诉服务器,咱的密钥是888888。
但是这样同时存在着问题,要是设备早就被黑客入侵了,并且是明文传输的话,黑客很容易就拿到了,在黑客知道密钥之后,哪怕你后面加密,内容也很容易拿到,毕竟相当于已经有了破解密码一样。

因此,我们发现使用对称加密最大的问题在于密钥能够传的过去,并且不能是明文传递的,如果是明文传递的,我们就需要对这个明文传递的密钥再次进行加密,就引入了非对称加密。

         2.2非对称加密

①什么是非对称加密:

非对称加密,有两个密钥,分别叫做公钥和私钥。

所谓公钥就是指人人都能够获取到的密钥。而私钥是指只有自己能够获取到的密钥。

在这里我们可以利用公钥加密,私钥解密,也可以利用公钥解密,私钥加密。

基于非对称加密,就是让服务器自己生成一堆公钥和私钥,公钥发出去(人人都可以拿到),私钥自己保存。
客户端生成一个对应密钥,客户端就可以使用服务器的公钥,对对称密钥进行加密,然后把数据传给服务器,服务器再通过私钥进行解密。
②具体过程图:

服务器自己持有私钥,客户端持有公钥,黑客可以拿到公钥,但是却拿不到私钥。而客户端生成了对称密钥,就可以基于刚刚的公钥对对称密钥进行加密,如果黑客拿到了这个密文,由于他没有私钥,那么是不能够进行解密的,也就是不知道对称密钥是啥 。

由于对称加密的效率比非对称加密高很多, 因此只是在开始阶段协商密钥的时候使用非对称加密,后续的传输仍然使用对称加密.

③缺点:

在服务器把自己的公钥返回给客户端时,被黑客这个中间人进行拦截,他自己生成了一对公钥与私钥

正常情况如下:

 当黑客进行侵入时:

具体过程如下:

首先客户端发出请求知道公钥,这个时候服务器按道理来说应该返回公钥,但是却被黑客入侵了,黑客自己就生成了一对公钥和私钥public key2和private key2,把此时的public key2作为公钥返回给了客户端,此时客户端继续操作通过888888+public key2得到了对称密钥密文,并返回给服务器,这个时候被黑客再次拦截,并用private key2来进行解密,黑客就拿到了密匙888888,紧接着,为了不暴露身份,黑客又按照服务器开始返回的public key公钥来进行加密,得到了新的密匙,而此时服务器通过private key进行解密也能够得到888888。并且其根本不知道黑客的存在。

④解决方式:

我们这个时候就会通过引入一个第三方公信机构,来证明这个公钥是一个合法的公钥。因为我们信任这个公钥就好像生活中信任警察一样,是可信的,因此公信机构说OK,我们就认为没有存在问题。

但是实际上,有些黑客是可能伪造证书的,那么这个时候浏览器就会弹出相应警报。 

a.那么客户端如何来验证这个证书是否有效呢?

(1)证书上自身有一些校验机制
(2)向公信机构进行求证

b.如果每次都访问这个公信机构求证,是不是太麻烦了:
实际上,客户端自身就会包含一些公信机构的信息,不需要通过服务器网络请求,直接本地就能进行认证

以上描述的东西都是包含在SSL中的,SSL不仅仅是应用于HTTPS,很多其他地方也会用到SSL

感谢观看 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张钦洋yyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值