- From: Stefan Eissing <stefan.eissing@greenbytes.de>
- Date: Tue, 8 Aug 2017 11:06:12 +0200
- To: Kazuho Oku <kazuhooku@gmail.com>
- Cc: Willy Tarreau <w@1wt.eu>, HTTP Working Group <ietf-http-wg@w3.org>, Dragana Damjanovic <dragana.damjano@gmail.com>
> Am 08.08.2017 um 10:55 schrieb Kazuho Oku <kazuhooku@gmail.com>: > > 2017-08-08 17:16 GMT+09:00 Stefan Eissing <stefan.eissing@greenbytes.de>: >> Ok, time to clarify the semantics, then words will come more easily. > > Yeah I agree with the approach. > >> In my mind, any header that comes with a 103 is not a header of the >> resource that is requested. Same as with 100 and 101. >> >> For a client/cache/intermediate any 1xx header is neutral to the >> set of resource headers in the final response. > > I agree to the above. > >> RFC 7231 says (ch. 6.2) "If the request did not contain an Expect >> header field containing the 100-continue expectation, the client >> can simply discard this interim response." >> >> And "101 Switching Protocols" is obviously hop-by-hop anyway, so >> it may never reach the consumer of the real response. >> >> For 103, this is also true. Any HTTP/2 intermediate should discard >> unknown 1xx responses, so the server can also not assume that its >> headers reach all recipients. > > I do not agree. RFC 7231 section 6.2 states: > > A proxy MUST forward 1xx responses unless the proxy itself requested > the generation of the 1xx response. > > So it would be natural to assume that proxies that do not understand > 103 will forward the hints to the client. You are right. A proxy MUST forward it. I have no idea if this works in reality, though. -Stefan >> >> That also relieves intermediates from any obligation of "folding" >> 103s into the final response (in case they do not want or can not >> send on the 103s). >> >> Which also requires any origin that *wants* these headers in the >> final response that is about the resource , to duplicate them in >> its response. >> >> Personally, I think of 1xx as a signalling channel from server >> to client that can be used before the response is sent. >> >> For 100 and 101, this is pretty clear. For 103 there is some >> temptation to see Link: headers as part of the final response, >> but they really are not. >> >> My interpretation. >> >> -Stefan >> >>> Am 08.08.2017 um 09:38 schrieb Willy Tarreau <w@1wt.eu>: >>> >>> On Tue, Aug 08, 2017 at 03:57:16PM +0900, Kazuho Oku wrote: >>>> 2017-08-08 14:29 GMT+09:00 Willy Tarreau <w@1wt.eu>: >>>>> What about something like this instead : >>>>> >>>>> A client must be prepared to receive multiple 103 (Early Hints) responses >>>>> in any order coming from multiple intermediaries as well as the origin >>>>> server along the path between the client and the server. Given that such >>>>> agents will often rely on different but overlapping policies to emit these >>>>> responses, it is likely that some header fields may be repeated. The client >>>>> is expected to simply consider the union of all these header fields as if >>>>> they were received in a single response. >>>> >>>> Thank you for your comments and the suggestion. >>>> >>>> I am worried of adding statements on how an intermediary could >>>> generate 103 responses and using that as the reasoning for why the >>>> client should consider the union of the header fields as the >>>> server-provided expectation. >>> >>> But isn't it expected to be the reality ? In the other example I gave >>> it makes a lot of sense and it becomes obvious : >>> - for clients that any such response may be partial ; >>> - for clients that any such response may overlap with others ; >>> - for clients that even the union of these responses do not provide an >>> exhaustive list >>> - for clients that the final response will probably not contain the >>> whole list of links given that some might have speculatively been >>> added in anticipation >>> - for servers that they don't know if upfront intermediaries have >>> already sent equivalent links >>> - for servers that based on the incertainty of what is done upfront, >>> they need have to provide the final list with the final response >>> >>>> This is because it is technically >>>> possible to to require each intermediary to build (i.e. calculate the >>>> union) and emit a complete set of header fields for every 103 response >>>> that it sends. >>> >>> In fact not exactly. Most of these will be built while processing the >>> request, long before the response arrives. When the response arrives, >>> conditions may have changed. For example in haproxy when processing >>> the response we don't have access to the request elements anymore. A >>> rule based on the Host field or on the URI prefix would be matched >>> only during the request and not during the response (we have the >>> ability to artificially copy them into variables for such explicit >>> processing but it's not natural). I tend to think that we should keep >>> in mind that what intermediaries add there is approximative but helps >>> fill dead time speculatively preloading contents that will be likely >>> needed, and that the final word is to the server's final response. We >>> could possibly even suggest that elements that were learned from 103 >>> and not yet prefeteched could be aborted if they don't appear in the >>> final response. >>> >>>> Therefore, my preference goes to either (re)stating the general rule >>>> (i.e. nonexistence in 103 is not an indication of absence in the final >>>> response), or to state the expected behavior of the endpoints without >>>> any reasoning. I also think that we should keep the "a server can >>>> omit" statement, since it would be a direct answer for people >>>> wondering how a server should adjust the expectation that it has >>>> already sent. >>> >>> I see your point but I tend to think that explaining the workflow like >>> above makes all these responses much more obvious in fact. If you're >>> willing to go down that route, I can try to help provide a paragraph >>> to (try to) make this more natural. >>> >>>> Considering the points, how using something like below for the last paragraph: >>>> >>>> While emitting a series of 103 (Early Hints) responses, a server can >>>> omit a header field that was included in one response in the >>>> following responses, even when it is anticipated that the header >>>> field will be part of the final response. >>> >>> To be honnest I'm having difficulties parsing it, which is not a good >>> sign for a standard ;-) >>> >>> It would be nice if some native english speakers could bring some help >>> here, some of our sentences are not always the most natural we can think >>> of. >>> >>> Cheers, >>> Willy >> > > > > -- > Kazuho Oku >
Received on Tuesday, 8 August 2017 09:06:39 UTC