HTTP2 window update and priority

Valentin V. Bartenev vbart at nginx.com
Tue May 10 13:15:02 UTC 2016


On Monday 09 May 2016 21:27:31 Muhui Jiang wrote:
> Hi
> 
> According to my view on the source code of Nginx 1.9.15, I noticed some
> observation below:
> 
> 1. when there is no enough window, nginx won't send back the response
> frame, though according to the log, nginx said it has sent the headers
> frame out, but client won't receive it. This is not right according to RFC
> 7540 because window update will only limit the data frames
> 

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.



> 2.when there is no enough window, nginx will first store the request in the
> queue, when it received a window update, nginx will start fetch the streams
> stored in the queue use ngx_queue_head within a while loop(line 2161 in
> ngx_http_v2.c). I noticed the stream order I got is the same as the sending
> order with no relationship of the dependency tree, then nginx will create
> the corresponding data frames according to the stream order. But I noticed
> whether nginx will put the frame into the output queue depends on the
>  value of wev->ready, here a problem is that I noticed when the request
> files is big, the wev->ready is set 0, only when this happens, the priority
> mechanism can work otherwise the frame will be sent out directly with no
> dependency observation. I am still confused on how does nginx implement the
> priority. Could you please give me some suggestions.
> 
> A failed priority mechanism example debug log:
> https://github.com/valour01/LOG/blob/master/example.log

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.

  wbr, Valentin V. Bartenev



More information about the nginx mailing list