当前位置:首页 > Web开发 > 正文

则返回状态码为 101 的响应头

2024-03-31 Web开发

WebSocket握手验证反爬虫

!

技术图片

处事器端创建 socket 处事后监听客户端,使用 while True 的方法读取客户端发送的动静

然后对处事器端发送的握手请求进验证,如果验证通过,则返回状态码为 101 的响应头,否则返回状态码为 403 的响应头


技术图片

客户端凭据 WebSocket 规范生成握手信息并向处事器端发送握手请求,然后读取处事器端推送的动静,最后验证握手信息

处事器端和客户端实际上可以不遵守这些约定

好比处事器可以在校验握手信息是增加对客户端 User-Agent 或 Referer ()的验证,如果客户端发送的握手请求中并没有对应的信息,则拒绝连接



WebSocket 动静校验反爬虫

握手告成之后,双端就可以开始互推动静了

WebSocket 只需要完成 1 次握手,就可以连结恒久连接,,在后续的动静互发阶段是不需要用到 HTTP 协议的

其实动静互发阶段也是可以对客户端身份进行校验的,这是因为客户端所获取的动静是有处事器端主动敦促的

如果处事器端不主动推送,那么客户端就无法获取信息

可以在处事器端新增一个逻辑:握手结束后客户端发送特定的动静,处事器端对该动静进行校验,校验通过则将处事器真个数据推送给客户端,否则不做措置惩罚惩罚

如果我们将客户端发送的新动静改削为数据货仓中没有的键,那么处事器端就不会给客户端推送动静

技术图片



WebSocket Ping 反爬虫

通过适才我们知道,WebSocket 是可以连结恒久连接的,但是处事器端不成能连结所有客户端永久连接这太耗费资源了,

有没有一种要领可以查抄客户真个状态呢?

WebSocket 协议规范中约定,处事器端可以向客户端发送 Ping 帧,当客户端收到 Ping 帧时该当答复 Pong 帧

如果客户端不答复或者答复的并不是 Pong 帧,那么处事器端就可以酬报客户端异常,主动封锁该连接

? 凡是,Ping 帧和 Pong 帧的 Plyload Data 中是没有内容的,所以只要方针处事器发送 Ping 帧时,客户端答复没有任何内容的 Pong 帧即可



总结

信息校验主要解决了客户端身份分辩、数据来源判断和请求的合法性判断等问题,制止数据接收者使用被篡自新得数据,保证数据的有效性

无论是 HTTP 协议还是 WebSocket 协议,都需要对客户端身份进行分辩,信息校验无疑是最合适的要领

WebSocket 反爬虫的孕育产生跟协议规范有很大的关联,由于协议中的一些规范并不是强制实现的,所以开发者可以在处事器端与客户端握手和动静互传的过程叫做验证

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30879.html