New issue
Advanced search Search tips

Issue 713372 link

Starred by 2 users

Issue metadata

Status: Duplicate
Merged: issue 546991
Owner: ----
Closed: Apr 2017
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux
Pri: 2
Type: Bug



Sign in to add a comment

Multiplexing queries to different hosts in one HTTP2 connection looks like a bad idea

Reported by burund...@gmail.com, Apr 19 2017

Issue description

UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36

Example URL:

Steps to reproduce the problem:
1. Setup a server (works for nginx/1.11.6) with who hosts (a.example.com and b.example.com) supporting HTTP/2 and the same certificate (*.example.com).
2. Visit https://a.example.com/
3. Visit https://b.example.com/ fails with 421 Misdirected Request

What is the expected behavior?
All sites (a.example.com and b.example.com) works.

What went wrong?
Chrome uses for https://b.example.com/ the same HTTP/2 connection that it creates for https://a.example.com/. As I know, this RFC says that this behavior is correct, but in fact web servers (nginx/1.11.6 is an example) do additional checks and return an error if given host doesn't match the host client used in TLS negotiation.

Did this work before? N/A 

Chrome version: 56.0.2924.87  Channel: stable
OS Version: gentoo
Flash Version: 

One workaround may be to create new connection after receiving 421, but some older versions of nginx don't have explicit code for misdirected request and return generic 400 Bad Request.

Of course if I am right about RFC this is not a bug of chrome browser, but trouble in web servers. Unfortunately, bad web servers exist so I decided to send this issue to you too.
 

Comment 1 by mmenke@chromium.org, Apr 19 2017

Components: -Internals>Network Internals>Network>HTTP2

Comment 2 by svem...@gmail.com, Apr 19 2017

This looks like a dup of 546991.

Comment 3 by b...@chromium.org, Apr 20 2017

Mergedinto: 546991
Status: Duplicate (was: Unconfirmed)
This indeed is a duplicate: Chrome Canary 59.0.3065.0 retries request on a new connection when 421 is received.  (It will take some time until it gets to Chrome Stable.)  The original motivation for pooling requests based on IP is that most web servers can handle it and it improves latency for the user.  Note that once implemented, the ORIGIN frame will be yet another tool for the server to discourage the client from IP based pooling.

Comment 4 by burund...@gmail.com, Apr 20 2017

Looks like you are right, duplicate. Correct reconnection on 421 will solve this problem for new nginx. And error 400 instead of 421 in old nginx (nginx/1.9.12 for example) is not a bug of chrome (and fixed in new versions of nginx).

Will wait for this fix in stable, thank you :)

Sign in to add a comment