diff --git a/CHANGES.md b/CHANGES.md
index d74bdd9b5..04f1d2bbe 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -17,6 +17,7 @@
 
 * Use `&mut self` instead of `&self` for Middleware trait
 
+* Added header `User-Agent: Actix-web/<current_version>` to default headers when building a request
 
 ### Removed
 
diff --git a/src/client/request.rs b/src/client/request.rs
index 4fef3e5d0..bb338482b 100644
--- a/src/client/request.rs
+++ b/src/client/request.rs
@@ -506,7 +506,7 @@ impl ClientRequestBuilder {
     }
 
     /// Do not add default request headers.
-    /// By default `Accept-Encoding` header is set.
+    /// By default `Accept-Encoding` and `User-Agent` headers are set.
     pub fn no_default_headers(&mut self) -> &mut Self {
         self.default_headers = false;
         self
@@ -608,6 +608,18 @@ impl ClientRequestBuilder {
             } else {
                 self.header(header::ACCEPT_ENCODING, "gzip, deflate");
             }
+
+            let contains = if let Some(parts) = parts(&mut self.request, &self.err) {
+                parts.headers.contains_key(header::USER_AGENT)
+            } else {
+                true
+            };
+            if !contains {
+                self.header(
+                    header::USER_AGENT,
+                    concat!("Actix-web/", env!("CARGO_PKG_VERSION")),
+                );
+            }
         }
 
         let mut request = self.request.take().expect("cannot reuse request builder");
diff --git a/tests/test_client.rs b/tests/test_client.rs
index 9b9fb0e82..3128bb942 100644
--- a/tests/test_client.rs
+++ b/tests/test_client.rs
@@ -432,3 +432,29 @@ fn test_client_cookie_handling() {
     let c2 = response.cookie("cookie2").expect("Missing cookie2");
     assert_eq!(c2, &cookie2);
 }
+
+#[test]
+fn test_default_headers() {
+    let srv = test::TestServer::new(|app| app.handler(|_| HttpResponse::Ok().body(STR)));
+
+    let request = srv.get().finish().unwrap();
+    let repr = format!("{:?}", request);
+    assert!(repr.contains("\"accept-encoding\": \"gzip, deflate\""));
+    assert!(repr.contains(concat!(
+        "\"user-agent\": \"Actix-web/",
+        env!("CARGO_PKG_VERSION"),
+        "\""
+    )));
+
+    let request_override = srv.get()
+        .header("User-Agent", "test")
+        .finish()
+        .unwrap();
+    let repr_override = format!("{:?}", request_override);
+    assert!(repr_override.contains("\"user-agent\": \"test\""));
+    assert!(!repr_override.contains(concat!(
+        "\"user-agent\": \"Actix-web/",
+        env!("CARGO_PKG_VERSION"),
+        "\""
+    )));
+}