для чего используются метаданные grpc trailers?

#grpc

#grpc

Вопрос:

Я просматривал документы grpc и обнаружил, что на стороне сервера вы можете устанавливать метаданные как в форме headers , так и trailers . Заголовки кажутся обычной заменой обычных HTTP-заголовков с сопоставлением ключ-значение. Я больше не вижу необходимости в трейлерах, кажется, заголовок служит примерно той же цели, или я что-то здесь упускаю?

Ответ №1:

Трейлеры могут использоваться для всего, что сервер желает отправить клиенту после обработки запроса. Обычно это должно использоваться для информации, общей для всех методов, предоставляемых сервисом, например, данных о нагрузке, созданной RPC для целей метрик.

Комментарии:

1. но использование заголовков могло бы сделать то же самое правильно? существуют ли какие-либо специальные цели или это просто какое-то удобство именования или использования

2. Для потоковой передачи RPC информация о загрузке может быть вычислена только после передачи результатов обратно клиенту, поэтому заголовки в этом случае использовать нельзя.

3. почему его нельзя использовать? это потому, что потоковая передача должна поддерживать свой заголовок во время выполнения потока? я не собирался углубляться в потоковое RPC

4. Заголовки могут быть отправлены только в начале RPC (перед любыми данными), а трейлеры отправляются в конце (после всех данных).

Ответ №2:

gRPC использует HTTP-трейлеры для двух целей.

  • он отправляет свой конечный статус (grpc-status) в качестве заголовка трейлера после отправки содержимого.
    • Когда во время RPC возникает ошибка приложения или среды выполнения, статус и сообщение о состоянии доставляются в трейлерах.
    • Для ответов конец потока обозначается наличием флага END_STREAM в последнем полученном фрейме ЗАГОЛОВКОВ, который содержит трейлеры
  • Вторая причина заключается в поддержке вариантов использования потоковой передачи. Эти варианты использования выполняются намного дольше, чем обычные HTTP-запросы. HTTP-трейлер используется для предоставления результата последующей обработки запроса или ответа. Например, если во время обработки потоковых данных возникает ошибка, вы можете отправить код ошибки, используя трейлер, что невозможно с заголовком перед телом сообщения.

Источник 1 2