protobuf可变长度原理
string 的序列数为2,此外在序列数之后还有表示 string 长度的字段,由于已经有长度信息,因此string 的编码不再需要 MSB 标识位。
两种varint编码的常见方式是使用前缀长度和使用连续位标识。Protobuf 用的是连续位标识技术,使用每个字节的第一位来标识是否需要继续向后读。每个字节低7位用于实际的编码。比如对于数字25,8位二进制为 0001 1001 。
protobuf 是Google开源的一款支持跨平台、语言中立的结构化数据描述和高性能序列化协议,此协议完全基于二进制,所以性能要远远高于JSON/XML。
本文暂不过度深入ProtoBuf原理,但是可以通过一张图来进行简要说明():ProtoBuf中的数据是按顺序进行排列,而整体的结构为若干个field,每一个field中由 Tag-[Length]-Value 组成。
TCP时,需要在protobuf之上加上一个4字节的数据长度,用于支持后续的protobuf消息的大小。
另一个缺点就是信息冗余,面对同一个接口同一个对象,需要重复传送相同的字段名。
go语言实现一个简单的简单网关
gin的路由太垃圾,限制太大。我只推荐chi,和标准库百分百兼容,无侵入性。推荐使用Gin框架,它是一个用Go语言编写的开源Web框架。因其API调用方便,性能优越,已经有越来越多的用户开始使用它。
Go语言结合了底层系统语言的能力以及现代语言的高级特性,旨在降低构建简单、可靠、高效软件的门槛。本书向读者提供一个专注、全面且符合语言习惯的视角。
可以先直接使用go自带的http server 框架,这个框架涵盖了绝大多数的功能,比如request response 的基本封装,简单的路由管理,文件上传处理。
go语言中格式化输出可以使用 fmt 和 log 这两个标准库,常用方法:示例代码:执行结果:更多格式化方法可以访问https://studygolang.com/pkgdoc中的fmt包。log包实现了简单的日志服务,也提供了一些格式化输出的方法。
Go 语言开源项目只是通过 Go 语言与传统项目进行C语言库绑定实现,例如 Qt、Sqlite 等。后期的很多项目都使用 Go 语言进行重新原生实现,这个过程相对于其他语言要简单一些,这也促成了大量使用 Go 语言原生开发项目的出现。
这些事情完成之后,Google就做了最后一步,用Go也就是当时Go语言最新版本,用go/parser和go/types替换了编译器前端,至此Go语言实现了自举,并且获得了一个稳定高效的编译器实现。
后台登陆防刷、防爆破以及正常的登录校验
1、首先配置好Firefox和burpsuite,打开爆破页面,输入一个随机账号与密码进行捕获。Burpsuite拿到请求:将请求参数的账号与密码部分设置为payload位置。
2、我们看它只需要输入一个密码,当然爆破啊,但是,很烦的一点,只允许出错X次,否则就封IP了。下面我们用burpsuite来爆破一下。先抓个post包。
3、不少于8位,大小写、数字、符号混合,里面无任何具体的单词、缩写、生日、电话等。按同样标准定期修改,频率不长于一个月,以自己放心为准。打开防火墙,关掉任何不必要的服务,删除任何不需要的软件。
4、一键登录其实就是帮你把账号与密码保存在本地,第一次登陆时,是需要你输入账号密码的,如果你同意保存密码在电脑本地,下次打开时,就会自动帮你填充原来保存的账号与密码进行登陆操作。