diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index bf52f72882b..b7cf6922211 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -635,51 +635,45 @@ pub fn load(load_data: LoadData, // --- Loop if there's a redirect if response.status().class() == StatusClass::Redirection { - match response.headers().get::() { - Some(&Location(ref new_url)) => { - // CORS (https://fetch.spec.whatwg.org/#http-fetch, status section, point 9, 10) - match load_data.cors { - Some(ref c) => { - if c.preflight { - return Err( - LoadError::Cors( - url, - "Preflight fetch inconsistent with main fetch".to_owned())); - } else { - // XXXManishearth There are some CORS-related steps here, - // but they don't seem necessary until credentials are implemented - } - } - _ => {} + if let Some(&Location(ref new_url)) = response.headers().get::() { + // CORS (https://fetch.spec.whatwg.org/#http-fetch, status section, point 9, 10) + if let Some(ref c) = load_data.cors { + if c.preflight { + return Err( + LoadError::Cors( + url, + "Preflight fetch inconsistent with main fetch".to_owned())); + } else { + // XXXManishearth There are some CORS-related steps here, + // but they don't seem necessary until credentials are implemented } - - let new_doc_url = match UrlParser::new().base_url(&doc_url).parse(&new_url) { - Ok(u) => u, - Err(e) => { - return Err(LoadError::InvalidRedirect(doc_url, e.to_string())); - } - }; - - info!("redirecting to {}", new_doc_url); - url = replace_hosts(&new_doc_url); - doc_url = new_doc_url; - - // According to https://tools.ietf.org/html/rfc7231#section-6.4.2, - // historically UAs have rewritten POST->GET on 301 and 302 responses. - if method == Method::Post && - (response.status() == StatusCode::MovedPermanently || - response.status() == StatusCode::Found) { - method = Method::Get; - } - - if redirected_to.contains(&url) { - return Err(LoadError::InvalidRedirect(doc_url, "redirect loop".to_owned())); - } - - redirected_to.insert(doc_url.clone()); - continue; } - None => () + + let new_doc_url = match UrlParser::new().base_url(&doc_url).parse(&new_url) { + Ok(u) => u, + Err(e) => { + return Err(LoadError::InvalidRedirect(doc_url, e.to_string())); + } + }; + + info!("redirecting to {}", new_doc_url); + url = replace_hosts(&new_doc_url); + doc_url = new_doc_url; + + // According to https://tools.ietf.org/html/rfc7231#section-6.4.2, + // historically UAs have rewritten POST->GET on 301 and 302 responses. + if method == Method::Post && + (response.status() == StatusCode::MovedPermanently || + response.status() == StatusCode::Found) { + method = Method::Get; + } + + if redirected_to.contains(&url) { + return Err(LoadError::InvalidRedirect(doc_url, "redirect loop".to_owned())); + } + + redirected_to.insert(doc_url.clone()); + continue; } }