mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-19 23:22:16 +03:00
Add url redirect (#8970)
* added getAvailableVersion(), moved _httpClientTimeout and _followRedirects to protected, added enum HTTPUpdateError * auto numbering of HTTPUpdateError enum * added getAvailableVersion(), debug output current current Sketch MD5 * Revert "added getAvailableVersion(), debug output current current Sketch MD5" This reverts commit 60d2c7762e7fb1fed7fae37fa99be149e12f125c. * Revert "auto numbering of HTTPUpdateError enum" This reverts commit 61785b27da3f2d42f8f95316d78ce22e5b00103a. * Revert "added getAvailableVersion(), moved _httpClientTimeout and _followRedirects to protected, added enum HTTPUpdateError" This reverts commit cec84ed17ab149d3e48082293f9e2723246b7d0b. * add redirect function * enhanced redirect() by cache control and client stop * updated redirect() comment * replaced redirect() API calls in examples * server.client().stop() not needed, redirect() does this
This commit is contained in:
parent
2bb1b5a4d5
commit
877d44059e
@ -27,9 +27,7 @@ void handleRoot() {
|
|||||||
boolean captivePortal() {
|
boolean captivePortal() {
|
||||||
if (!isIp(server.hostHeader()) && server.hostHeader() != (String(myHostname) + ".local")) {
|
if (!isIp(server.hostHeader()) && server.hostHeader() != (String(myHostname) + ".local")) {
|
||||||
Serial.println("Request redirected to captive portal");
|
Serial.println("Request redirected to captive portal");
|
||||||
server.sendHeader("Location", String("http://") + toStringIp(server.client().localIP()), true);
|
server.redirect(String("http://") + toStringIp(server.client().localIP()));
|
||||||
server.send(302, "text/plain", ""); // Empty content inhibits Content-length header so we have to close the socket ourselves.
|
|
||||||
server.client().stop(); // Stop is needed because we sent no content length
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -91,12 +89,7 @@ void handleWifiSave() {
|
|||||||
Serial.println("wifi save");
|
Serial.println("wifi save");
|
||||||
server.arg("n").toCharArray(ssid, sizeof(ssid) - 1);
|
server.arg("n").toCharArray(ssid, sizeof(ssid) - 1);
|
||||||
server.arg("p").toCharArray(password, sizeof(password) - 1);
|
server.arg("p").toCharArray(password, sizeof(password) - 1);
|
||||||
server.sendHeader("Location", "wifi", true);
|
server.redirect("wifi");
|
||||||
server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
|
|
||||||
server.sendHeader("Pragma", "no-cache");
|
|
||||||
server.sendHeader("Expires", "-1");
|
|
||||||
server.send(302, "text/plain", ""); // Empty content inhibits Content-length header so we have to close the socket ourselves.
|
|
||||||
server.client().stop(); // Stop is needed because we sent no content length
|
|
||||||
saveCredentials();
|
saveCredentials();
|
||||||
connect = strlen(ssid) > 0; // Request WLAN connect with new credentials if there is a SSID
|
connect = strlen(ssid) > 0; // Request WLAN connect with new credentials if there is a SSID
|
||||||
}
|
}
|
||||||
|
@ -36,13 +36,11 @@ void sendPortalRedirect(String path, String targetName) {
|
|||||||
If the "Location" header element works the HTML stuff is never seen.
|
If the "Location" header element works the HTML stuff is never seen.
|
||||||
*/
|
*/
|
||||||
// https://tools.ietf.org/html/rfc7231#section-6.4.3
|
// https://tools.ietf.org/html/rfc7231#section-6.4.3
|
||||||
server.sendHeader("Location", path, true);
|
|
||||||
addNoCacheHeader();
|
|
||||||
String reply = FPSTR(portalRedirectHTML);
|
String reply = FPSTR(portalRedirectHTML);
|
||||||
reply.reserve(reply.length() + 2 * path.length() + 80);
|
reply.reserve(reply.length() + 2 * path.length() + 80);
|
||||||
reply.replace("{t}", targetName);
|
reply.replace("{t}", targetName);
|
||||||
reply.replace("{1}", path);
|
reply.replace("{1}", path);
|
||||||
server.send(302, "text/html", reply);
|
server.redirect(path, reply);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // LWIP_FEATURES && !LWIP_IPV6
|
#endif // LWIP_FEATURES && !LWIP_IPV6
|
||||||
|
@ -43,8 +43,7 @@ void handleRedirect() {
|
|||||||
|
|
||||||
if (!LittleFS.exists(url)) { url = "/$update.htm"; }
|
if (!LittleFS.exists(url)) { url = "/$update.htm"; }
|
||||||
|
|
||||||
server.sendHeader("Location", url, true);
|
server.redirect(url);
|
||||||
server.send(302);
|
|
||||||
} // handleRedirect()
|
} // handleRedirect()
|
||||||
|
|
||||||
|
|
||||||
|
@ -207,6 +207,30 @@ public:
|
|||||||
sendContent(emptyString);
|
sendContent(emptyString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Redirect to another URL, e.g.
|
||||||
|
* webserver.on("/index.html", HTTP_GET, []() { webserver.redirect("/"); });
|
||||||
|
* There are 3 points of redirection here:
|
||||||
|
* 1) "Location" element in the header
|
||||||
|
* 2) Disable client caching
|
||||||
|
* 3) HTML "content" element to redirect
|
||||||
|
* If the "Location" header element works the HTML content is never seen.
|
||||||
|
* https://tools.ietf.org/html/rfc7231#section-6.4.3
|
||||||
|
* @param url URL to redirect to
|
||||||
|
* @param content Optional redirect content
|
||||||
|
*/
|
||||||
|
void redirect(const String& url, const String& content = emptyString) {
|
||||||
|
sendHeader(F("Location"), url, true);
|
||||||
|
sendHeader(F("Cache-Control"), F("no-cache, no-store, must-revalidate"));
|
||||||
|
sendHeader(F("Pragma"), F("no-cache"));
|
||||||
|
sendHeader(F("Expires"), F("-1"));
|
||||||
|
send(302, F("text/html"), content); // send 302: "Found"
|
||||||
|
if (content.isEmpty()) {
|
||||||
|
// Empty content inhibits Content-length header so we have to close the socket ourselves.
|
||||||
|
client().stop(); // Stop is needed because we sent no content length
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Whether other requests should be accepted from the client on the
|
// Whether other requests should be accepted from the client on the
|
||||||
// same socket after a response is sent.
|
// same socket after a response is sent.
|
||||||
// This will automatically configure the "Connection" header of the response.
|
// This will automatically configure the "Connection" header of the response.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user