Re: notes on http2 draft
William Chan (陈智昌) <willchan@chromium.org> Tue, 21 May 2013 17:16 UTC
Return-Path: <ietf-http-wg-request@listhub.w3.org>
X-Original-To: ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com
Delivered-To: ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id F07EF21F97F2 for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Tue, 21 May 2013 10:16:57 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -9.064
X-Spam-Level:
X-Spam-Status: No, score=-9.064 tagged_above=-999 required=5 tests=[AWL=0.013, BAYES_00=-2.599, FM_FORGED_GMAIL=0.622, HTML_MESSAGE=0.001, J_CHICKENPOX_71=0.6, MIME_8BIT_HEADER=0.3, RCVD_IN_DNSWL_HI=-8]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id pbn08stJcjTP for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Tue, 21 May 2013 10:16:52 -0700 (PDT)
Received: from frink.w3.org (frink.w3.org [128.30.52.56]) by ietfa.amsl.com (Postfix) with ESMTP id ED9C921F97EA for <httpbisa-archive-bis2Juki@lists.ietf.org>; Tue, 21 May 2013 10:16:51 -0700 (PDT)
Received: from lists by frink.w3.org with local (Exim 4.72) (envelope-from <ietf-http-wg-request@listhub.w3.org>) id 1UeqAm-0006CF-6T for ietf-http-wg-dist@listhub.w3.org; Tue, 21 May 2013 17:16:28 +0000
Resent-Date: Tue, 21 May 2013 17:16:28 +0000
Resent-Message-Id: <E1UeqAm-0006CF-6T@frink.w3.org>
Received: from lisa.w3.org ([128.30.52.41]) by frink.w3.org with esmtp (Exim 4.72) (envelope-from <willchan@google.com>) id 1UeqAa-00069B-2z for ietf-http-wg@listhub.w3.org; Tue, 21 May 2013 17:16:16 +0000
Received: from mail-qa0-f43.google.com ([209.85.216.43]) by lisa.w3.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.72) (envelope-from <willchan@google.com>) id 1UeqAU-00070E-O1 for ietf-http-wg@w3.org; Tue, 21 May 2013 17:16:16 +0000
Received: by mail-qa0-f43.google.com with SMTP id j11so2330914qag.16 for <ietf-http-wg@w3.org>; Tue, 21 May 2013 10:15:45 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=P5us1yARz2KWN9iyaiEjFbuy4G1Wqdw5BYim3B2Tftc=; b=EyJ7SXCTeFVgMFCYm985vGuzgqeuZiJKGgnTQMZjXcomwCVXItzvy3D813RPBAkOsX tqf1Owwa20NyjDyNaPw2sFtasJlv4tA7U3saler77BmOhk2vTNvLi0shEyOyOMtxCSlO KAAcZAxtGX0iFsO5LvHqSEx2vTaY1O7AH++zeyEEloS3ShVWvD/rt3XEkpZA1hlSuVTq t4BAs7cVrrjJR04CdcIGpeg8CHCYHcBCC/cbRvjsP8UuqDaNZrg2LBw+RXWUEiF59uGP fiqAEaEv03odPvuM4i7VKsSgPvcWGq8pegh9zGzWIXJDiyw2tVejDSKGp/U/LPobepuQ YOiA==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=P5us1yARz2KWN9iyaiEjFbuy4G1Wqdw5BYim3B2Tftc=; b=ImsNCblUOpqFXA7nOx4AV2EPLLbzDqElPLqhNiLKzfGgx7fQmzRNuzuEkpf7sHVDm+ vXBvjrvBouG3oNGxomhE2j01jYOiXlvObWXdb97FqruusutUTM29OdDk9dohWUN2qOue EyysWD3QDBxaVMSn35ds8h+R4ha3wLlbSkWCw=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type :x-gm-message-state; bh=P5us1yARz2KWN9iyaiEjFbuy4G1Wqdw5BYim3B2Tftc=; b=O002ATX/nFH1hUqfoqFPzua7LUHpVbXJuaawItCRRESPQXgGaqgDNxejABPntV+6QW /gNsPx4xG4eG1zF4Pl9bEjaieYo73E4EmbsBwkksJzDzBpisw4EgX/UqVAE4ERE9auTu P8z6a8GG63O4kFtLtdTLbLe47jYhHUqqtkxyOSHaIwjxf8iRucT23BlIdfiIk2kgJ9EH P1Vm4Y57/EusbQ1ioide4Q9HiWQw8Vrj2bxE3Mq6kCFbwclXftvAGqZv4EwCVy5SIHFD tEv0Zr9TX3naFZTs1INJ1ygZdwqekUufkzlSWabPljXsvU+DnEV7z9HKs/KoBilrG37N Hzcw==
MIME-Version: 1.0
X-Received: by 10.229.177.197 with SMTP id bj5mr1261977qcb.39.1369156544879; Tue, 21 May 2013 10:15:44 -0700 (PDT)
Sender: willchan@google.com
Received: by 10.229.217.19 with HTTP; Tue, 21 May 2013 10:15:44 -0700 (PDT)
In-Reply-To: <CABP7Rbf3X44UvPXBn4xvvznEmvhkuRDQFE6WV-42xOvBCSrOjg@mail.gmail.com>
References: <CAOdDvNr4q-=yNjocJ6nMNcnekWDakykHPdvUGZe8Kp8vOphpuA@mail.gmail.com> <CABP7Rbf3X44UvPXBn4xvvznEmvhkuRDQFE6WV-42xOvBCSrOjg@mail.gmail.com>
Date: Tue, 21 May 2013 14:15:44 -0300
X-Google-Sender-Auth: 7fPEpyTHo9JYBHXiNSY_tdhjT98
Message-ID: <CAA4WUYh3u++ny==qzz4-UcddrRbKduSHarffi9Z-2_D9P3pUbw@mail.gmail.com>
From: "William Chan (陈智昌)" <willchan@chromium.org>
To: James M Snell <jasnell@gmail.com>
Cc: Patrick McManus <pmcmanus@mozilla.com>, HTTP Working Group <ietf-http-wg@w3.org>
Content-Type: multipart/alternative; boundary="001a11c28ece80093904dd3d9993"
X-Gm-Message-State: ALoCoQlSGVUJ9valoNotW5N608H6J0KP0VrmpU4WVttDImQEtWdTes42FjLlGcdZMpS1uYlzr4+4O0L1gogUtZjDk4VH+ZStvPLoTblQRQcxl5DExzUtJcXXLgztabCBq7pJ0xZN+rrkNstlFS5qZyuz5lo/Guf2x0bHkheeot3ghVmDyUVAwTN77pkypBcCap3Ol8+5VFIr
Received-SPF: pass client-ip=209.85.216.43; envelope-from=willchan@google.com; helo=mail-qa0-f43.google.com
X-W3C-Hub-Spam-Status: No, score=-4.1
X-W3C-Hub-Spam-Report: AWL=-2.198, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, RP_MATCHES_RCVD=-1.07, SPF_PASS=-0.001
X-W3C-Scan-Sig: lisa.w3.org 1UeqAU-00070E-O1 f2b8395b7145e4fe09d94a8911ecf964
X-Original-To: ietf-http-wg@w3.org
Subject: Re: notes on http2 draft
Archived-At: <http://www.w3.org/mid/CAA4WUYh3u++ny==qzz4-UcddrRbKduSHarffi9Z-2_D9P3pUbw@mail.gmail.com>
Resent-From: ietf-http-wg@w3.org
X-Mailing-List: <ietf-http-wg@w3.org> archive/latest/18063
X-Loop: ietf-http-wg@w3.org
Resent-Sender: ietf-http-wg-request@w3.org
Precedence: list
List-Id: <ietf-http-wg.w3.org>
List-Help: <http://www.w3.org/Mail/>
List-Post: <mailto:ietf-http-wg@w3.org>
List-Unsubscribe: <mailto:ietf-http-wg-request@w3.org?subject=unsubscribe>
On Tue, May 21, 2013 at 1:00 PM, James M Snell <jasnell@gmail.com> wrote: > Excellent review... a few brief responses... > > On Tue, May 21, 2013 at 8:01 AM, Patrick McManus <pmcmanus@mozilla.com> > wrote: > >[snip] > > 1.2 > > > > message:A complete sequence of frames. > > > > I'm not sure that does a lot for me as a definition. It should at least > say > > something about them sharing the same stream ID.. or am I describing a > > stream? Is a message a unidirectional stream? as I said.. it doesn't do a > > lot as a definition. The document refers to "window update messages" and > > "goaway messages" but I think it means frames in those cases.. it also > talks > > about "receiver of a message" sending WINDOW_UPDATE which makes it sound > > like a message is any data frame (not the complete sequence of them)... > and > > then again we also talk about "HTTP Messages" which are something > distinct.. > > > > I suggest we scrub the term message from the document (and this section) > > except when it refers to HTTP messages. > > > > Agree. The term "message" used in the framing layer is confusing and > meaningless and ought to be reserved specifically for the HTTP > semantic layer discussion. > > >[snip[ > > Implementations MUST ignore unsupported and unrecognized frame types. > > > > I think invalid frame types should be session errors of the MUST NOT send > > variety. I know the list has been talking about this lately and I haven't > > had an opportunity to chime in. Be liberal in what you receive is > overrated > > and often fraught with security problems - we can rev the protocol with > ALPN > > at Internet scale in order to sanely guide extensions as needed. I know > > design committees love open ended extensions so my view won't pervail, > but > > this is exactly the kind of thing that leads to interop doom. > > > > There are generally three categories here depending on how you > characterize the framing layer... > > 1. Malformed/Invalid Frames ... which yes, ought to be rejected with a > connection error > 2. Unknown protocol frames (hop-by-hop frames). Given that these may > or may not affect the connection state, it would likely be better to > reject these rather than silently ignore them and go with Roberto's > option of requiring a new protocol version id when they're used. > 3. Unknown data frames (end-to-end frames). These do not affect the > connection state at all. These are safe for an endpoint to ignore and > pass thru with the assumption that the a higher layer will deal with > them. > > Right now, the spec draws absolutely no distinction between 2 and 3 > and just says to ignore everything you don't understand. > > Alternatively, if you view the framing layer as being essentially a > black box to the higher application levels and require that any and > all application data be transferred using DATA frames (ruling out the > use of framing for anything other than hop-by-hop protocol level > stuff) then I agree that MUST NOT send is significantly safer than > MUST IGNORE. > > > 3.3.2 > > > > Implementations with limited resources might not be capable of processing > > large frame sizes. Such implementations MAY choose to place additional > > limits on the maximum frame size. However, all implementations MUST be > > capable of receiving and processing frames containing at least 8192 > octets > > of data. > > > > I'm pretty confident we are just inventing complexity here for no good > > reason. The tiny universe of implementations that can cope with 8KB but > not > > 64KB is not worth the complexity. One of the advantages of going with a > 16 > > bit frame size is that it should be small enough for everything to handle > > it. > > > > If there is reason to believe 64KB is too big for a population large > enough > > to care about (remembering of course that HTTP/2 is not a ticket to > Internet > > admission - if you're really so small that you can't read 64KB frames the > > muxing of HTTP/2 is going to be a real challenge too; you're probably > best > > left using a different protocol. Just coap :)), then let's lower the max > > frame size instead of reinventing Path MTU Discovery complexity. But I > think > > we can just drop this section and require everyone to deal with 64KB. > > > > After experimenting with this further, I'm +1 on this for now but I > want to see a lot more experimentation with flow control. Any > configurable limits that we place on frame size is going to introduce > a Path MTU problem and could force "reframing" to occur at various > points in the message flow. > I'm +1 on this too. What experimentation would you like to see James? We've been using flow control for awhile now in SPDY land. > > > 3.4 > > > > A "stream" is an independent, bi-directional sequence of frames > > > > Due to the (expected) compression requirements the frames aren't really > > independent of other streams. I know this mistake comes up pretty > commonly > > on spdy-dev from new implementers of that protocol, so it probably helps > to > > avoid saying independent here. (section 5.3 does it too). > > > > Well... streams themselves are independent of one another, it's the > serialization of the individual frames that is dependent on a shared > context state. I agree that this ought to be explained better. > > > 3.4.1 > > > > Rather, new streams are established by sending a frame whose stream > > identifier field references a previously unused stream identifier. > > > > That's a little too loose. Streams are created by the client through > > HEADERS+PRIORITY (4.2.2) and by the server through PUSH_PROMISE. The text > > as-is makes it sound more free flowing than that. > > > > The identifier of a newly established stream MUST be numerically greater > > than all previously established streams from that endpoint within the > > HTTP/2.0 connection, unless the identifier has been reserved using a > > PUSH_PROMISE (Section 3.8.5) frame. > > > > Likewise, PUSH_PROMISE really creates the stream (4.3.1) from the > server.. I > > don't see a reason for the caveat here. > > > > This is up for debate, apparently. > > I agree with you that H, H+P and P_P ought to be the only ways to > create new streams but others (such as Roberto) have argued that any > time you send any frame with an unused stream identifier, it > initializes that stream. > Yes, this is up for debate. I agree with you guys too. > > > > > 3.4.2 > > > > I thought one of the takeaways at Tokyo was to define a change-priority > > frame.. Can we do that now? is the intention to use a H+P without any > > headers at any point in the stream? If so, I think that should be called > out > > so that server implementation's don't freak out at seeing H+P at strange > > points in the stream.. and I think there is some language in 4.2.2 that > > could be interpreted as meaning certain colon headers are required to be > in > > every H+P > > > > Truthfully, I'd rather see us define a distinct PRIORITY frame and > remove H+P from the picture altogether. > > To create the stream, I would send a HEADERS frame. Then to set the > priority for the stream, I would send a separate PRIORITY frame. This > would resolve any possible ambiguity and confusion with regards to > when to use HEADERS vs HEADERS+PRIORITIES vs any new CHANGE-PRIORITY > frame. > > Yes, I get the argument that sending HEADERS+PRIORITY vs. HEADERS and > a PRIORITY frame allows creation of the stream and setting of the > priority in a single operation, but the added complexity of having > separate HEADERS, HEADERS+PRIORITY, CHANGE-PRIORITY frames just > doesn't seem like a worth while tradeoff to me. > I don't view it as much added complexity. I think it just may be confusing to people why you might have a combined HEADERS+PRIORITY frame vs separate ones. It wasn't a problem earlier until we renamed the frames :P > > > > > 3.8.5 > > > > The PUSH_PROMISE frame (type=0x5) is used to notify the peer endpoint in > > advance of streams the sender intends to initiate. > > > > I think I must have missed something on list about this. Why is the > language > > here general (peer, sender).. why define this so that clients can > generate > > PUSH_PROMISE ? > > > > This also appears to be up for debate. There is a theoretical use case > for clients sending PUSH_PROMISE frames and sending multiple > associated streams to a server.. but, it's purely theoretical. For > now, I think using more specific language that restricts PUSH_PROMISE > use to the server is more than appropriate. > +1, restrict to server. > > >[snip] > > 4.2.2 > > > > User-agents MUST support gzip compression. Regardless of the > Accept-Encoding > > sent by the user-agent, the server may always send content encoded with > gzip > > or deflate encoding. [rfc.comment.11: Still valid?] > > > > I support that still being valid. This is an important performance > property > > to rely on. > > > > Actually, this bit needs to be clarified, and I believe we ought to be > able to simplify this significantly. > > For instance, for all DATA frames, we can introduce a GZIP flag (0x2) > that indicates that the data contained in that frame has been > compressed. Doing so really eliminates the need to specify anything at > the HTTP semantic layer and eliminates the need for the > accept-/transfer-/content-encoding header mechanism completely. > > - James > >
- notes on http2 draft Patrick McManus
- Re: notes on http2 draft James M Snell
- Re: notes on http2 draft William Chan (陈智昌)
- Re: notes on http2 draft Martin Thomson
- Re: notes on http2 draft Martin Thomson
- Re: notes on http2 draft Patrick McManus