golang将资源解释为样式表,但使用MIME类型传输text/plain
问题描述:
我在使用golang开发我的网页时遇到问题。 服务器文件(main.go):golang将资源解释为样式表,但使用MIME类型传输text/plain
package main
import (
"net/http"
"io/ioutil"
"strings"
"log"
)
type MyHandler struct {
}
func (this *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
path := r.URL.Path[1:]
log.Println(path)
data, err := ioutil.ReadFile(string(path))
if err == nil {
var contentType string
if strings.HasSuffix(path, ".css") {
contentType = "text/css"
} else if strings.HasSuffix(path, ".html") {
contentType = "text/html"
} else if strings.HasSuffix(path, ".js") {
contentType = "application/javascript"
} else if strings.HasSuffix(path, ".png") {
contentType = "image/png"
} else if strings.HasSuffix(path, ".svg") {
contentType = "image/svg+xml"
} else {
contentType = "text/plain"
}
w.Header().Add("Content Type", contentType)
w.Write(data)
} else {
w.WriteHeader(404)
w.Write([]byte("404 Mi amigo - " + http.StatusText(404)))
}
}
func main() {
http.Handle("/", new(MyHandler))
http.ListenAndServe(":8080", nil)
}
但是当我键入http://localhost:8080/templates/home.html 这是我看到see screenshot 为什么我的页面没有加载正确的?我的css在哪里?为什么是错误“资源解释为样式表,但传输与MIME类型文本/纯:”出现,而我有我的内容在main.go类型处理??
答
您的基本问题很简单:您需要Content-Type
而不是Content Type
。
但是,有一种更好的方法可以将MIME类型与Go中的文件扩展名匹配,特别是mime
标准库软件包。我强烈建议你使用它。
请点击上面的链接查看我打开我的网页时看到的内容^ –
另请参阅https://github.com/golang/go/wiki/HttpStaticFiles –