// 靜態WEB服務:func (this *HttpHandler) serveStatic(w http.ResponseWriter, r *http.Request) bool { path := r.URL.Path if path == `` || path == `/` { return false } //判斷是否支援GZIP壓縮; //測試表明瀏覽器第一個都是gzip; 不排除特殊的,暫時不考慮; isGzip := Config.Http.Gzip && strings.HasPrefix(r.Header.Get("Accept-Encoding"), "gzip") w.Header().Set("Content-Type", "text/html;charset=utf-8") // 以字首 if strings.HasPrefix(path, Config.Http.StaticDir) { // 獲取字尾 strs := strings.Split(path, `.`) if len(strs) == 1 { return false } //"正則替換下OK" if isGzip && regexp.MustCompile(`(^|,)`+strs[1]+`[,$]`).MatchString("html,htm,txt,js,json,xml") { // 讀取檔案 data, err := ioutil.ReadFile(`.` + path) if err != nil { http.NotFoundHandler().ServeHTTP(w, r) // 這裡需要日誌系統; return true } //GZIP壓縮; if tp, ok := ContentType[strs[1]]; /*vars*/ ok { w.Header().Set("Content-Type", tp) } else { //暫時 text/html報頭 w.Header().Set("Content-Type", "text/html;charset=utf-8") } // 這裡也要設定的, 否則GOLANG根據檔案頭來決定返回什麼格式;而這種,即使是圖片,也會是text返回 w.Header().Set("Content-Encoding", "gzip") w.Header().Set("Vary", "Content-Encoding") wbuf := &bytes.Buffer{} g, _ := gzip.NewWriterLevel(wbuf, 9) g.Write(data) g.Close() //Print(buf) w.Write(wbuf.Bytes()) return true } http.ServeFile(w, r, "."+path) return true } // 根路徑; || path == "/wpad.dat" 我發現會訪問這個檔案: 以後研究這個問題 if path == "/favicon.ico" || path == "robots.txt" || path == "/wpad.dat" { http.ServeFile(w, r, "."+path) return true } return false // 日誌系統呢? 靜態檔案就不要日誌系統吧,沒有必要;}
// 靜態WEB服務:func (this *HttpHandler) serveStatic(w http.ResponseWriter, r *http.Request) bool { path := r.URL.Path if path == `` || path == `/` { return false } //判斷是否支援GZIP壓縮; //測試表明瀏覽器第一個都是gzip; 不排除特殊的,暫時不考慮; isGzip := Config.Http.Gzip && strings.HasPrefix(r.Header.Get("Accept-Encoding"), "gzip") w.Header().Set("Content-Type", "text/html;charset=utf-8") // 以字首 if strings.HasPrefix(path, Config.Http.StaticDir) { // 獲取字尾 strs := strings.Split(path, `.`) if len(strs) == 1 { return false } //"正則替換下OK" if isGzip && regexp.MustCompile(`(^|,)`+strs[1]+`[,$]`).MatchString("html,htm,txt,js,json,xml") { // 讀取檔案 data, err := ioutil.ReadFile(`.` + path) if err != nil { http.NotFoundHandler().ServeHTTP(w, r) // 這裡需要日誌系統; return true } //GZIP壓縮; if tp, ok := ContentType[strs[1]]; /*vars*/ ok { w.Header().Set("Content-Type", tp) } else { //暫時 text/html報頭 w.Header().Set("Content-Type", "text/html;charset=utf-8") } // 這裡也要設定的, 否則GOLANG根據檔案頭來決定返回什麼格式;而這種,即使是圖片,也會是text返回 w.Header().Set("Content-Encoding", "gzip") w.Header().Set("Vary", "Content-Encoding") wbuf := &bytes.Buffer{} g, _ := gzip.NewWriterLevel(wbuf, 9) g.Write(data) g.Close() //Print(buf) w.Write(wbuf.Bytes()) return true } http.ServeFile(w, r, "."+path) return true } // 根路徑; || path == "/wpad.dat" 我發現會訪問這個檔案: 以後研究這個問題 if path == "/favicon.ico" || path == "robots.txt" || path == "/wpad.dat" { http.ServeFile(w, r, "."+path) return true } return false // 日誌系統呢? 靜態檔案就不要日誌系統吧,沒有必要;}