I am using vite as build tool for my react app and golang as backend.
I built the app for production and host the app on my http server.
my directory structure:
server |- dist | | index.html | |- assets | | index.js | | index.css | main.go
To host my files the code looks like (inside main.go)
fs := http.FileServer(http.Dir("./dist"))
http.Handle("/", fs)
in index.html
<script type="module" crossorigin src="/assets/index.fd457ca0.js"></script> <link rel="stylesheet" href="/assets/index.bdcfd918.css">
The code did actually send correct files but with wrong headers.
Advertisement
Answer
So I had to write my own file server to set the headers manually like:
contentTypeMap := map[string]string{
".html": "text/html",
".css": "text/css",
".js": "application/javascript",
}
filepath.Walk("./dist", func(path string, info os.FileInfo, err error) error {
if err != nil {
log.Fatalf(err.Error())
}
if info.IsDir() {
return err
}
dirPath := filepath.ToSlash(filepath.Dir(path))
contentType := contentTypeMap[filepath.Ext(info.Name())]
handlePath := "/" + strings.Join(strings.Split(dirPath, "/")[1:], "/")
hf := func(w http.ResponseWriter, r *http.Request) {
w.Header().Add("Content-Type", contentType) // <---- key part
http.ServeFile(w, r, path)
}
if handlePath != "/" {
handlePath += "/" + info.Name()
}
mainRouter.HandleFunc(handlePath, hf)
return nil
})
(please optimize if the code is bad, I made the solution myself and I tried so many stuff to fit my needs)
Now with that I recevied the correct files with correct headers.
And I couldn’t find any solutions to work with custom headers using http.FileServer in http package. And please provide a easy solution if it exists.

