New issue
Advanced search Search tips

Issue 709827 link

Starred by 1 user

Issue metadata

Status: Duplicate
Merged: issue 685741
Owner:
Closed: Aug 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Windows
Pri: 2
Type: Bug



Sign in to add a comment

After successful authentication (WWW-Authenticate, IIS downgrade from HTTP/2->1.1), "This site can’t be reached" flickers by before showing the actual page

Reported by mattiash...@gmail.com, Apr 9 2017

Issue description

UserAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:52.0) Gecko/20100101 Firefox/52.0

Example URL:

Steps to reproduce the problem:
* OS: Windows 10 or Server 2016 (not reproducable on older Windows OS) as server. I used W10 enterprise, IIS and Chrome both running locally.
* WebServer: Create an IIS application ('Add application' in IIS manager), with just a simple html page (content doesn't matter)
* TLS required: Make sure to use https. I configured a self signed cert on port 443.
* WWW-Authenticate: Protect the IIS application with "Windows Authentication". Default configuration will do.
* Configure 'Latency' to GPRS from F12 dev tools (makes the problem easier to spot, but it happens even without latency configured)
* Browse to the url from Chrome, e.g. https://myserver.domain.com/test/ and enter username/password. After that, you will see the error below for a short time before you get the "real" page.

What is the expected behavior?
After successful authentication (username/password dialog) in Chrome, I expect to see the page I browsed to.

What went wrong?
After successful authentication (username/password dialog) in Chrome, a "This site can’t be reached" message is displayed for a second or so. Then, the error message goes away and actual page is displayed (and everything works as expected).

Did this work before? No 

Chrome version: 57.0.2987.133 (Official Build) (64-bit)  Channel: stable
OS Version: 10.0
Flash Version: 

WHAT I *THINK* HAPPENS:
IIS doesn't support WWW-Authenticate with http/2. Therefore, IIS falls back to http/1.1. Whether IIS does this correctly or not I don't know. But it seems like everyhing works after, so maybe the "This site can’t be reached" dialog in Chrome could be avoided?
* If I start chrome.exe with "--disable-http2", I cannot reproduce this.
* If I disable http2 in IIS, I cannot reproduce this.

UserAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36

ERROR MESSAGE IN CHROME:
    This site can’t be reached
    The webpage at https://myserver.domain.com/test/ might be temporarily down or it may have moved permanently to a new web address.
    ERR_UNEXPECTED
 

Comment 1 by b...@chromium.org, Apr 10 2017

Labels: Needs-Feedback
Could you please record network event log according to the instructions https://sites.google.com/a/chromium.org/dev/for-testers/providing-network-details and upload it here?  Thank you.
Thanks for quick response. Log attached.
net-internals-log.json
384 KB View Download
Project Member

Comment 3 by sheriffbot@chromium.org, Apr 10 2017

Cc: b...@chromium.org
Labels: -Needs-Feedback
Thank you for providing more feedback. Adding requester "bnc@chromium.org" to the cc list and removing "Needs-Feedback" label.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot

Comment 4 by b...@chromium.org, Apr 10 2017

Cc: -b...@chromium.org
Components: -Internals>Network Internals>Network>HTTP2
Labels: -Pri-2 Pri-3
Owner: b...@chromium.org
Status: Assigned (was: Unconfirmed)
Thank you.  What happens is that the server sends a RST_STREAM frame on stream 3 with error code HTTP_1_1_REQUIRED.  This might be because it needs a client certificate to serve the request, but client certificates cannot be renegotiated on a HTTP/2 connection.  Chrome handles this by closing the request, closing the connection, and retrying the request on a new connection without using HTTP/2.

This should not be visible to the user, a "This site can't be reached." message should not be displayed.

Comment 5 by b...@chromium.org, Aug 30 2017

Looking at the network log attached to comment #2:

194 URL_REQUEST
  197 HTTP_STREAM_JOB
    202 SOCKET
      fails with ERR_CERT_AUTHORITY_INVALID
  204 HTTP_STREAM_JOB retrying seamlessly
    207 SOCKET successful
    208 HTTP2_SESSION
      stream 1 gets 401 response
  209 HTTP_STREAM_JOB retrying with client credentials
    pools to existing 208 HTTP2_SESSION
      stream 2 gets reset with HTTP_1_1_REQUEST
  212 HTTP_STREAM_JOB retrying seamlessly
    215 SOCKET successful with HTTP/1.1 as expected
    ERR_UNEXPECTED, but I do not see what happens
216 URL_REQUEST retry logic, with briefly visible error message
  219 HTTP_STREAM_JOB
    223 SOCKET
      fails with ERR_CERT_AUTHORITY_INVALID
  224 HTTP_STREAM_JOB
    228 SOCKET successful with HTTP/1.1 as expected
    gets 401 response
    retry on same socket with authorization header
    successful

I do not see any events that would explain why ERR_UNEXPECTED happens.  The symptom is similar to  issue 685741 , but the underlying cause is different.

Note that there are ERR_CERT_AUTHORITY_INVALID errors, which are presumably clicked through (they could also be ignored via command line flag, but I do not see that in the log), which might indirectly cause this issue.

Comment 6 by b...@chromium.org, Aug 31 2017

Components: Internals>Network>Auth
Labels: -Pri-3 Pri-2
Mergedinto: 685741
Status: Duplicate (was: Assigned)

Sign in to add a comment