diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer.h b/libraries/ESP8266WebServer/src/ESP8266WebServer.h index cde599c5e8..ae03812405 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServer.h +++ b/libraries/ESP8266WebServer/src/ESP8266WebServer.h @@ -151,10 +151,22 @@ class ESP8266WebServerTemplate 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 33895d8a7c..fb7bbb84d8 100644 --- a/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h +++ b/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h @@ -76,7 +76,7 @@ class StaticRequestHandler : public RequestHandler { } 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 @@ class StaticRequestHandler : public RequestHandler { if (_cache_header.length() != 0) server.sendHeader("Cache-Control", _cache_header); - server.streamFile(f, contentType); + server.streamFile(f, contentType, requestMethod); return true; }