From 6c2f8ce5c450d8dfe7976bbe72e3652c475e8ffa Mon Sep 17 00:00:00 2001 From: Michal Havranek Date: Wed, 1 Mar 2017 14:01:22 +0100 Subject: [PATCH] Added method HEAD, which allows to get just headers in the response from the server. So the server now accepts HEAD method and strips content ig the request method was HEAD. I added error code 418 I'm a teapot, which is in RFC and there is no need to ignore it. --- libraries/ESP8266WebServer/keywords.txt | 1 + libraries/ESP8266WebServer/src/ESP8266WebServer.cpp | 2 ++ libraries/ESP8266WebServer/src/ESP8266WebServer.h | 2 +- libraries/ESP8266WebServer/src/Parsing.cpp | 2 ++ 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/libraries/ESP8266WebServer/keywords.txt b/libraries/ESP8266WebServer/keywords.txt index 22e3d74e42..78af09566a 100644 --- a/libraries/ESP8266WebServer/keywords.txt +++ b/libraries/ESP8266WebServer/keywords.txt @@ -33,4 +33,5 @@ onNotFound KEYWORD2 HTTP_GET LITERAL1 HTTP_POST LITERAL1 +HTTP_HEAD LITERAL1 HTTP_ANY LITERAL1 diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp b/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp index bc41a5603b..524de1f21e 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp +++ b/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp @@ -325,6 +325,7 @@ void ESP8266WebServer::send(int code, const String& content_type, const String& } void ESP8266WebServer::sendContent(const String& content) { + if(_currentMethod == HTTP_HEAD){ return; } const char * footer = "\r\n"; size_t len = content.length(); if(_chunked) { @@ -514,6 +515,7 @@ String ESP8266WebServer::_responseCodeToString(int code) { 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"); diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer.h b/libraries/ESP8266WebServer/src/ESP8266WebServer.h index 8e0cf0cf4f..139e57d412 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServer.h +++ b/libraries/ESP8266WebServer/src/ESP8266WebServer.h @@ -27,7 +27,7 @@ #include #include -enum HTTPMethod { HTTP_ANY, HTTP_GET, HTTP_POST, HTTP_PUT, HTTP_PATCH, HTTP_DELETE, HTTP_OPTIONS }; +enum HTTPMethod { HTTP_ANY, HTTP_GET, HTTP_POST, HTTP_PUT, HTTP_PATCH, HTTP_DELETE, HTTP_OPTIONS, HTTP_HEAD }; enum HTTPUploadStatus { UPLOAD_FILE_START, UPLOAD_FILE_WRITE, UPLOAD_FILE_END, UPLOAD_FILE_ABORTED }; enum HTTPClientStatus { HC_NONE, HC_WAIT_READ, HC_WAIT_CLOSE }; diff --git a/libraries/ESP8266WebServer/src/Parsing.cpp b/libraries/ESP8266WebServer/src/Parsing.cpp index b013b8a0be..8744dc8d7e 100644 --- a/libraries/ESP8266WebServer/src/Parsing.cpp +++ b/libraries/ESP8266WebServer/src/Parsing.cpp @@ -108,6 +108,8 @@ bool ESP8266WebServer::_parseRequest(WiFiClient& client) { method = HTTP_PUT; } else if (methodStr == "PATCH") { method = HTTP_PATCH; + } else if (methodStr == "HEAD") { + method = HTTP_HEAD; } _currentMethod = method;