1
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
module dist-server
|
||||
|
||||
go 1.24
|
||||
@@ -0,0 +1,69 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
defaultPort = "80"
|
||||
webRoot = "/www"
|
||||
indexName = "index.html"
|
||||
)
|
||||
|
||||
func main() {
|
||||
port := strings.TrimSpace(os.Getenv("PORT"))
|
||||
if port == "" {
|
||||
port = defaultPort
|
||||
}
|
||||
|
||||
server := &http.Server{
|
||||
Addr: ":" + port,
|
||||
Handler: http.HandlerFunc(serve),
|
||||
}
|
||||
|
||||
log.Printf("dist server listening on :%s", port)
|
||||
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func serve(w http.ResponseWriter, r *http.Request) {
|
||||
requestPath := strings.TrimPrefix(filepath.Clean("/"+r.URL.Path), "/")
|
||||
if requestPath == "." || requestPath == "" {
|
||||
serveIndex(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
fullPath := filepath.Join(webRoot, filepath.FromSlash(requestPath))
|
||||
if info, err := os.Stat(fullPath); err == nil && !info.IsDir() {
|
||||
applyAssetCacheHeaders(w, requestPath)
|
||||
http.ServeFile(w, r, fullPath)
|
||||
return
|
||||
}
|
||||
|
||||
serveIndex(w, r)
|
||||
}
|
||||
|
||||
func serveIndex(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Cache-Control", "no-cache")
|
||||
w.Header().Set("Pragma", "no-cache")
|
||||
w.Header().Set("Expires", "0")
|
||||
http.ServeFile(w, r, filepath.Join(webRoot, indexName))
|
||||
}
|
||||
|
||||
func applyAssetCacheHeaders(w http.ResponseWriter, requestPath string) {
|
||||
if strings.EqualFold(requestPath, indexName) {
|
||||
w.Header().Set("Cache-Control", "no-cache")
|
||||
w.Header().Set("Pragma", "no-cache")
|
||||
w.Header().Set("Expires", "0")
|
||||
return
|
||||
}
|
||||
|
||||
if strings.HasPrefix(requestPath, "static/") {
|
||||
w.Header().Set("Cache-Control", "public, max-age=31536000, immutable")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user