问题描述
headers := Metadata.Pairs(
"Cache-Control","no-cache,no-store,must-revalidate","Pragma","no-cache","Expires","0",)
err := grpc.SetHeader(ctx,headers)
当我使用curl -i
API时,响应显示Cache-Control: no-cache,must-revalidate
,但不显示Pragma或Expires。我认为我正在使用正确的方式进行设置。 GRPC不支持某些标头吗?
解决方法
我不认为标头有任何限制(即使HTTP 1.0的Pragma可能存在问题,请参阅https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Pragma)。也许是以下原因之一:
- 您只设置了Header,但不发送它,请参见https://pkg.go.dev/google.golang.org/grpc?tab=doc#SetHeader
发生以下情况之一时,将发送所有元数据:
- grpc.SendHeader()被调用;
- 第一个答复已发出;
- 已发出RPC状态(错误或成功)。
- 也许
curl
在这里被误用了,您似乎没有指定--http2
选项(请参阅Will I be able to use CURL to get HTTP/2 headers?),也许您可以利用grpcurl
:https://github.com/fullstorydev/grpcurl