- From: Greg Wilkins <gregw@webtide.com>
- Date: Wed, 8 Sep 2021 08:44:04 +1000
- To: Willy Tarreau <w@1wt.eu>
- Cc: Stefan Eissing <stefan.eissing@greenbytes.de>, Martin Thomson <mt@lowentropy.net>, HTTP Working Group <ietf-http-wg@w3.org>
- Message-ID: <CAAPGdfG_uOGQbtJwrRKtWYO+Dj7P5Kjt0A9HnEBczqMwebKRSA@mail.gmail.com>
On Tue, 7 Sept 2021 at 18:32, Willy Tarreau <w@1wt.eu> wrote: > On Tue, Sep 07, 2021 at 10:19:31AM +0200, Stefan Eissing wrote: > > After living for 5 years with the current implementation, I am not sure > I'd > > like to change it. > > I can understand, however, when working as a proxy, what do you pass to the > backend server ? I guess you're passing the only value you kept (i.e. > :authority when present), not two possibly different values ? > Currently RFC7540 says: An intermediary that converts an HTTP/2 request to HTTP/1.1 MUST create a Host header field if one is not present in a request by copying the value of the ":authority" pseudo-header field. So that is kind of a loophole as it says that a proxy must use the :authority only if a Host header is not present. If a Host header is present, but has been ignored due to the presence of an :authority header, then a proxy may decide to act based on the :authority, but send a request using a host header with a differing value that it had previously ignored. I think we can clarify this without making significant (any?) changes in behavior. I'd expect that most implementations would not need to change as they are likely to pass only a single value to the layer that does the proxying, but it would be good if the spec could back them up by saying that rewriting a host header is the correct thing to do when acting as an intermediary converting to HTTP/1. There may be some impls that decide to proxy based on the :authority, but then just copy over a different existing Host header, and I think such impls probably should change as that feels like tunneling misinformation. How about something like: An intermediary that converts an HTTP/2 request to HTTP/1.1 MUST include a Host header field in a request, using the value of the ":authority" pseudo-header field if available or the received Host header otherwise. I'd also be OK with making it just a SHOULD use the :authority if there is a use-case for not doing so? cheers -- Greg Wilkins <gregw@webtide.com> CTO http://webtide.com
Received on Tuesday, 7 September 2021 22:44:28 UTC