Fix mime-type detection for HTTP server (#18370)
Bypass the unstable behavior of Golang's mime.TypeByExtensiontokarchuk/v1.17
parent
35fdefc1ff
commit
87141b908d
@ -0,0 +1,41 @@ |
||||
// Copyright 2022 The Gitea Authors. All rights reserved.
|
||||
// Use of this source code is governed by a MIT-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package public |
||||
|
||||
import "strings" |
||||
|
||||
// wellKnownMimeTypesLower comes from Golang's builtin mime package: `builtinTypesLower`, see the comment of detectWellKnownMimeType
|
||||
var wellKnownMimeTypesLower = map[string]string{ |
||||
".avif": "image/avif", |
||||
".css": "text/css; charset=utf-8", |
||||
".gif": "image/gif", |
||||
".htm": "text/html; charset=utf-8", |
||||
".html": "text/html; charset=utf-8", |
||||
".jpeg": "image/jpeg", |
||||
".jpg": "image/jpeg", |
||||
".js": "text/javascript; charset=utf-8", |
||||
".json": "application/json", |
||||
".mjs": "text/javascript; charset=utf-8", |
||||
".pdf": "application/pdf", |
||||
".png": "image/png", |
||||
".svg": "image/svg+xml", |
||||
".wasm": "application/wasm", |
||||
".webp": "image/webp", |
||||
".xml": "text/xml; charset=utf-8", |
||||
|
||||
// well, there are some types missing from the builtin list
|
||||
".txt": "text/plain; charset=utf-8", |
||||
} |
||||
|
||||
// detectWellKnownMimeType will return the mime-type for a well-known file ext name
|
||||
// The purpose of this function is to bypass the unstable behavior of Golang's mime.TypeByExtension
|
||||
// mime.TypeByExtension would use OS's mime-type config to overwrite the well-known types (see its document).
|
||||
// If the user's OS has incorrect mime-type config, it would make Gitea can not respond a correct Content-Type to browsers.
|
||||
// For example, if Gitea returns `text/plain` for a `.js` file, the browser couldn't run the JS due to security reasons.
|
||||
// detectWellKnownMimeType makes the Content-Type for well-known files stable.
|
||||
func detectWellKnownMimeType(ext string) string { |
||||
ext = strings.ToLower(ext) |
||||
return wellKnownMimeTypesLower[ext] |
||||
} |
Loading…
Reference in new issue