HTTP2: возможно ли отправить последующие или дополнительные блоки HEADER в потоке? - PullRequest
0 голосов
/ 23 апреля 2020

Узел предоставляет этот метод:

http2stream.additionalHeaders(headers)

Который Sends an additional informational HEADERS frame to the connected HTTP/2 peer.

Однако кодовая база узла содержит этот комментарий:

// Sends a block of informational headers. In theory, the HTTP/2 spec
// allows sending a HEADER block at any time during a streams lifecycle,
// but the HTTP request/response semantics defined in HTTP/2 places limits
// such that HEADERS may only be sent *before* or *after* DATA frames.
// If the block of headers being sent includes a status code, it MUST be
// a 1xx informational code and it MUST be sent before the request/response
// headers are sent, or an error will be thrown.

Можно ли отправить последующий или дополнительные блоки HEADER на потоке?

например, псевдокод:

stream.respond(HEADER)
stream.write(DATA)
stream.additionalHeaders(HEADER)
stream.write(DATA)
stream.end(DATA)

И:

  • , если возможно, укажите демо-код; или

  • , если не то, в чем смысл функции additionalHeaders, и, поскольку событие response возвращает заголовок, что является точкой события headers?

1 Ответ

1 голос
/ 02 мая 2020

Согласно комментарию, следующее недопустимо HTTP / 2:

stream.respond(HEADER)
stream.write(DATA)
stream.additionalHeaders(HEADER)
stream.write(DATA)
stream.end(DATA)

Но следующее:

stream.respond(HEADER)
stream.write(DATA)
stream.additionalHeaders(HEADER)

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

...