2

我正在运行一个基本http.FileServer的静态站点服务,我遇到了一个问题,即对不存在的 css 文件的请求因 MIME 类型错误而被取消:

Refused to apply style from 'http://localhost:8080/assets/main.css' because its MIME type ('text/plain')

理想情况下,我更希望用 404 错误来处理它,因为它实际上应该是这样的。我可以尝试任何可能的解决方法吗?

4

1 回答 1

3

net/http源代码(fs.go):

// toHTTPError returns a non-specific HTTP error message and status code
// for a given non-nil error value. It's important that toHTTPError does not
// actually return err.Error(), since msg and httpStatus are returned to users,
// and historically Go's ServeContent always returned just "404 Not Found" for
// all errors. We don't want to start leaking information in error messages.
func toHTTPError(err error) (msg string, httpStatus int) {
    if os.IsNotExist(err) {
        return "404 page not found", StatusNotFound
    }
    if os.IsPermission(err) {
        return "403 Forbidden", StatusForbidden
    }
    // Default:
    return "500 Internal Server Error", StatusInternalServerError
}

文件服务器返回 200 和 404 错误的纯文本文件。浏览器尝试将此纯文本错误页面解释为 CSS 文件,并引发错误。

这种返回纯文本文件的行为不能被FileServer().

正如已经指出的那样,这并不是net/http.

如果由于某种原因您不希望这种行为,您可以探索为 404 响应创建自定义处理程序,这已在此线程中进行了探索。您还可以使用像 Gorilla 这样的路由库,它对未找到的页面具有可覆盖的行为

于 2020-07-02T18:44:34.003 回答