【问题标题】:GRPC not setting some headersGRPC 未设置某些标头
【发布时间】:2020-12-26 09:06:29
【问题描述】:

我有这段代码可以禁用 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, no-store, must-revalidate,但不显示 Pragma 或 Expires。我想我正在使用正确的方式来设置这些。 GRPC 是否不支持某些标头?

【问题讨论】:

    标签: go grpc grpc-go


    【解决方案1】:

    我认为没有任何标头限制(即使 Pragma 可能存在问题,即 HTTP 1.0,请参阅 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

    【讨论】:

      猜你喜欢
      • 2019-03-31
      • 1970-01-01
      • 2010-09-19
      • 2022-10-29
      • 2016-04-26
      • 2017-08-19
      • 1970-01-01
      • 2019-10-29
      相关资源
      最近更新 更多