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, no-store, must-revalidate, но не Pragma или Expires. Я думаю, что использую правильный способ их установки. GRPC не поддерживает определенные заголовки?


person onepiece    schedule 08.09.2020    source источник


Ответы (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 (см. Смогу ли я использовать CURL для получения заголовков HTTP / 2?), возможно, вы могли бы использовать grpcurl: https://github.com/fullstorydev/grpcurl
person dmaixner    schedule 10.09.2020