   server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
   server.sendHeader("Pragma", "no-cache");
   server.sendHeader("Expires", "-1");
-  server.setContentLength(CONTENT_LENGTH_UNKNOWN);
-  server.send(200, "text/html", ""); // Empty content inhibits Content-length header so we have to close the socket ourselves.
-  server.sendContent(
-    "<html><head></head><body>"
-    "<h1>Wifi config</h1>"
-  );
+
+  String Page;
+  Page += F(
+            "<html><head></head><body>"
+            "<h1>Wifi config</h1>");
   if (server.client().localIP() == apIP) {
-    server.sendContent(String("<p>You are connected through the soft AP: ") + softAP_ssid + "</p>");
+    Page += String(F("<p>You are connected through the soft AP: ")) + softAP_ssid + F("</p>");
   } else {
-    server.sendContent(String("<p>You are connected through the wifi network: ") + ssid + "</p>");
+    Page += String(F("<p>You are connected through the wifi network: ")) + ssid + F("</p>");
   }
-  server.sendContent(
-    "\r\n<br />"
-    "<table><tr><th align='left'>SoftAP config</th></tr>"
-  );
-  server.sendContent(String() + "<tr><td>SSID " + String(softAP_ssid) + "</td></tr>");
-  server.sendContent(String() + "<tr><td>IP " + toStringIp(WiFi.softAPIP()) + "</td></tr>");
-  server.sendContent(
-    "</table>"
-    "\r\n<br />"
-    "<table><tr><th align='left'>WLAN config</th></tr>"
-  );
-  server.sendContent(String() + "<tr><td>SSID " + String(ssid) + "</td></tr>");
-  server.sendContent(String() + "<tr><td>IP " + toStringIp(WiFi.localIP()) + "</td></tr>");
-  server.sendContent(
-    "</table>"
-    "\r\n<br />"
-    "<table><tr><th align='left'>WLAN list (refresh if any missing)</th></tr>"
-  );
+  Page +=
+    String(F(
+             "\r\n<br />"
+             "<table><tr><th align='left'>SoftAP config</th></tr>"
+             "<tr><td>SSID ")) +
+    String(softAP_ssid) +
+    F("</td></tr>"
+      "<tr><td>IP ") +
+    toStringIp(WiFi.softAPIP()) +
+    F("</td></tr>"
+      "</table>"
+      "\r\n<br />"
+      "<table><tr><th align='left'>WLAN config</th></tr>"
+      "<tr><td>SSID ") +
+    String(ssid) +
+    F("</td></tr>"
+      "<tr><td>IP ") +
+    toStringIp(WiFi.localIP()) +
+    F("</td></tr>"
+      "</table>"
+      "\r\n<br />"
+      "<table><tr><th align='left'>WLAN list (refresh if any missing)</th></tr>");
   Serial.println("scan start");
   int n = WiFi.scanNetworks();
   Serial.println("scan done");
   if (n > 0) {
     for (int i = 0; i < n; i++) {
-      server.sendContent(String() + "\r\n<tr><td>SSID " + WiFi.SSID(i) + String((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " " : " *") + " (" + WiFi.RSSI(i) + ")</td></tr>");
+      Page += String(F("\r\n<tr><td>SSID ")) + WiFi.SSID(i) + ((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? F(" ") : F(" *")) + F(" (") + WiFi.RSSI(i) + F(")</td></tr>");
     }
   } else {
-    server.sendContent(String() + "<tr><td>No WLAN found</td></tr>");
+    Page += F("<tr><td>No WLAN found</td></tr>");
   }
-  server.sendContent(
-    "</table>"
-    "\r\n<br /><form method='POST' action='wifisave'><h4>Connect to network:</h4>"
-    "<input type='text' placeholder='network' name='n'/>"
-    "<br /><input type='password' placeholder='password' name='p'/>"
-    "<br /><input type='submit' value='Connect/Disconnect'/></form>"
-    "<p>You may want to <a href='/'>return to the home page</a>.</p>"
-    "</body></html>"
-  );
+  Page += F(
+            "</table>"
+            "\r\n<br /><form method='POST' action='wifisave'><h4>Connect to network:</h4>"
+            "<input type='text' placeholder='network' name='n'/>"
+            "<br /><input type='password' placeholder='password' name='p'/>"
+            "<br /><input type='submit' value='Connect/Disconnect'/></form>"
+            "<p>You may want to <a href='/'>return to the home page</a>.</p>"
+            "</body></html>");
+  server.send(200, "text/html", Page);
   server.client().stop(); // Stop is needed because we sent no content length
 }
 

  if (captivePortal()) { // If caprive portal redirect instead of displaying the error page.
    return;
  }
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";

  for (uint8_t i = 0; i < server.args(); i++) {
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
  server.sendHeader("Pragma", "no-cache");

  server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
  server.sendHeader("Pragma", "no-cache");
  server.sendHeader("Expires", "-1");

  String Page;
  Page += F(
            "<html><head></head><body>"
            "<h1>HELLO WORLD!!</h1>");
  if (server.client().localIP() == apIP) {
    Page += String(F("<p>You are connected through the soft AP: ")) + softAP_ssid + F("</p>");
  } else {
    Page += String(F("<p>You are connected through the wifi network: ")) + ssid + F("</p>");
  }
  Page += F(
            "<p>You may want to <a href='/wifi'>config the wifi connection</a>.</p>"
            "</body></html>");

  server.send(200, "text/html", Page);
}

/** Redirect to captive portal if we got a request for another domain. Return true in that case so the page handler do not try to handle the request again. */
