[nginx] HTTP/2: rewritten handling of request body.

Valentin V. Bartenev vbart at nginx.com
Thu May 5 13:41:34 UTC 2016

On Wednesday 04 May 2016 18:52:24 Alexey Ivanov wrote:
> There is a small issue with setting `SETTINGS_INITIAL_WINDOW_SIZE` to 0: now when client tries to POST data it needs to wait for an additional RTT(between `send HEADERS` and `recv WINDOW_UPDATE`) to start sending data.

Yes, while it's not optimal from the latency point of view, such
approach simplified implementation a lot.  So it's a fair price,
that was paid at the current stage of HTTP/2 implementation.

Introducing some kind of preread buffer will the next step.

> Also note that `nghttp` waits for an additional RTT to send `END_STREAM` even though it a zero-length frame, despite that spec does not forbid it:
> 	Frames with zero length with the END_STREAM flag set (that is, an empty DATA frame) MAY be sent if there is no available space in either flow-control window.
> Therefore sending `WINDOW_UPDATE` for exactly `content-length` bytes may not be optimal for some clients.

It would be better to report this issue to nghttp, instead of
making a workaround in nginx.

There can be an implementation that even don't send another
WINDOW_UPDATE in this case.

  wbr, Valentin V. Bartenev

More information about the nginx-devel mailing list