Skip to content

Commit d869604

Browse files
committed
referer updates
- Don't set Referer if going from https to http - Explicitly remove username, password, and fragment from Referer
1 parent e00a64a commit d869604

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

src/client.rs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,9 @@ impl RequestBuilder {
338338
url = match loc {
339339
Ok(loc) => {
340340
if client.auto_referer.load(Ordering::Relaxed) {
341-
headers.set(Referer(url.to_string()));
341+
if let Some(referer) = make_referer(&loc, &url) {
342+
headers.set(referer);
343+
}
342344
}
343345
urls.push(url);
344346
let action = check_redirect(&client.redirect_policy.lock().unwrap(), &loc, &urls);
@@ -383,6 +385,18 @@ impl fmt::Debug for RequestBuilder {
383385
}
384386
}
385387

388+
fn make_referer(next: &Url, previous: &Url) -> Option<Referer> {
389+
if next.scheme() == "http" && previous.scheme() == "https" {
390+
return None;
391+
}
392+
393+
let mut referer = previous.clone();
394+
let _ = referer.set_username("");
395+
let _ = referer.set_password(None);
396+
referer.set_fragment(None);
397+
Some(Referer(referer.into_string()))
398+
}
399+
386400
#[cfg(test)]
387401
mod tests {
388402
use super::*;

0 commit comments

Comments
 (0)