私有协议分隔符,即url参数可用的分隔符

业务发展到一定规模后,mqtt/coap协议无法满足需求,所有私有协议势在必行。

现有私有协议 兼通 udp tcp 以及 http websocker

协议中有一部分,需要兼顾可读性和降低带宽占用。所以简单使用特殊字符串分割的方式来表达。 例如: usename|password

但是在url传输中分割符号需要考虑一下应该如何选择。

url参数中可字符串有

1
2
3
4
5
6
7
8
# 特殊含义的字符  这些不能放到参数值内
; / ? : @ & = + $ , 「10个」
# 非保留字符集 部分位置不允许出现,但是参数内部可用
- _ . ! ~ * ' ( )   「9个」
# 避免使用的 因为网路中部分网关会使用所以需要转义
{ } | \ ^ [ ]       「8个」
# 其他由ASCII控制字符
< > # % " 空格

encodeURI 方法不会对ASCII字母、数字、~!@#$&()=:/,;?+’ 编码。 encodeURIComponent 方法不会对ASCII字母、数字、~!()’ 编码。

另外需要考虑的因素
1、redis中keyname的分隔符我们常用「:」冒号来处理
2、base64url中 会使用 _ - 所以分隔符的选择就只剩下 . ! ~ * ' ( )

按照兼容性考虑可选字符顺序:
为了能在协议中传输带小数的数据,所以 「.」 也不能用 又剩下 ! ~ * ' ( ) 而 「’」在部分安全防护产品中会认为sql注入符,所以最好也不用 又剩下 ! ~ * ( ) 「~」在部分编程语言中会被编码成 %7e 又剩下 ! * ( ) 「*」在部分系统里面会被认作保留字符 又剩下 ! ( ) 「()」本身可以做为包裹数据使用 所以只剩下 ! 所以通常来说 ,所以选择用!来做非协议字段分隔符 *做为:的替代符(实践中选择key不会存在的字符串替代,例如:AA / O0O)

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计