- From: Alex Rousskov <rousskov@measurement-factory.com>
- Date: Fri, 15 Apr 2016 10:19:40 -0600
- To: Willy Tarreau <w@1wt.eu>
- Cc: "Roy T. Fielding" <fielding@gbiv.com>, RFC Errata System <rfc-editor@rfc-editor.org>, HTTP Working Group <ietf-http-wg@w3.org>
On 04/14/2016 10:49 PM, Willy Tarreau wrote: > On Thu, Apr 14, 2016 at 06:50:43PM -0600, Alex Rousskov wrote: >> On 04/14/2016 04:39 PM, Roy T. Fielding wrote: >> >>> Don't confuse the various lenient ways in which implementations parse >>> HTTP with the requirements on generating HTTP messages that are >>> defined by the ABNF. The ABNF is intended to be more restrictive. >> >> I fully agree, but we are not discussing ABNF creation IMO. We are >> discussing a syntax change by an HTTPbis RFC. To change HTTP/1 syntax >> that has been in use for many years, the "Founders Intent" alone is not >> enough IMHO. There must be other compelling reasons. The only other >> reason given so far was "lack of known examples", followed by your >> discussion of "space padding" as a known usage example. I expect the bar >> for HTTP/1 syntax change to be significantly higher. > Alex, it's not that black or white. I wonder which part of my argument you consider to be "black or white". > We focused on maximized interoperability, > so you need to understand that when some people report that product X,Y or Z > doesn't even support chunk extensions, that other products are simply broken > regarding this and we realize that nobody produces them, it's natural to > deprecate them. Agreed. However, we are not discussing deprecation (that did not happen) but the syntax change (that did). Those two issues are completely different IMO. > They were apparently re-added in a stricter way based on > identified implementations to optimize the intersection between producers > and consumers. "Stricter way" does not automatically "optimize the intersection between producers and consumers". Please re-read the history summary by Roy: The WG removed whitespace because it was deemed "unnecessary", not because there were any known implementations that did not support whitespace. There is a big difference between "removing something that does not break any known implementation" and "removing something that breaks known implementations". I understand that the WG did not know about implementations using whitespace. However, using prior lack of knowledge to _justify_ leaving a mistake in a *bis RFC seems strange. > I do think that adding the BWS back could be enough. And maybe even adding > the only one ICAP uses. The following two changes would be enough to cover _known_ use cases: 1. BWS after ";" to accommodate the widely used ieof extension. 2. BWS after chunk-size to accommodate space padding. > After all it already took something like 5 years > for someone to notice this change, maybe ICAP is the only exception to the > rule and is sufficient to address without further breaking existing > implementations. For the record, I noticed the syntax change because of a incompatibility bug report against the new Squid _HTTP_ parser. I discovered the fact that it also breaks the extension used by ICAP while writing the errata. I am saddened by your audacity to use the "5 years" argument to prove correctness of a subtle syntax change in a *bis* RFC that was published less than 2 years ago and that is not even applicable the latest protocol version. >>> And, no, it is NEVER a good idea for new IETF protocols to >>> effectively alias other IETF protocols. >> >> AFAICT, ICAP does not alias HTTP. It uses RFC 2616 to define HTTP >> messages. This is similar to RFC 7230 using URI definitions from RFC >> 3986. When URIbis obsoletes RFC 3986, I expect the authors to be very >> careful not to accidentally invalidate HTTP/1 messages. IMHO, HTTPbis >> should offer the same courtesy to ICAP. > > Not exactly in fact, RFC3507 says this : > > ICAP is a request/response protocol similar in semantics and usage to > HTTP/1.1 [4]. Despite the similarity, ICAP is not HTTP, nor is it an > application protocol that runs over HTTP. (...) ICAP uses TCP/IP as a > transport protocol. > > So in short it allows implementers to save time by reusing their HTTP > parsers but does not expect to be strictly compatible. IMO, the above RFC 3507 text matches what I said and does not imply any allowance for incompatibility with HTTP chunked encoding syntax. ICAP is not HTTP but ICAP message bodies use HTTP chunked encoding. > There are even > some intended differences, such as : > > Note in particular that the "Transfer-Encoding" option is not > allowed. (...) Encapsulated bodies MUST be transferred using the > "chunked" transfer-coding described in Section 3.6.1 of [4]. > However, encapsulated headers MUST NOT be chunked. > > These ones alone prevent reliable forwarding over HTTP gateways. I am sorry, but I believe you misunderstand what ICAP is and, hence, misinterpret its specs. ICAP does not use HTTP as transport and does not work with HTTP agents. ICAP uses HTTP chunked _encoding_ for sending HTTP message bodies over TCP connections between ICAP agents. The syntax change in HTTPbis breaks ICAP use of HTTP chunked encoding. > But I > do agree that if we don't break anything by adding the BWS back it > would be better, at least because we're now pretty sure that people > who need to adapt their HTTP parsers to also support ICAP will support > it anyway. And we also know that HTTP agents use that whitespace for padding. Alex.
Received on Friday, 15 April 2016 16:20:42 UTC