diff options
-rw-r--r-- | doc/config/conf.d/mime.conf | 3 | ||||
-rwxr-xr-x | doc/scripts/create-mime.conf.pl | 4 | ||||
-rw-r--r-- | src/configfile.c | 13 | ||||
-rw-r--r-- | src/http-header-glue.c | 10 | ||||
-rw-r--r-- | src/mod_deflate.c | 3 | ||||
-rw-r--r-- | src/mod_expire.c | 14 |
6 files changed, 44 insertions, 3 deletions
diff --git a/doc/config/conf.d/mime.conf b/doc/config/conf.d/mime.conf index 3e0abef2..6daffd6e 100644 --- a/doc/config/conf.d/mime.conf +++ b/doc/config/conf.d/mime.conf @@ -113,7 +113,6 @@ mimetype.assign = ( ".inkml" => "application/inkml+xml", ".ipfix" => "application/ipfix", ".its" => "application/its+xml", - ".js" => "application/javascript", ".jrd" => "application/jrd+json", ".json" => "application/json", ".json-patch" => "application/json-patch+json", @@ -1223,6 +1222,8 @@ mimetype.assign = ( ".htm" => "text/html", ".html" => "text/html", ".sandboxed" => "text/html-sandboxed", + ".js" => "text/javascript", + ".mjs" => "text/javascript", ".cnd" => "text/jcr-cnd", ".markdown" => "text/markdown;charset=utf-8", ".md" => "text/markdown;charset=utf-8", diff --git a/doc/scripts/create-mime.conf.pl b/doc/scripts/create-mime.conf.pl index d38e996d..72a0fcf7 100755 --- a/doc/scripts/create-mime.conf.pl +++ b/doc/scripts/create-mime.conf.pl @@ -171,6 +171,10 @@ while (<MIMETYPES>) { # from http://www.iana.org/assignments/media-types/media-types.xhtml add(".dtd", "application/xml-dtd"); +# RFC 9239 +add(".js", "text/javascript"); +add(".mjs", "text/javascript"); + # other useful mappings my %useful = ( ".tar.gz" => "application/x-gtar-compressed", diff --git a/src/configfile.c b/src/configfile.c index 8d9e4318..1548411e 100644 --- a/src/configfile.c +++ b/src/configfile.c @@ -1129,7 +1129,18 @@ static int config_insert(server *srv) { break; } case 19:/* connection.kbytes-per-second */ - case 20:/* mimetype.assign */ + break; + case 20:{/* mimetype.assign */ + /* translate "application/javascript" to "text/javascript" */ + data_string * const ds = (data_string *) + array_get_data_unset(cpv->v.a, CONST_STR_LEN(".js")); + if (NULL != ds /*(note: this does not catch w/ ";charset=...")*/ + && buffer_eq_slen(&ds->value, + CONST_STR_LEN("application/javascript"))) + buffer_copy_string_len(&ds->value, + CONST_STR_LEN("text/javascript")); + break; + } case 21:/* mimetype.use-xattr */ case 22:/* etag.use-inode */ case 23:/* etag.use-mtime */ diff --git a/src/http-header-glue.c b/src/http-header-glue.c index 63e67dfd..d873c2ff 100644 --- a/src/http-header-glue.c +++ b/src/http-header-glue.c @@ -962,6 +962,16 @@ static int http_response_process_headers(request_st * const restrict r, http_res r->keep_alive = 0; if (r->http_version >= HTTP_VERSION_2) continue; break; + case HTTP_HEADER_CONTENT_TYPE: + if (end - value >= 22 /*(prefix match probably good enough)*/ + && 0 == memcmp(value, "application/javascript", 22)) { + /* value = "text/javascript"; *//*(loses ";charset=...")*/ + /* *(const char **)&end = value+sizeof("text/javascript")-1; */ + /*(convert "application/javascript" to "text/javascript")*/ + value += 7; /*(step over "applica", leaving "tion")*/ + memcpy(s+(value-s)+1, "ext", 3); + } + break; case HTTP_HEADER_CONTENT_LENGTH: if (*value == '+') ++value; if (!r->resp_decode_chunked diff --git a/src/mod_deflate.c b/src/mod_deflate.c index c55d4a98..64120eb9 100644 --- a/src/mod_deflate.c +++ b/src/mod_deflate.c @@ -751,6 +751,9 @@ SETDEFAULTS_FUNC(mod_deflate_set_defaults) { size_t len = buffer_clen(mimetype); if (len > 2 && mimetype->ptr[len-1] == '*') buffer_truncate(mimetype, len-1); + if (buffer_eq_slen(mimetype, + CONST_STR_LEN("application/javascript"))) + buffer_copy_string_len(mimetype, "text/javascript", 15); } if (0 == cpv->v.a->used) cpv->v.a = NULL; break; diff --git a/src/mod_expire.c b/src/mod_expire.c index 2e6424fc..7508ebbe 100644 --- a/src/mod_expire.c +++ b/src/mod_expire.c @@ -208,9 +208,21 @@ SETDEFAULTS_FUNC(mod_expire_set_defaults) { buffer_truncate(&ds->key, klen-1); } a = cpv->v.a; + if (!array_get_element_klen(a, CONST_STR_LEN("text/javascript")) + && !array_get_element_klen(a, CONST_STR_LEN("text/"))) { + array *m; + *(const array **)&m = a; + data_unset * const du = + array_extract_element_klen(m, + CONST_STR_LEN("application/javascript")); + if (du) { + buffer_copy_string_len(&du->key, "text/javascript", 15); + array_replace(m, du); + } + } break; default:/* should not happen */ - break; + continue; } /* parse array values into structured data */ |