<feed xmlns='http://www.w3.org/2005/Atom'>
<title>nginx.git/src/http, branch release-1.12.0</title>
<subtitle>nginx</subtitle>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/'/>
<entry>
<title>Upstream: allow recovery from "429 Too Many Requests" response.</title>
<updated>2017-03-24T09:48:03+00:00</updated>
<author>
<name>Piotr Sikora</name>
<email>piotrsikora@google.com</email>
</author>
<published>2017-03-24T09:48:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=ca1a5057e2a0429350ec2d07c4616a75e34424e3'/>
<id>ca1a5057e2a0429350ec2d07c4616a75e34424e3</id>
<content type='text'>
This change adds "http_429" parameter to "proxy_next_upstream" for
retrying rate-limited requests, and to "proxy_cache_use_stale" for
serving stale cached responses after being rate-limited.

Signed-off-by: Piotr Sikora &lt;piotrsikora@google.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This change adds "http_429" parameter to "proxy_next_upstream" for
retrying rate-limited requests, and to "proxy_cache_use_stale" for
serving stale cached responses after being rate-limited.

Signed-off-by: Piotr Sikora &lt;piotrsikora@google.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Added support for "429 Too Many Requests" response (RFC6585).</title>
<updated>2017-03-24T09:48:03+00:00</updated>
<author>
<name>Piotr Sikora</name>
<email>piotrsikora@google.com</email>
</author>
<published>2017-03-24T09:48:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=c3ce606652aeac465895ab8eb8c6fc195d7db16b'/>
<id>c3ce606652aeac465895ab8eb8c6fc195d7db16b</id>
<content type='text'>
This change adds reason phrase in status line and pretty response body
when "429" status code is used in "return", "limit_conn_status" and/or
"limit_req_status" directives.

Signed-off-by: Piotr Sikora &lt;piotrsikora@google.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This change adds reason phrase in status line and pretty response body
when "429" status code is used in "return", "limit_conn_status" and/or
"limit_req_status" directives.

