diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..30e87d2 Binary files /dev/null and b/.DS_Store differ diff --git a/src/server/actix_listener.rs b/src/server/actix_listener.rs index 37778d0..b1fe468 100644 --- a/src/server/actix_listener.rs +++ b/src/server/actix_listener.rs @@ -169,12 +169,16 @@ impl From for HttpRequest { .map(|x| x.to_string()) .unwrap_or_else(|| req.uri().path().to_string()); - let headers: Vec<(String, String)> = req + let mut headers: Vec<(String, String)> = req .headers() .iter() .map(|(k, v)| (k.to_string(), v.to_str().unwrap_or("").to_string())) .collect(); + if !req.headers().contains_key("Host") { + headers.push(("Host".to_owned(), req.connection_info().host().to_owned())); + } + Self { method, path, diff --git a/src/server/reqwest_proxy.rs b/src/server/reqwest_proxy.rs index a459dac..0dc8688 100644 --- a/src/server/reqwest_proxy.rs +++ b/src/server/reqwest_proxy.rs @@ -4,6 +4,7 @@ use bytes::Bytes; use reqwest::{ Method, header::{HeaderMap, HeaderName, HeaderValue}, + redirect::Policy, }; use crate::settings::Result; @@ -18,14 +19,17 @@ pub struct ReqwestProxy { impl ServerProxyService for ReqwestProxy { async fn new() -> Arc { Self { - client: reqwest::Client::new(), + client: reqwest::ClientBuilder::new() + .redirect(Policy::none()) + .build() + .expect("Can't build client"), } .into() } async fn fetch(&self, req: HttpRequest, connection: Connection) -> Result { let mut headers = HeaderMap::new(); for (key, value) in req.headers { - headers.insert(key.parse::()?, value.parse::()?); + headers.append(key.parse::()?, value.parse::()?); } let res = self .client