From a738884387bbdb7cecfa30fdbebe6a162d17bc76 Mon Sep 17 00:00:00 2001 From: Matthias Hertel Date: Wed, 4 Dec 2019 18:23:25 +0100 Subject: [PATCH] Handle HEAD requests for static files correctly (#6837) * Handle HEAD requests for static files correctly * Handle HEAD requests for static files correctly --- libraries/ESP8266WebServer/src/ESP8266WebServer.h | 14 +++++++++++++- .../src/detail/RequestHandlersImpl.h | 4 ++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer.h b/libraries/ESP8266WebServer/src/ESP8266WebServer.h index cde599c5e..ae0381240 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServer.h +++ b/libraries/ESP8266WebServer/src/ESP8266WebServer.h @@ -151,10 +151,22 @@ public: static String urlDecode(const String& text); + // Handle a GET request by sending a response header and stream file content to response body template size_t streamFile(T &file, const String& contentType) { + return streamFile(file, contentType, HTTP_GET); + } + + // Implement GET and HEAD requests for files. + // Stream body on HTTP_GET but not on HTTP_HEAD requests. + template + size_t streamFile(T &file, const String& contentType, HTTPMethod requestMethod) { + size_t contentLength = 0; _streamFileCore(file.size(), file.name(), contentType); - return _currentClient.write(file); + if (requestMethod == HTTP_GET) { + contentLength = _currentClient.write(file); + } + return contentLength; } static const String responseCodeToString(const int code); diff --git a/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h b/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h index 33895d8a7..fb7bbb84d 100644 --- a/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h +++ b/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h @@ -76,7 +76,7 @@ public: } bool canHandle(HTTPMethod requestMethod, String requestUri) override { - if (requestMethod != HTTP_GET) + if ((requestMethod != HTTP_GET) && (requestMethod != HTTP_HEAD)) return false; if ((_isFile && requestUri != _uri) || !requestUri.startsWith(_uri)) @@ -125,7 +125,7 @@ public: if (_cache_header.length() != 0) server.sendHeader("Cache-Control", _cache_header); - server.streamFile(f, contentType); + server.streamFile(f, contentType, requestMethod); return true; }