summaryrefslogtreecommitdiffstats
path: root/net/http/http_network_transaction.cc
diff options
context:
space:
mode:
authormmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-04 10:55:54 +0000
committermmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-04 10:55:54 +0000
commitd58ceea83f332d8958b10e2f21ae38ad15026e45 (patch)
tree712456f8e9b8587f62a6559cf7c0d345c8ac3033 /net/http/http_network_transaction.cc
parentbeca0156637c1d281d9ff2526a229a318816320e (diff)
downloadchromium_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.cc13
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) {