diff --git a/include/opendht/http.h b/include/opendht/http.h
index 6eab52c81af21a2fcfefce0f382e72e4509ce05b..bf756dad357485242c6c22799c6f4736d6066511 100644
--- a/include/opendht/http.h
+++ b/include/opendht/http.h
@@ -142,7 +142,7 @@ public:
 
     Resolver(asio::io_context& ctx, const std::string& url, std::shared_ptr<dht::Logger> logger = {});
     Resolver(asio::io_context& ctx, const std::string& host, const std::string& service = "80",
-             std::shared_ptr<dht::Logger> logger = {});
+             const bool ssl = false, std::shared_ptr<dht::Logger> logger = {});
 
     // use already resolved endpoints with classes using this resolver
     Resolver(asio::io_context& ctx, std::vector<asio::ip::tcp::endpoint> endpoints,
@@ -160,11 +160,10 @@ private:
 
     std::mutex mutex_;
 
+    Url url_;
     asio::error_code ec_;
-    std::string service_;
     asio::ip::tcp::resolver resolver_;
     std::vector<asio::ip::tcp::endpoint> endpoints_;
-    Url url_;
 
     bool completed_ {false};
     std::queue<ResolverCb> cbs_;
@@ -196,7 +195,7 @@ public:
     // resolves implicitly
     Request(asio::io_context& ctx, const std::string& url, std::shared_ptr<dht::Logger> logger = {});
     Request(asio::io_context& ctx, const std::string& host, const std::string& service = "80",
-            std::shared_ptr<dht::Logger> logger = {});
+            const bool ssl = false, std::shared_ptr<dht::Logger> logger = {});
 
     // user defined resolver
     Request(asio::io_context& ctx, std::shared_ptr<Resolver> resolver, std::shared_ptr<dht::Logger> logger = {});
diff --git a/src/dht_proxy_server.cpp b/src/dht_proxy_server.cpp
index 1f9357168475d7d74039e6416517e3c43b121b95..a97ca78b2437d1f6f7090366d5809f5680f3d267 100644
--- a/src/dht_proxy_server.cpp
+++ b/src/dht_proxy_server.cpp
@@ -860,8 +860,8 @@ DhtProxyServer::sendPushNotification(const std::string& token, Json::Value&& jso
     if (pushServer_.empty())
         return;
 
-    auto request = std::make_shared<http::Request>(io_context(), pushHostPort_.first,
-                                                   pushHostPort_.second, logger_);
+    auto request = std::make_shared<http::Request>(io_context(), pushHostPort_.first, pushHostPort_.second,
+                                                                 httpsServer_ ? true : false, logger_);
     auto reqid = request->id();
     try {
         request->set_target("/api/push");
diff --git a/src/http.cpp b/src/http.cpp
index 84a7f9bc1e0cb5b349b0494c8f9c19936a03e3f8..97855b051a43389f52af7d8448a0117b212b2ddb 100644
--- a/src/http.cpp
+++ b/src/http.cpp
@@ -306,26 +306,26 @@ Connection::timeout(const std::chrono::seconds timeout, HandlerCb cb)
 // Resolver
 
 Resolver::Resolver(asio::io_context& ctx, const std::string& url, std::shared_ptr<dht::Logger> logger)
-    : resolver_(ctx), url_(url), logger_(logger)
+    : url_(url), resolver_(ctx), logger_(logger)
 {
-    service_ = url_.service;
     resolve(url_.host, url_.service);
 }
 
 Resolver::Resolver(asio::io_context& ctx, const std::string& host, const std::string& service,
-                   std::shared_ptr<dht::Logger> logger)
+                   const bool ssl, std::shared_ptr<dht::Logger> logger)
     : resolver_(ctx), logger_(logger)
 {
-    service_ = service;
-    resolve(host, service);
+    url_.host = host;
+    url_.service = service;
+    url_.protocol = (ssl ? "https" : "http");
+    resolve(url_.host, url_.service);
 }
 
 Resolver::Resolver(asio::io_context& ctx, std::vector<asio::ip::tcp::endpoint> endpoints, const bool ssl,
                    std::shared_ptr<dht::Logger> logger)
     : resolver_(ctx), logger_(logger)
 {
-    if (ssl)
-        url_.protocol = "https";
+    url_.protocol = (ssl ? "https" : "http");
     endpoints_ = std::move(endpoints);
     completed_ = true;
 }
@@ -351,12 +351,6 @@ Resolver::get_url() const
     return url_;
 }
 
-std::string
-Resolver::get_service() const
-{
-    return service_;
-}
-
 void
 Resolver::add_callback(ResolverCb cb)
 {
@@ -420,11 +414,11 @@ Request::Request(asio::io_context& ctx, const std::string& url, std::shared_ptr<
 }
 
 Request::Request(asio::io_context& ctx, const std::string& host, const std::string& service,
-                 std::shared_ptr<dht::Logger> logger)
+                 const bool ssl, std::shared_ptr<dht::Logger> logger)
     : id_(Request::ids_++), ctx_(ctx), logger_(logger)
 {
     cbs_ = std::make_unique<Callbacks>();
-    resolver_ = std::make_shared<Resolver>(ctx, host, service, logger_);
+    resolver_ = std::make_shared<Resolver>(ctx, host, service, ssl, logger_);
     set_target(resolver_->get_url().target);
 }