提供CSS时,在Golang中出现MIME类型(“文本/纯文本”)错误

时间:2019-02-22 21:35:01

标签: go

我正在构建我的第一个Go Web项目,并且在加载页面时在浏览器控制台上收到此错误

Refused to apply style from 'http://localhost:8080/static/css/processor-auth.css' because its MIME type ('text/plain') is not a supported stylesheet MIME type, and strict MIME checking is enabled.

我不确定自己在做什么错,因为我已经添加了此代码来加载静态文件

http.Handle("/static/",http.StripPrefix("/static/",http.FileServer(http.Dir("static"))))

这是我的main.go文件的样子:

 package main

import(
    "net/http"
    "os"
    "html/template"

    "github.com/julienschmidt/httprouter"
)


// Auth struct handler
type auth struct{}

func (auth *auth) ServeHTTP(w http.ResponseWriter, r *http.Request){
    wd,_:= os.Getwd()
    t := template.Must(template.ParseFiles(wd+"/templates/processor/auth.html"))
    err:=t.Execute(w,nil)

    if err !=nil{
        http.Error(w,"Could not execute template",500)
    }

}


func main(){

    router:= httprouter.New()
    // set the static files
    http.Handle("/static/",http.StripPrefix("/static/",http.FileServer(http.Dir("static"))))

    router.Handler("GET","/auth",&auth{})

    server := http.Server{
        Addr:"127.0.0.1:8080",
        Handler:router,
    }

    server.ListenAndServe()
}

Folder Structure

编辑:解决了问题

由于我使用httprouter作为多路复用器,所以无法使用

http.Handle("/static/",http.StripPrefix("/static/",http.FileServer(http.Dir("static"))))

我必须更新到httprouter的ServeFiles函数,并将代码更新为 router.ServeFiles("/static/*filepath",http.Dir("static"))

2 个答案:

答案 0 :(得分:0)

我正在使用Windows 10计算机,并且在javascript文件上遇到了相同的问题 我进入了注册表Computer \ HKEY_CLASSES_ROOT.js的“内容类型”,并将其从“文本/纯文本”更改为“应用程序/ javascript”,并进行了修复

答案 1 :(得分:0)

为什么会这样?

出现此错误是因为Go正在自动检测文件的内容类型。为了进行自动检测,它使用了一个映射,该映射指向文件扩展名(例如.js)-> MIME类型(例如文本/纯文本)。要获取此映射,它将从本地计算机读取它。因此,如果您的本地计算机在其.css文件的注册表中(或与您的操作系统等效的)注册表中的值不正确,并且您使用的代码会自动检测所提供文件的MIME类型,那么就会发生这种情况。

什么是注册表设置不正确?

重新安装或卸载Visual Studio时遇到错误的注册表值。

Windows Fix

您需要使用regedit编辑注册表项,以使“ Content Type”注册表项指向正确的值。您可以在2个地方找到扩展键:

HKEY_CLASSES_ROOT包含一个列表。就我而言,我在该列表中查找了.js并将其值从text / plain更改为application / javascript。在原始海报的位置,该错误看起来像是.css中的错误,因此您需要将HKEY_CLASSES_ROOT \ .css键“内容类型”设置为text / css。

HKEY_LOCAL_MACHINE \ SOFTWARE \ CLASSES也包含一个列表。您应该以相同的方式更新它,使其与HKEY_CLASSES_ROOT匹配。就我而言,这已经正确设置为application / javascript,因此我认为它不是Go正在读取的第一个注册表值。

参考文献

发行:https://github.com/golang/go/issues/32350