GRPC未设置某些标头

问题描述

我有以下代码可禁用GET API的客户端缓存:

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)。也许是以下原因之一:

  1. 您只设置了Header,但不发送它,请参见https://pkg.go.dev/google.golang.org/grpc?tab=doc#SetHeader

发生以下情况之一时,将发送所有元数据:

  • grpc.SendHeader()被调用;
  • 第一个答复已发出;
  • 已发出RPC状态(错误或成功)。
  1. 也许curl在这里被误用了,您似乎没有指定--http2选项(请参阅Will I be able to use CURL to get HTTP/2 headers?),也许您可​​以利用grpcurlhttps://github.com/fullstorydev/grpcurl