diff --git a/actix-http/src/message.rs b/actix-http/src/message.rs
index bccb4d53e..736f35ee1 100644
--- a/actix-http/src/message.rs
+++ b/actix-http/src/message.rs
@@ -343,6 +343,8 @@ impl ResponseHead {
 }
 
 pub struct Message<T: Head> {
+    // Rc here should not be cloned by anyone.
+    // It's used to reuse allocation of T and no shared ownership is allowed.
     head: Rc<T>,
 }
 
@@ -353,14 +355,6 @@ impl<T: Head> Message<T> {
     }
 }
 
-impl<T: Head> Clone for Message<T> {
-    fn clone(&self) -> Self {
-        Message {
-            head: self.head.clone(),
-        }
-    }
-}
-
 impl<T: Head> std::ops::Deref for Message<T> {
     type Target = T;
 
@@ -377,9 +371,7 @@ impl<T: Head> std::ops::DerefMut for Message<T> {
 
 impl<T: Head> Drop for Message<T> {
     fn drop(&mut self) {
-        if Rc::strong_count(&self.head) == 1 {
-            T::with_pool(|p| p.release(self.head.clone()))
-        }
+        T::with_pool(|p| p.release(self.head.clone()))
     }
 }