http response header tag 'ETag' needs quotes.
As per RFC7232 ( https://www.rfc-editor.org/rfc/rfc7232#section-2.3 ) and MDN docs ( https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag#directives ) the value of the ETag in the http header response has to be between quotes.
This commit is contained in:
parent
6f09011961
commit
c1f0b9ea6f
@ -18,6 +18,10 @@ extern const uint8_t file_zones_json_end[] asm("_binary_webapp_dist_zones_json_g
|
|||||||
extern const uint8_t file_app_js_end[] asm("_binary_webapp_dist_js_app_js_gz_end");
|
extern const uint8_t file_app_js_end[] asm("_binary_webapp_dist_js_app_js_gz_end");
|
||||||
extern const uint8_t file_site_webmanifest_end[] asm("_binary_webapp_dist_site_webmanifest_end");
|
extern const uint8_t file_site_webmanifest_end[] asm("_binary_webapp_dist_site_webmanifest_end");
|
||||||
|
|
||||||
|
#ifdef AUTO_GIT_HASH
|
||||||
|
#define ETAG_HTTP_HEADER_VAL "\"" AUTO_GIT_HASH "\"" // ETag value must be between quotes
|
||||||
|
#endif
|
||||||
|
|
||||||
void WebApiWebappClass::init(AsyncWebServer& server)
|
void WebApiWebappClass::init(AsyncWebServer& server)
|
||||||
{
|
{
|
||||||
_server = &server;
|
_server = &server;
|
||||||
@ -62,12 +66,12 @@ void WebApiWebappClass::init(AsyncWebServer& server)
|
|||||||
});
|
});
|
||||||
|
|
||||||
_server->on("/js/app.js", HTTP_GET, [](AsyncWebServerRequest* request) {
|
_server->on("/js/app.js", HTTP_GET, [](AsyncWebServerRequest* request) {
|
||||||
#ifdef AUTO_GIT_HASH
|
#ifdef ETAG_HTTP_HEADER_VAL
|
||||||
// check client If-None-Match header vs ETag/AUTO_GIT_HASH
|
// check client If-None-Match header vs ETag/AUTO_GIT_HASH
|
||||||
bool eTagMatch = false;
|
bool eTagMatch = false;
|
||||||
if (request->hasHeader("If-None-Match")) {
|
if (request->hasHeader("If-None-Match")) {
|
||||||
const AsyncWebHeader* h = request->getHeader("If-None-Match");
|
const AsyncWebHeader* h = request->getHeader("If-None-Match");
|
||||||
if (strncmp(AUTO_GIT_HASH, h->value().c_str(), strlen(AUTO_GIT_HASH)) == 0) {
|
if (strncmp(ETAG_HTTP_HEADER_VAL, h->value().c_str(), strlen(ETAG_HTTP_HEADER_VAL)) == 0) {
|
||||||
eTagMatch = true;
|
eTagMatch = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -82,7 +86,7 @@ void WebApiWebappClass::init(AsyncWebServer& server)
|
|||||||
}
|
}
|
||||||
// HTTP requires cache headers in 200 and 304 to be identical
|
// HTTP requires cache headers in 200 and 304 to be identical
|
||||||
response->addHeader("Cache-Control", "public, must-revalidate");
|
response->addHeader("Cache-Control", "public, must-revalidate");
|
||||||
response->addHeader("ETag", AUTO_GIT_HASH);
|
response->addHeader("ETag", ETAG_HTTP_HEADER_VAL);
|
||||||
#else
|
#else
|
||||||
AsyncWebServerResponse* response = request->beginResponse_P(200, "text/javascript", file_app_js_start, file_app_js_end - file_app_js_start);
|
AsyncWebServerResponse* response = request->beginResponse_P(200, "text/javascript", file_app_js_start, file_app_js_end - file_app_js_start);
|
||||||
response->addHeader("Content-Encoding", "gzip");
|
response->addHeader("Content-Encoding", "gzip");
|
||||||
@ -93,4 +97,4 @@ void WebApiWebappClass::init(AsyncWebServer& server)
|
|||||||
|
|
||||||
void WebApiWebappClass::loop()
|
void WebApiWebappClass::loop()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user