From d55db6d20903c17762203db9fba9a163848ad5aa Mon Sep 17 00:00:00 2001 From: Zakary Kamal Ismail Date: Sun, 11 Aug 2019 18:08:46 -0400 Subject: [PATCH 1/5] Add HTTP_HEAD to HTTPMethod --- libraries/ESP8266WebServer/src/ESP8266WebServer.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer.h b/libraries/ESP8266WebServer/src/ESP8266WebServer.h index 6eec446d90..9b7c2bbb32 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServer.h +++ b/libraries/ESP8266WebServer/src/ESP8266WebServer.h @@ -30,7 +30,7 @@ #include #include "detail/mimetable.h" -enum HTTPMethod { HTTP_ANY, HTTP_GET, HTTP_POST, HTTP_PUT, HTTP_PATCH, HTTP_DELETE, HTTP_OPTIONS }; +enum HTTPMethod { HTTP_ANY, HTTP_GET, HTTP_HEAD, HTTP_POST, HTTP_PUT, HTTP_PATCH, HTTP_DELETE, HTTP_OPTIONS }; enum HTTPUploadStatus { UPLOAD_FILE_START, UPLOAD_FILE_WRITE, UPLOAD_FILE_END, UPLOAD_FILE_ABORTED }; enum HTTPClientStatus { HC_NONE, HC_WAIT_READ, HC_WAIT_CLOSE }; @@ -194,10 +194,10 @@ class ESP8266WebServerTemplate std::unique_ptr _currentUpload; int _postArgsLen; RequestArgument* _postArgs; - + int _headerKeysCount; RequestArgument* _currentHeaders; - + size_t _contentLength; String _responseHeaders; From 7603c42480ff5cbd95cd6cf29d4ff51a46211940 Mon Sep 17 00:00:00 2001 From: Zakary Kamal Ismail Date: Sun, 11 Aug 2019 18:10:05 -0400 Subject: [PATCH 2/5] Parse the HTTP_HEAD variant of HTTPMethod from a method string --- libraries/ESP8266WebServer/src/Parsing-impl.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libraries/ESP8266WebServer/src/Parsing-impl.h b/libraries/ESP8266WebServer/src/Parsing-impl.h index 65ad38d62c..c6b8ea16e7 100644 --- a/libraries/ESP8266WebServer/src/Parsing-impl.h +++ b/libraries/ESP8266WebServer/src/Parsing-impl.h @@ -99,7 +99,9 @@ bool ESP8266WebServerTemplate::_parseRequest(ClientType& client) { _chunked = false; HTTPMethod method = HTTP_GET; - if (methodStr == F("POST")) { + if (methodStr == F("HEAD")) { + method = HTTP_HEAD; + } else if (methodStr == F("POST")) { method = HTTP_POST; } else if (methodStr == F("DELETE")) { method = HTTP_DELETE; From 46828b6efb098f1e307f4b82330f50357873987e Mon Sep 17 00:00:00 2001 From: Zakary Kamal Ismail Date: Mon, 12 Aug 2019 21:18:09 -0400 Subject: [PATCH 3/5] Add HTTP_HEAD to the ESP8266WebServer constants --- libraries/ESP8266WebServer/keywords.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/ESP8266WebServer/keywords.txt b/libraries/ESP8266WebServer/keywords.txt index e68547eb2b..73cba339c6 100644 --- a/libraries/ESP8266WebServer/keywords.txt +++ b/libraries/ESP8266WebServer/keywords.txt @@ -42,6 +42,7 @@ hostHeader KEYWORD2 ####################################### HTTP_GET LITERAL1 +HTTP_HEAD LITERAL1 HTTP_POST LITERAL1 HTTP_ANY LITERAL1 CONTENT_LENGTH_UNKNOWN LITERAL1 From e48788b798c3c72dcdc1dc4d6ca024152ecb4031 Mon Sep 17 00:00:00 2001 From: Zakary Kamal Ismail Date: Mon, 12 Aug 2019 21:22:02 -0400 Subject: [PATCH 4/5] Skip sending the content of the response if the HTTP method is HEAD method --- libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h b/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h index c5bcb59f75..fb03b3360f 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h +++ b/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h @@ -480,6 +480,7 @@ void ESP8266WebServerTemplate::send(int code, const String& content_ template void ESP8266WebServerTemplate::sendContent(const String& content) { + if (_currentMethod == HTTP_HEAD) return; const char * footer = "\r\n"; size_t len = content.length(); if(_chunked) { From a9cbcdac1f3d44498700d52c0b5c1373c12f742c Mon Sep 17 00:00:00 2001 From: Zakary Kamal Ismail Date: Mon, 12 Aug 2019 21:27:11 -0400 Subject: [PATCH 5/5] Convert the HTTP status code 418 to string This status code is an easter egg from the IETF and is described in [RFC2324](https://tools.ietf.org/html/rfc2324#section-2.3.2) --- libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h b/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h index fb03b3360f..3af7ca394a 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h +++ b/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h @@ -729,6 +729,7 @@ const String ESP8266WebServerTemplate::responseCodeToString(const in case 415: return F("Unsupported Media Type"); case 416: return F("Requested range not satisfiable"); case 417: return F("Expectation Failed"); + case 418: return F("I'm a teapot"); case 500: return F("Internal Server Error"); case 501: return F("Not Implemented"); case 502: return F("Bad Gateway");