diff --git a/http/complete_response_fields.hpp b/http/complete_response_fields.hpp
index a5b3eec..8323dca 100644
--- a/http/complete_response_fields.hpp
+++ b/http/complete_response_fields.hpp
@@ -32,14 +32,14 @@
         using http_helpers::ContentType;
         std::array<ContentType, 3> allowed{ContentType::CBOR, ContentType::JSON,
                                            ContentType::HTML};
-        ContentType prefered =
-            getPreferedContentType(req.getHeaderValue("Accept"), allowed);
+        ContentType preferred =
+            getPreferredContentType(req.getHeaderValue("Accept"), allowed);
 
-        if (prefered == ContentType::HTML)
+        if (preferred == ContentType::HTML)
         {
             json_html_util::prettyPrintJson(res);
         }
-        else if (prefered == ContentType::CBOR)
+        else if (preferred == ContentType::CBOR)
         {
             res.addHeader(boost::beast::http::field::content_type,
                           "application/cbor");
@@ -49,7 +49,7 @@
         }
         else
         {
-            // Technically prefered could also be NoMatch here, but we'd
+            // Technically preferred could also be NoMatch here, but we'd
             // like to default to something rather than return 400 for
             // backward compatibility.
             res.addHeader(boost::beast::http::field::content_type,
diff --git a/http/http_client.hpp b/http/http_client.hpp
index 4bae31d..076d852 100644
--- a/http/http_client.hpp
+++ b/http/http_client.hpp
@@ -696,7 +696,7 @@
         if (!requestQueue.empty())
         {
             BMCWEB_LOG_DEBUG(
-                "{} requests remaining in queue for {}, reusing connnection {}",
+                "{} requests remaining in queue for {}, reusing connection {}",
                 requestQueue.size(), destIP, connId);
 
             setConnProps(*conn);
diff --git a/http/http_connection.hpp b/http/http_connection.hpp
index 175912d..7ea0ac6 100644
--- a/http/http_connection.hpp
+++ b/http/http_connection.hpp
@@ -632,7 +632,7 @@
 
             if (ec == boost::asio::error::operation_aborted)
             {
-                // Canceled wait means the path succeeeded.
+                // Canceled wait means the path succeeded.
                 return;
             }
             if (ec)
diff --git a/http/logging.hpp b/http/logging.hpp
index 3fdef7e..781bcfb 100644
--- a/http/logging.hpp
+++ b/http/logging.hpp
@@ -166,9 +166,9 @@
     std::source_location loc;
 
     // NOLINTNEXTLINE(google-explicit-constructor)
-    FormatString(const char* strIn, const std::source_location& locIn =
-                                        std::source_location::current()) :
-        str(strIn),
+    FormatString(const char* stringIn, const std::source_location& locIn =
+                                           std::source_location::current()) :
+        str(stringIn),
         loc(locIn)
     {}
 };
diff --git a/http/server_sent_event.hpp b/http/server_sent_event.hpp
index 7733948..49002f6 100644
--- a/http/server_sent_event.hpp
+++ b/http/server_sent_event.hpp
@@ -97,11 +97,11 @@
             boost::beast::http::status::ok, 11, BodyType{});
         res.set(boost::beast::http::field::content_type, "text/event-stream");
         res.body().more = true;
-        boost::beast::http::response_serializer<BodyType>& ser =
+        boost::beast::http::response_serializer<BodyType>& serial =
             serializer.emplace(std::move(res));
 
         boost::beast::http::async_write_header(
-            adaptor, ser,
+            adaptor, serial,
             std::bind_front(&ConnectionImpl::sendSSEHeaderCallback, this,
                             shared_from_this()));
     }
@@ -257,7 +257,7 @@
         if (ec == boost::asio::error::operation_aborted)
         {
             BMCWEB_LOG_DEBUG("operation aborted");
-            // Canceled wait means the path succeeeded.
+            // Canceled wait means the path succeeded.
             return;
         }
         if (ec)
