- From: Bob Briscoe <bob.briscoe@bt.com>
- Date: Fri, 6 Mar 2015 15:20:48 +0000
- To: <mbelshe@chromium.org>, <fenix@google.com>, <martin.thomson@gmail.com>
- CC: <ietf-http-wg@w3.org>
- Message-ID: <201503061520.t26FKnWA013681@bagheera.jungle.bt.co.uk>
HTTP/2 editor & co-authors,
As I read through the draft, I attempted to list all the areas where
an open issue has been left dangling. I checked the issues list, and
none of these were there. I expect you might want to (or ought to)
move some of these onto an issues list (for a future version of HTTP,
if not the current version).
That being said, in nearly all the cases below, if I had been the
protocol designer, given the importance and prevalence of HTTP, I
would have felt obliged to redesign the protocol to make it
inherently robust against these issues. There should at least be some
assurance that a major extension has safety valves or fall-backs that
can be deployed if faced with an abuse of any of the weaknesses below.
[BTW, I have quoted the text as written - I will list nits in a later posting.]
<https://tools.ietf.org/html/draft-ietf-httpbis-http2-17#section-3.2>3.2.
Starting HTTP/2 for "http" URIs
" Requests that contain an payload body MUST be sent in their entirety
before the client can send HTTP/2 frames. This means that a large
request entity can block the use of the connection until it is
completely sent.
"
So...
<https://tools.ietf.org/html/draft-ietf-httpbis-http2-17#section-5.2.2>5.2.2.
Appropriate Use of Flow Control
" Deployments with constrained resources (for example, memory) can
employ flow control to limit the amount of memory a peer can consume.
Note, however, that this can lead to suboptimal use of available
network resources if flow control is enabled without knowledge of the
bandwidth-delay product (see [RFC7323]).
"
So... (see previous posting on flow control)
<https://tools.ietf.org/html/draft-ietf-httpbis-http2-17#section-5.2.2>5.2.2.
Appropriate Use of Flow Control
" When using flow
control, the receiver MUST read from the TCP receive buffer in a
timely fashion. Failure to do so could lead to a deadlock when
critical frames, such as WINDOW_UPDATE, are not read and acted upon.
"
So... (see previous posting on flow control)
<https://tools.ietf.org/html/draft-ietf-httpbis-http2-17#section-6.4>6.4.
RST_STREAM
" However, after sending the
RST_STREAM, the sending endpoint MUST be prepared to receive and
process additional frames sent on the stream that might have been
sent by the peer prior to the arrival of the RST_STREAM.
"
So... [I notice numerous IESG reviews picked up on this, but the
sentence has been left unchanged]. When can it eventually relax this
requirement (to release stream state), and what are the consequences
if it relaxes too early?
<https://tools.ietf.org/html/draft-ietf-httpbis-http2-17#section-8.2>8.2.
Server Push
" Note this could result in
the promised stream being reset if the client does not recognize a
newly defined method as being safe.
"
So...
[Won't this risk breaking a perfectly good (but unrecognised)
application? Wouldn't the behaviour a couple of paras later be more
appropriate "...made available to the application separately"? Or is
the idea that if the promised stream is reset, the client then
naturally requests the stream?]
<https://tools.ietf.org/html/draft-ietf-httpbis-http2-17#section-10.5>10.5.
Denial of Service Considerations
" The SETTINGS frame can be abused to cause a peer to expend additional
processing time. This might be done by pointlessly changing SETTINGS
parameters, setting multiple undefined parameters, or changing the
same setting multiple times in the same frame. WINDOW_UPDATE or
PRIORITY frames can be abused to cause an unnecessary waste of
resources.
"
So...
" Large numbers of small or empty frames can be abused to cause a peer
to expend time processing frame headers. Note however that some uses
are entirely legitimate, such as the sending of an empty DATA or
CONTINUATION frame at the end of a stream.
"
So...
" Header compression also offers some opportunities to waste processing
resources; see Section 7 of [COMPRESSION] for more details on
potential abuses.
"
So...
" Limits in SETTINGS parameters cannot be reduced instantaneously,
which leaves an endpoint exposed to behavior from a peer that could
exceed the new limits. In particular, immediately after establishing
a connection, limits set by a server are not known to clients and
could be exceeded without being an obvious protocol violation.
"
So...
" All these features - i.e., SETTINGS changes, small frames, header
compression - have legitimate uses. These features become a burden
only when they are used unnecessarily or to excess.
"
So...
<https://tools.ietf.org/html/draft-ietf-httpbis-http2-17#section-10.5.2>10.5.2.
CONNECT Issues
" The CONNECT method can be used to create disproportionate load on an
proxy, [...] A proxy therefore
cannot rely on SETTINGS_MAX_CONCURRENT_STREAMS alone to limit the
resources consumed by CONNECT requests.
"
So...
<https://tools.ietf.org/html/draft-ietf-httpbis-http2-16#section-10.8>10.8.
Privacy Considerations
" Because the PING and SETTINGS frames solicit immediate responses,
they can be used by an endpoint to measure latency to their peer.
This might have privacy implications in certain scenarios.
"
So...
Bob
________________________________________________________________
Bob Briscoe, BT
Received on Friday, 6 March 2015 15:21:29 UTC