Signed-off-by: Piotr Sikora &lt;piotrsikora@google.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Fixed type.</title>
<updated>2017-04-03T06:29:40+00:00</updated>
<author>
<name>hucongcong</name>
<email>hucong.c@foxmail.com</email>
</author>
<published>2017-04-03T06:29:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=9ac9fe2f3ec82455aa561027e91d380d2db0f3af'/>
<id>9ac9fe2f3ec82455aa561027e91d380d2db0f3af</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Slice filter: prevented slice redirection (ticket #1219).</title>
<updated>2017-03-31T18:47:56+00:00</updated>
<author>
<name>Roman Arutyunyan</name>
<email>arut@nginx.com</email>
</author>
<published>2017-03-31T18:47:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=c31239ffb46586a00e60d957c844ffe63b138144'/>
<id>c31239ffb46586a00e60d957c844ffe63b138144</id>
<content type='text'>
When a slice subrequest was redirected to a new location, its context was lost.
After its completion, a new slice subrequest for the same slice was created.
This could lead to infinite loop.  Now the slice module makes sure each slice
subrequest starts output with the slice context available.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When a slice subrequest was redirected to a new location, its context was lost.
After its completion, a new slice subrequest for the same slice was created.
This could lead to infinite loop.  Now the slice module makes sure each slice
subrequest starts output with the slice context available.
</pre>
</div>
</content>
</entry>
<entry>
<title>Slice filter: allowed at most one subrequest at a time.</title>
<updated>2017-03-28T11:03:57+00:00</updated>
<author>
<name>Roman Arutyunyan</name>
<email>arut@nginx.com</email>
</author>
<published>2017-03-28T11:03:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=8c9a66298c627ed4eae2557b322c3f33da97eca4'/>
<id>8c9a66298c627ed4eae2557b322c3f33da97eca4</id>
<content type='text'>
Previously, if slice main request write handler was called while a slice
subrequest was running, a new subrequest for the same slice was started.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Previously, if slice main request write handler was called while a slice
subrequest was running, a new subrequest for the same slice was started.
</pre>
</div>
</content>
</entry>
<entry>
<title>Moved handling of wev-&gt;delayed to the connection event handler.</title>
<updated>2017-04-02T11:32:29+00:00</updated>
<author>
<name>Maxim Dounin</name>
<email>mdounin@mdounin.ru</email>
</author>
<published>2017-04-02T11:32:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=5d5f0dcac4e3bbd4464aa1185d7fd51587a3119e'/>
<id>5d5f0dcac4e3bbd4464aa1185d7fd51587a3119e</id>
<content type='text'>
With post_action or subrequests, it is possible that the timer set for
wev-&gt;delayed will expire while the active subrequest write event handler
is not ready to handle this.  This results in request hangs as observed
with limit_rate / sendfile_max_chunk and post_action (ticket #776) or
subrequests (ticket #1228).

Moving the handling to the connection event handler fixes the hangs observed,
and also slightly simplifies the code.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
With post_action or subrequests, it is possible that the timer set for
wev-&gt;delayed will expire while the active subrequest write event handler
is not ready to handle this.  This results in request hangs as observed
with limit_rate / sendfile_max_chunk and post_action (ticket #776) or
subrequests (ticket #1228).

Moving the handling to the connection event handler fixes the hangs observed,
and also slightly simplifies the code.
</pre>
</div>
</content>
</entry>
<entry>
<title>Perl: fixed delaying subrequests.</title>
<updated>2017-04-02T11:32:28+00:00</updated>
<author>
<name>Maxim Dounin</name>
<email>mdounin@mdounin.ru</email>
</author>
<published>2017-04-02T11:32:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=96e4e84ce273664d0ee43c5c5b7d14efa6f86d39'/>
<id>96e4e84ce273664d0ee43c5c5b7d14efa6f86d39</id>
<content type='text'>
Much like in limit_req, use the wev-&gt;delayed flag to ensure proper handling
and interoperability with limit_rate.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Much like in limit_req, use the wev-&gt;delayed flag to ensure proper handling
and interoperability with limit_rate.
</pre>
</div>
</content>
</entry>
<entry>
<title>Limit req: fixed delaying subrequests.</title>
<updated>2017-04-02T11:32:26+00:00</updated>
<author>
<name>Maxim Dounin</name>
<email>mdounin@mdounin.ru</email>
</author>
<published>2017-04-02T11:32:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=fae6878f202b13f0ffe39f75fe19fa15e179e9d5'/>
<id>fae6878f202b13f0ffe39f75fe19fa15e179e9d5</id>
<content type='text'>
Since limit_req uses connection's write event to delay request processing,
it can conflict with timers in other subrequests.  In particular, even
if applied to an active subrequest, it can break things if wev-&gt;delayed
is already set (due to limit_rate or sendfile_max_chunk), since after
limit_req finishes the wev-&gt;delayed flag will be set and no timer will be
active.

Fix is to use the wev-&gt;delayed flag in limit_req as well.  This ensures that
wev-&gt;delayed won't be set after limit_req finishes, and also ensures that
limit_req's timers will be properly handled by other subrequests if the one
delayed by limit_req is not active.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Since limit_req uses connection's write event to delay request processing,
it can conflict with timers in other subrequests.  In particular, even
if applied to an active subrequest, it can break things if wev-&gt;delayed
is already set (due to limit_rate or sendfile_max_chunk), since after
limit_req finishes the wev-&gt;delayed flag will be set and no timer will be
active.

Fix is to use the wev-&gt;delayed flag in limit_req as well.  This ensures that
wev-&gt;delayed won't be set after limit_req finishes, and also ensures that
limit_req's timers will be properly handled by other subrequests if the one
delayed by limit_req is not active.
</pre>
</div>
</content>
</entry>
<entry>
<title>HTTP/2: style and typos.</title>
<updated>2017-03-26T08:25:01+00:00</updated>
<author>
<name>Piotr Sikora</name>
<email>piotrsikora@google.com</email>
</author>
<published>2017-03-26T08:25:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=679bd07b42f6abde6ab0554653585d8e153e5c02'/>
<id>679bd07b42f6abde6ab0554653585d8e153e5c02</id>
<content type='text'>
Signed-off-by: Piotr Sikora &lt;piotrsikora@google.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Signed-off-by: Piotr Sikora &lt;piotrsikora@google.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>HTTP/2: fixed connection finalization.</title>
<updated>2017-03-29T17:21:01+00:00</updated>
<author>
<name>Valentin Bartenev</name>
<email>vbart@nginx.com</email>
</author>
<published>2017-03-29T17:21:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=0a5e969dd084baf917c21abe07d402b402df0164'/>
<id>0a5e969dd084baf917c21abe07d402b402df0164</id>
<content type='text'>
All streams in connection must be finalized before the connection
itself can be finalized and all related memory is freed.  That's
not always possible on the current event loop iteration.

Thus when the last stream is finalized, it sets the special read
event handler ngx_http_v2_handle_connection_handler() and posts
the event.

Previously, this handler didn't check the connection state and
could call the regular event handler on a connection that was
already in finalization stage.  In the worst case that could
lead to a segmentation fault, since some data structures aren't
supposed to be used during connection finalization.  Particularly,
the waiting queue can contain already freed streams, so the
WINDOW_UPDATE frame received by that moment could trigger
accessing to these freed streams.

Now, the connection error flag is explicitly checked in
ngx_http_v2_handle_connection_handler().
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
All streams in connection must be finalized before the connection
itself can be finalized and all related memory is freed.  That's
not always possible on the current event loop iteration.

Thus when the last stream is finalized, it sets the special read
event handler ngx_http_v2_handle_connection_handler() and posts
the event.

Previously, this handler didn't check the connection state and
could call the regular event handler on a connection that was
already in finalization stage.  In the worst case that could
lead to a segmentation fault, since some data structures aren't
supposed to be used during connection finalization.  Particularly,
the waiting queue can contain already freed streams, so the
WINDOW_UPDATE frame received by that moment could trigger
accessing to these freed streams.

Now, the connection error flag is explicitly checked in
ngx_http_v2_handle_connection_handler().
</pre>
</div>
</content>
</entry>
</feed>
