diff --git a/src/main/java/org/caosdb/server/resource/AbstractCaosDBServerResource.java b/src/main/java/org/caosdb/server/resource/AbstractCaosDBServerResource.java
index c7ecd4deb76117474adc188c3f8a7d0f6064a3b8..876b43a160f673b96a7220a746c9a7dcd4951388 100644
--- a/src/main/java/org/caosdb/server/resource/AbstractCaosDBServerResource.java
+++ b/src/main/java/org/caosdb/server/resource/AbstractCaosDBServerResource.java
@@ -117,7 +117,7 @@ public abstract class AbstractCaosDBServerResource extends ServerResource {
       getRequest().setEntity(r);
     }
 
-    this.utils = WebinterfaceUtils.getInstance(getHostRef());
+    this.utils = WebinterfaceUtils.getInstance(getRequest());
 
     this.timestamp = getRequest().getDate().getTime();
 
@@ -177,7 +177,7 @@ public abstract class AbstractCaosDBServerResource extends ServerResource {
       retRoot.setAttribute("crid", this.getCRID());
     }
     retRoot.setAttribute("timestamp", getTimestamp().toString());
-    retRoot.setAttribute("baseuri", getRootRef().toString());
+    retRoot.setAttribute("baseuri", getUtils().getServerRootURI());
     return retRoot;
   }
 
diff --git a/src/main/java/org/caosdb/server/resource/Webinterface.java b/src/main/java/org/caosdb/server/resource/Webinterface.java
index bba1fb09c7f2c0a14b95b7314832b6ff174cef6b..adba714a96e5bbb4bc3ea13b8d72ec69a88cb33b 100644
--- a/src/main/java/org/caosdb/server/resource/Webinterface.java
+++ b/src/main/java/org/caosdb/server/resource/Webinterface.java
@@ -47,7 +47,7 @@ public class Webinterface extends ServerResource {
 
   @Override
   protected void doInit() throws ResourceException {
-    this.utils = WebinterfaceUtils.getInstance(getHostRef());
+    this.utils = WebinterfaceUtils.getInstance(getRequest());
     super.doInit();
   }
 
diff --git a/src/main/java/org/caosdb/server/resource/WebinterfaceBuildNumber.java b/src/main/java/org/caosdb/server/resource/WebinterfaceBuildNumber.java
index 0fe186a0426002071e0b6c6a5ebe0b3f234e9b2a..22f1a46e4fd314b0dcaebde7abdcc1d41a9f50f0 100644
--- a/src/main/java/org/caosdb/server/resource/WebinterfaceBuildNumber.java
+++ b/src/main/java/org/caosdb/server/resource/WebinterfaceBuildNumber.java
@@ -39,7 +39,7 @@ public class WebinterfaceBuildNumber extends ServerResource {
   @Override
   protected void doInit() throws ResourceException {
     super.doInit();
-    this.utils = WebinterfaceUtils.getInstance(getHostRef());
+    this.utils = WebinterfaceUtils.getInstance(getRequest());
   }
 
   /**
diff --git a/src/main/java/org/caosdb/server/utils/WebinterfaceUtils.java b/src/main/java/org/caosdb/server/utils/WebinterfaceUtils.java
index 1aff4de329bf3f32ba599a449c101b7fbe30423f..375d6b5e7bbced84cec5bdcdee26a9e436f0215a 100644
--- a/src/main/java/org/caosdb/server/utils/WebinterfaceUtils.java
+++ b/src/main/java/org/caosdb/server/utils/WebinterfaceUtils.java
@@ -33,6 +33,7 @@ import org.caosdb.server.CaosDBServer;
 import org.caosdb.server.ServerProperties;
 import org.caosdb.server.resource.AbstractCaosDBServerResource;
 import org.caosdb.server.resource.Webinterface;
+import org.restlet.Request;
 import org.restlet.data.Reference;
 
 /**
@@ -61,14 +62,19 @@ public class WebinterfaceUtils {
   private static final Map<String, WebinterfaceUtils> instances = new HashMap<>();
 
   /**
-   * Retrieve an instance of {@link WebinterfaceUtils} for the host. The instance can be shared with
-   * other callers.
+   * Retrieve an instance of {@link WebinterfaceUtils} for the request. The instance can be shared
+   * with other callers.
    *
-   * @param host
+   * @param request
    * @return a shared instance of {@link WebinterfaceUtils}.
    */
-  public static WebinterfaceUtils getInstance(Reference host) {
-    return getInstance(host.getHostIdentifier());
+  public static WebinterfaceUtils getInstance(Request request) {
+    String hostStr = request.getHostRef().getHostIdentifier();
+    String scheme = request.getHeaders().getFirstValue("X-Forwarded-Proto", true);
+    if (scheme != null) {
+      hostStr = hostStr.replaceFirst("^" + request.getHostRef().getScheme(), scheme);
+    }
+    return getInstance(hostStr);
   }
 
   /**
diff --git a/src/test/java/org/caosdb/server/resource/TestAbstractCaosDBServerResource.java b/src/test/java/org/caosdb/server/resource/TestAbstractCaosDBServerResource.java
index 1dcf71d8f330ab6807e65bd23022138e941fca1c..5d81ca738d507bcfd75dbe137756135cede3989b 100644
--- a/src/test/java/org/caosdb/server/resource/TestAbstractCaosDBServerResource.java
+++ b/src/test/java/org/caosdb/server/resource/TestAbstractCaosDBServerResource.java
@@ -26,6 +26,7 @@ import org.caosdb.server.database.backend.interfaces.RetrieveRoleImpl;
 import org.caosdb.server.database.exceptions.TransactionException;
 import org.caosdb.server.database.misc.TransactionBenchmark;
 import org.caosdb.server.permissions.PermissionRule;
+import org.caosdb.server.utils.WebinterfaceUtils;
 import org.jdom2.Element;
 import org.junit.BeforeClass;
 import org.junit.Rule;
@@ -125,6 +126,11 @@ public class TestAbstractCaosDBServerResource {
             // TODO Auto-generated method stub
             return user;
           }
+
+          @Override
+          public WebinterfaceUtils getUtils() {
+            return WebinterfaceUtils.getInstance(getRootRef().toString());
+          }
         };
     provideUserSourcesFile();
     Element response = s.generateRootElement();