HTTP2 window update and priority
jiangmuhui at gmail.com
Tue May 10 15:11:42 UTC 2016
To say more, I may need your comment on my understanding of Nginx
1. Is the reason that I cannot receive the response headers frame because
the response headers are stored in the SSL buffer?
2.Nginx will fetch the blocked request in the queue when receiving a window
update frame (is the request order in the queue the same as my sending
3.Then Nginx will handle the request one by one in a non-block mode. I
noticed that when the requested file is small, nginx will create all the
data frames, push the data frames into out frames queue and sent it out. (
the handling order is the same as my sending request order) When the
requested file is large(say 10Mb), nginx will create only a part of data
frames and then create some other data frames (the handling order is
related to the dependency tree). So:
- when a file is large, how many data frames to be generated once before
generating the other frames, is it related to the SSL buffer size and the
maximum frame size? and when Nginx are going to send out the frames and
start a new SSL buffer.
- I dig the debug log and noticed the real process to reflect the priority
handling is the order to generate the data frames and connect those data
frames before sending then out. I cannot find the handling process related
to priority when generating the data frames and connect them together. It
would be great if you can tell me the strategy or locate the source code.
- Like the case I mentioned above. when the requested file is small,
clients can not get the expected receiving response order. How large a file
should be then nginx can handle them concurrently. I think in the real
environment, many js , css file are not so big. So Nginx can not give
priority mechanism in those cases. I suggest that Nginx should change the
request queue order(Here I noticed the request queue is the same as the
receiving order) rather than handling priority when generating data frames,
it would be too late. So that even the files is small, the response order
will also follows the dependency tree.
2016-05-10 22:33 GMT+08:00 Valentin V. Bartenev <vbart at nginx.com>:
> On Tuesday 10 May 2016 22:12:59 Muhui Jiang wrote:
> > Hi
> > >You've misread the source code. HTTP/2 windows are handled in
> > >ngx_http_v2_send_chain(), which is only called for response body
> > >data.
> > when the window is blocked, Nginx logs that the headers frame has been
> > out, however I cannot receive any response headers. The same client tried
> > on h2o and I can receive the response headers.
> In addition, nginx uses SSL buffer to optimize record sizes.
> You can tune it using the "ssl_buffer_size" directive:
> > >The prioritization has effect when there is concurrency for
> > >connection. In your case from nginx point of view there was
> > >only one stream in processing at any moment. The previous
> > >stream was completed before the new one has been received.
> > Let me explain my strategy in detail. I used some requests(stream id
> > to consume the window (65535) And then block the window without sending
> > window update frame(I have sent a very large stream update before). Then
> > send the next 6 streams with different priorities. At this moment, the 6
> > streams should be blocked. Nginx should have enough time to handle the
> > priority. Then I send a very large window update frame, but nginx will
> > process the stream one by one with no priority observation. What I want
> > say is, only when the file is really large then the priority can be
> > observed. But I have give enough time to Nginx by block the request.
> > should handle the priority though the file is really small. If you need
> > more information, please tell me. Many Thanks
> Ok, now I understand your case. You are right, currently in this
> particular case priorities aren't handled.
> wbr, Valentin V. Bartenev
> nginx mailing list
> nginx at nginx.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the nginx