Hi Chris, The code changes look good to me. They are very limited and look safe and reasonable. The test looks good too - though it's becoming a bit more difficult to read, especially with the mysterious i > 0.
I'd suggest adding a comment (or some asserts) in the else branch of the if (lines 201 and 309) to make it a bit more obvious that the branch is entered only when: we are checking the "host" header, *AND* res.version is HTTP/2, *AND* no custom header was specified in the request, so we're just checking the expected default value that the client should have sent. For instance, adding these 7 lines could fit the bill: assert name.equalsIgnoreCase("host"); assert useDefault; assert resp.version() == HTTP_2; // In that case, and excluding the response to the HTTP/1.1 upgrade // which would have been sent through HTTP/1.1, the server's // handler should not have found any "host" header in the request // headers, as HTTP/2 use :authority instead. BTW: doesn't that leave a tiny hole for the upgrade case? Or is it simply too difficult to figure out whether the connection actually started with HTTP/1.1 and was upgraded? best regards, -- daniel On 07/02/2019 12:48, Chris Hegarty wrote:
This is a code review request for a late fix for JDK 12, to address a potentially serious regression. Post 8213189 [1] the HTTP Client now adds both the `:authority:` pseudo-header and the `Host` header to outbound HTTP/2 requests. The HTTP/2 RFC does not seem to rule out this behavior, but it does recommend that the pseudo-header be used *instead* of the `Host` header. I'm not quite sure why the Goog server rejects such a request ( with both headers ). Other HTTP/2 servers that I have checked do not. While the behaviour of the Goog server is questionable, the fact remains that the HTTP Client cannot successfully interact with it over HTTP/2. The behaviour of the client, post 8213189, has deviated away from what is recommended by the RFC. On balance, it seems safest to just revert the small part of the change for 8213189 that caused this issue. The small part is not even all that relevant to the crux of the fix for 8213189. Bug: https://bugs.openjdk.java.net/browse/JDK-8218546 Webrev: https://cr.openjdk.java.net/~chegar/8218546/webrev.00/ -Chris. [1] https://bugs.openjdk.java.net/browse/JDK-8213189