17611538698
webmaster@21cto.com

gRPC 与 HTTP/2 协议头之技术理论与实践

资讯 0 8376 2018-03-24 12:02:42
1.jpeg


我学习了很多关于gRPC和HTTP/2的知识,一部分内容我还是把它放到了我的API工具箱中。
 
我并不是一个Protocal Buffers的粉丝,但我不能容忍性能方面的缓慢。我对HTTP/2非常感兴趣,并且已经用到了它的传输层。
 
我还学习了关于Websocket,Kafka,MQTT以及其它基于HTTP协议二进制协议,并且内置性能关于HTTP/2协议关于性能方面的可用指标,与纯TCP流相比。我更期待HTTP的下一版本有关传输层的更新。
 
在本部分中,我将学习到的关于HTTP/2流的头部分的理解与大家一起分享。我已经学了不少关于下一阶段 HTTP 头,从gPRC GitHub repository仓库中提供更多的请求和响应头来使用。
 
HTTP/2 API 请求头
 
Request-Headers -> 请求头 -> 调用定义 - 自定义Metadata
 
Call-Definition -> 调用定义 -> 方法主题路径 (授权与超时界定)
Content-type[内容类型][消息类型][消息编码][消息可接受的编码][用户代理]
 
方法(Method) -> “:method POST”
模式(Scheme) -> “:schemem”,使用HTTP还是https
路径(Path) -> “path”/“Service-Name”/"{method name}" #请看以下内容
授权(authorty)->虚拟主机的名字或授权
TE->“te”,“trailers”
Timeout -> "grpc-timeout" 超时的值,超时单元
TimeoutValue -> ASCII吗的绝对值,8位数字 
TimeoutUnit -> 小时/分钟/秒/毫秒/微秒/纳秒
Hour -> “H”
Minute -> “M”
Second -> “S”
Millsecond -> “m”
Microsecond -> “u”
Nanosecond -> "n"
Content-Type -> "content-type""application/grpc"[("+proto"/+json/{custom})]
Content-Coding -> "identity"/"gzip"/"deflate"/"snappy"/{custom}
Message-Encoding ->"grpc-encoding" Content-Coding
Message-Accept-Encoding->"grpc-accept-encoding"Content-Coding* (","Content-Coding)
User-Agent -> "user-agent"{structured user-agent string}
Message-Type->"grpc-message-type"{type name for message schema}
Custom-Metadata->Binary-Header/ASCII-Header
Binary-Header ->{Header-Name "-bin"}{base64 encoded value}
ASCII-Header->Header-Name ASCII-Value
Header-Name->1*(%x30-39/%x61-7A/"_"/"-"/".");0-9 a-a_-
ASCII-Value->1*(%x20-%x7E);空格或可打印的ASCII码
 
 
HTTP/2 API返回头信息
 
Response → (Response-Headers *Length-Prefixed-Message Trailers) / Trailers-Only Response-Headers → HTTP-Status [Message-Encoding] [Message-Accept-Encoding] Content-Type *Custom-Metadata
Trailers-Only → HTTP-Status Content-Type Trailers
Trailers → Status [Status-Message] *Custom-Metadata
HTTP-Status → “:status 200”
Status → “grpc-status” 1*DIGIT ; 0-9
Status-Message → “grpc-message” Percent-Encoded
Percent-Encoded → 1*(Percent-Byte-Unencoded / Percent-Byte-Encoded)
Percent-Byte-Unencoded → 1*( %x20-%x24 / %x26-%x7E ) ; space and VCHAR, except %
Percent-Byte-Encoded → “%” 2HEXDIGIT ; 0-9 A-
 
很高兴能够这么深入理解HTTP/2的工作细节。我本人对它的多方向性很感兴趣。它能够像HTTP/1.1一样使用简单的请求和响应,而且能够引入双向API调用,我们可以在其中根据需要进行不同的API调用(相关请查阅本站相关文章),我想用不了太长时间,就可以实现任意地调用。
 
在API接口中采用HTTP/2协议时,Google 有着有前瞻性的技术思路:提供了多个速率的API,JSON 使用HTTP/1.1,HTTP/2 用来处理 Protocal Buffer。


编译:21世纪技术官社区


评论