如何在@grpc/grpc-js服务处理器中获取HTTP/2请求头?
在@grpc/grpc-js服务中获取HTTP/2请求头的方法
当然可以获取,@grpc/grpc-js 里的请求上下文对象 call 包含了请求的元数据(Metadata),而HTTP/2的请求头会被封装在这个Metadata对象中——因为gRPC本身就是基于HTTP/2实现的,HTTP/2的标准头和伪头都会映射为Metadata的键值对。
你可以直接通过call.metadata获取到这些信息,具体用法看下面的代码示例:
server = new grpc.Server() server.addService(proto.GrpcTester.service, { myMethod(call, callback) { // 获取完整的请求元数据对象 const requestMetadata = call.metadata; // 转为键值对对象,查看所有HTTP/2相关头信息 const allHeaders = requestMetadata.getMap(); console.log('HTTP/2请求头集合:', allHeaders); // 获取单个HTTP/2伪头,比如:method、:path、:authority const httpMethod = requestMetadata.get(':method')[0]; const httpPath = requestMetadata.get(':path')[0]; console.log('HTTP/2请求方法:', httpMethod); console.log('HTTP/2请求路径:', httpPath); callback(null, {hello:"world"}) } })
需要注意的是,HTTP/2的伪头(比如以冒号开头的:method)在Metadata中会直接保留原键名,调用get(key)方法返回的是数组类型(因为HTTP头允许重复键),所以取第一个元素即可得到对应值。
内容的提问来源于stack exchange,提问作者Alana Storm
相关产品推荐
相关产品推荐

