diff options
author | mmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-04 10:55:54 +0000 |
---|---|---|
committer | mmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-04 10:55:54 +0000 |
commit | d58ceea83f332d8958b10e2f21ae38ad15026e45 (patch) | |
tree | 712456f8e9b8587f62a6559cf7c0d345c8ac3033 /net/http/http_network_transaction.cc | |
parent | beca0156637c1d281d9ff2526a229a318816320e (diff) | |
download | chromium_src-d58ceea83f332d8958b10e2f21ae38ad15026e45.zip chromium_src-d58ceea83f332d8958b10e2f21ae38ad15026e45.tar.gz chromium_src-d58ceea83f332d8958b10e2f21ae38ad15026e45.tar.bz2 |
Retry requests on reused sockets when receiving 408 responses.
408s indicate a socket was left idle for too long before
sending a request.
It's possible these errors are being surfaced to users more often
than previously due to https://codereview.chromium.org/169643006,
for servers that very aggressively time out never-used sockets.
BUG=377581
Review URL: https://codereview.chromium.org/303443011
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@274760 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/http/http_network_transaction.cc')
-rw-r--r-- | net/http/http_network_transaction.cc | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc index d9397e4..14ed89b 100644 --- a/net/http/http_network_transaction.cc +++ b/net/http/http_network_transaction.cc @@ -987,6 +987,19 @@ int HttpNetworkTransaction::DoReadHeadersComplete(int result) { DCHECK(response_.headers.get()); + // On a 408 response from the server ("Request Timeout") on a stale socket, + // retry the request. + if (response_.headers->response_code() == 408 && + stream_->IsConnectionReused()) { + net_log_.AddEventWithNetErrorCode( + NetLog::TYPE_HTTP_TRANSACTION_RESTART_AFTER_ERROR, + response_.headers->response_code()); + // This will close the socket - it would be weird to try and reuse it, even + // if the server doesn't actually close it. + ResetConnectionAndRequestForResend(); + return OK; + } + #if defined(SPDY_PROXY_AUTH_ORIGIN) // Server-induced fallback; see: http://crbug.com/143712 if (response_.was_fetched_via_proxy) { |