00:00
同学们,我们来解决下一个问题,就是对特定请求资源进行过滤。那同学们来看一下,我们目前呢,其实刚才老师说过,我们来看一下,比如说我们启动server。对吧,我们启动这个server。来,启动起来。启动起来过后呢,呃,可能是没关闭。啊,前面这个没有关闭哈。再重新来一次。因为我前面第一次启动server没有关闭,所以说再次启动它会报地址已经被绑定。这次就没问题了,我们来刷一下。刷下了过后,同学们看到有两次请求,对不对?实际上我们只有请求一次,为什么会有两次呢?原因是这样子的,我们打开。360,我们抓下他的网络包,大家一目而了然。我们这边有个工具叫开发人员好。好,同学们,现在呢,我们给大家看一下为什么这样子的刷。
01:00
好刷一下大家现在就明白了,看第一次呢,他请求的是就是这个localho。然后呢,第二次他请求的是这个文件,看到没有。啊,请求这个文件就是这个文件,就是我们每一个网站的图标图标文件。OK,那怎么去解决这个问题呢?假如说其中有一次我不想去接受了,就是这个,我因为我只想接受他,我不想去,我不想去,去不想对这个请求。就是请求这个图标文件不做响应,这个怎么办呢?来同学们我看一下。下面呢,我们这样处理就可以了,跟着老师思路哈。这里面有这样一些方法可以解决,首先呢。真看。我们在这里哈,在这里做这样一些处理。我们先干什么呢?获取到。获取到就是这边的消息,就是同学们看,嗯,就是同学们看这个MSG。这个这个消息呢,其实就是,呃,这个MSG其实就是我们客户端发送过来数据对不对,我们可以想象,在这个MSG里面肯定包含了我们HTTP协议的头。
02:12
对,所以说这里面呢,肯定会能够拿到你请求资源的那一个uri,所以说我在这里面去做。干什么呢?先这样来做一下事情,我们先得到一个http request对象。对不对,然后呢,HTTP等于把它先强转一下,把这个MSG转一下。对,他这边呢,会提示我。我们就拿到了,拿到这个信息以后,下一步我们干什么呢?啊,我们获取啊,我们获取什么呢?获取他的uri。统一统一资源的一个定定位,那怎么做呢?另一个uri好的,然后这边我们传入。传入刚才拿到htb request.uri就拿到了,拿到这个uri过后呢,我们得到一个uri。
03:08
这个uri里面呢,我们就可以做一个判断,诶怎么判断呢,来if。做这样一个判断,如果说大家看,因为我们待会要过滤的呢,就这个就这个文件嘛,我看能不能拷贝过来哈。拷贝。拷贝拷贝这个看看能不能拿到。把它拿过来。放这那我要的其实就是这一部分。就这一部分,如果我发现他请求的资源呢,是这这个图标对不对,So,这个图标,那下面呢,我们做一个判断点equals。EQ啊,如果它刚好就等于我们这个uri。点什么呢?这个uri,它得到这个get pass。
04:00
诶,就这样子的,就如果说,嗯,我发现这个UI的pass路径就是你的这一个图标。那怎么办呢?我们就给他提示一句话,提示一句话说什么呢?哎,就是说什么呢,你请求了请求。请求了这个资源。那么这个资源呢,我们不做处理。不做处理,不做响应吧,叫不做响应。那不做响应,那就简单直接就怎么样,Return就可以了,返回,所以这样子呢,待会你们再去看这边就不会再得到一个返回的东西了,就没有response了,就不response,我们看一下是不是这样子啊。这样相当于说我就对特定的资源进行什么呀,进行一个过滤,好我们再看一下,那现在呢,我们运行再来测试。好的,来,跑起来。Run一下。让起来哈。
05:01
弄起来过后呢,我们首先看服务器这边能不能呃接受,能不能监测到他有这样一个网站图标的请求。来这边呢,我们先把它清一下。好的,这边先清一下,清完了过后呢,我们刷新一把。好,同学们可以看到,呃,你他还是发出两次请求,这是没办法的,因为是服务器做的这个工作啊,发出一个有个response,这边呢,没有了。为为什么没有呢?因为在我的福这边呢,你看我这说了不做响应。对吧,那不做线直接return了吗?那就不做线就没有信息了,好这就是我们说在这服务器这时呢,我们可以去过滤掉,通过这个uri来过滤特定的资源。过滤特定资源。或者叫指定的指定的资源。第二个呢,老师还想跟大家聊一下,就是关于这个handler,它到底是怎么对应的呢?我跟大家说一下,就是handler它是这样子的啊,就说我们有一个,比如说这里有这有一个服务器。
06:06
这儿有一个server。这有一个server,那这边呢。对,这边呢,有一个CC。注意听这点。这当然也可以说叫做浏览器。浏览器浏。浏览浏览器一,这边是我们的浏览器二。刘。浏览器二好的。那当你这个浏览器去请求的时候呢。他会在这边给你生成一个,给他生成在服务器这边给他生成对应的handler。好,我先写一个H。那同样的道理了,如果你这个浏览器又来请求这个server呢,我会给你生成另外一个handleer,就它的handle呢,是呃,是有对应的,就不是说我一个浏览,我两个浏览器来共享一个handler,不是的,为什么呢?因为你想你的panel就是你的这个这个paonline,你的paonline实际上也是独立的,要你有你浏览器一客户端请求一个呢,会给他生成一个pipeline,那handler呢,就跟这个handleline是这个关联的,所以说。
07:19
那那就说我们。这个pipeline是相互独立的,我们每一个handle呢,也是相互独立的,这点大家一定要清楚,有点像什么呀,就是大家,嗯,大家就是各自独享一个,嗯,独享pipeline,同时呢,独享这个handler。好,我给大家证明一下这个事情,因为这块呢,涉及到一个就是系统原理的问题,我多写两句哈,来我们看看。首先呢,我们把它的这个pipeline打出来。拍。Pipe point。他的,呃,哈希code哦,我们直接把它哈希code打出来就可以了。
08:02
哈希,哈希,扣打一下。哈西,Code的呢,我们可以这样来ctx点。Pipeline拿到了点,还是扣的。对不对,同时呢,我们把它这个handler也拿到,就是现在你这个handler就是htp server handler它的地址也拿到,就是我们说把这个,诶他的。Code也拿到。哈希就直接写加上这就用this了吧,就直接用this,因为它是当前在调的时候,这个方法在内度吗?我用this哈,Code拿到好的,有了这句话,我们来证明一下,是不是刚才老师说的这样子的啊,来同学们,我们运行一下。把它进行一个关闭。运行。好看后台的输出。看后台输出来跑一个。我们先刷新一把,刷新过后呢,我们看后台这边呢,应该是,诶这边清一下。
09:02
啊大应该看得到了,大家看。同学们看,此时此刻,我们憨就是pipeline,哈希扣的是这个字。2083哈西扣的是这个字。你因为你一次发出了两次请求,所以说他又他再来一次的话呢,调用的这个pipeline还是哈西code的对应这个词,他的handle就是handleer呢,对应这个词,这是不是对应的关系。所以通过刚才的演示呢,我们其实可以看到每一个浏览器,它其实对应的pipeline,还有handle呢,是独立的,不会相互共享,你浏览器一有一个拍line和handle对应,你浏览器二呢,就会有另外一个拍line和一个handle对应,好我们来试再再起一个浏览器来进行一个演示,好来我们把它打开再运行一下。再测试一下。运营起来。看看是不是这样子的。
10:00
就是它不会共享对不对,现在呢,已经处于启动状态,我们再次刷新。好,刷新这边呢,来了两次请求对吧,诶你看这一次呢,是哈西code的叫pipeline是2557是吧,你看这一次。这这这一次因为是,呃,一发在这个浏览器发了两次过来嘛,发了两次过来,这是一次,这两个是对应的。这两个是对应的,那如果说同学们我们再起一个浏览器,比如说同学们看,我把这个浏览器先关闭掉。OK,关闭掉,好我再重新打开。我再重新打开,那它肯定是产生一个新的。对吧,它会产生一个新的走一个。好还是HTTP?Localhot。六六。六八回撤。好,同学们再次看,这次呢,肯定跟刚才是不一样的,你看这里。这次呢,你看这边是拍是19264什么什么什么has code是这个是显然不一样,那这两个是还是对应的对吧?但是我想问同学们一个问题啊,我想问同学们一个问题,大家知道HTTP协议他是不是用一次就会断掉啊?
11:18
我问同学们是不是这个问题,说HTTP协议他用用完了过后它就自动断掉了。啊,它不是一个长连接,因为因为用完就就处于,呃,它就会把这个连接断掉,那我问同学们一个问题,如果我在刷新。我在这刷新一次,请问他用的是这个拍online还是一个新的拍online?其实就相当于你相当于说是不是会会不会生新的,大家理解我的意思吗?大家觉得会不会好,我们可以试一下再刷新,我可以告诉大家,它又会产生新的pipeline和新的handler刷一次。大家看是不是这样子,你看这次又变了二八。跟刚才不一样了吧,这边哈希扣的是这个字。
12:02
好,如果说你再刷新,它又产生新的了。为什么呢?因为你看这是不是又是新的了,1569 1569跟刚才2088这这个是不一样的,为什么呢?因为就是因为我们HTP协议它用完了就断掉,断掉过后你再次来过后呢,他又给你产生新的派。对,是这样子的,跟我们STCP协议还不太一样,这两个协议的特性所决定的。协议的特性所决定的,好的,那现在关于呃,这这一点呢,就是我们所说的,嗯,怎么去对特定资源进行过滤,还有呢,我们也讲了一下,浏览器跟我们拍烂,还有handle的一个对应关系,我们就给大家聊到这里,大家好好的理解一下,最好把代码自己写一遍。
我来说两句