Selaa lähdekoodia

更新 writeViaHeader 和 writeHuanProxyHeader 函数参数

修改了 `writeViaHeader` 和 `writeHuanProxyHeader` 函数,添加了 `http.ResponseWriter` 参数以支持在响应头中设置信息。同时将一些 HTTP 响应状态码相关的函数移动到了新的 `abort.go` 文件中,并在配置文件中增加了 `NotAbort` 选项。
SongZihuan 3 kuukautta sitten
vanhempi
sitoutus
f475700df6
6 muutettua tiedostoa jossa 48 lisäystä ja 43 poistoa
  1. 0 2
      go.mod
  2. 3 0
      src/config/globalconfig.go
  3. 27 0
      src/server/abort.go
  4. 1 1
      src/server/api.go
  5. 16 39
      src/server/respose.go
  6. 1 1
      src/server/serverhttp.go

+ 0 - 2
go.mod

@@ -2,8 +2,6 @@ module github.com/SongZihuan/huan-proxy
 
 go 1.22.0
 
-toolchain go1.23.2
-
 require (
 	github.com/fsnotify/fsnotify v1.8.0
 	github.com/gabriel-vasile/mimetype v1.4.7

+ 3 - 0
src/config/globalconfig.go

@@ -29,6 +29,7 @@ type GlobalConfig struct {
 	Mode     string           `yaml:"mode"`
 	LogLevel string           `yaml:"loglevel"`
 	LogTag   utils.StringBool `yaml:"logtag"`
+	NotAbort utils.StringBool `yaml:"notabort"`
 }
 
 func (g *GlobalConfig) SetDefault() {
@@ -54,6 +55,8 @@ func (g *GlobalConfig) SetDefault() {
 		g.LogTag.SetDefaultDisable()
 	}
 
+	g.NotAbort.SetDefaultDisable()
+
 	return
 }
 

+ 27 - 0
src/server/abort.go

@@ -0,0 +1,27 @@
+package server
+
+import "net/http"
+
+func (s *HuanProxyServer) abortForbidden(w http.ResponseWriter) {
+	w.WriteHeader(http.StatusForbidden)
+}
+
+func (s *HuanProxyServer) abortNotFound(w http.ResponseWriter) {
+	w.WriteHeader(http.StatusNotFound)
+}
+
+func (s *HuanProxyServer) abortNotAcceptable(w http.ResponseWriter) {
+	w.WriteHeader(http.StatusNotAcceptable)
+}
+
+func (s *HuanProxyServer) abortMethodNotAllowed(w http.ResponseWriter) {
+	w.WriteHeader(http.StatusMethodNotAllowed)
+}
+
+func (s *HuanProxyServer) abortServerError(w http.ResponseWriter) {
+	w.WriteHeader(http.StatusInternalServerError)
+}
+
+func (s *HuanProxyServer) abortNoContent(w http.ResponseWriter) {
+	w.WriteHeader(http.StatusNoContent)
+}

+ 1 - 1
src/server/api.go

@@ -53,7 +53,7 @@ func (s *HuanProxyServer) apiServer(rule *rulescompile.RuleCompileConfig, w http
 
 	r.URL.RawQuery = query.Encode()
 
-	s.writeViaHeader(rule, r)
+	s.writeViaHeader(rule, w, r)
 	proxy.ServeHTTP(w, r) // 反向代理
 }
 

+ 16 - 39
src/server/respose.go

@@ -13,53 +13,30 @@ import (
 const XHuanProxyHeaer = apicompile.XHuanProxyHeaer
 const ViaHeader = apicompile.ViaHeader
 
-func (s *HuanProxyServer) writeHuanProxyHeader(r *http.Request) {
+func (s *HuanProxyServer) writeHuanProxyHeader(w http.ResponseWriter, r *http.Request) {
 	version := strings.TrimSpace(utils.StringToOnlyPrint(resource.Version))
-	h := r.Header.Get(XHuanProxyHeaer)
-	if h == "" {
-		h = version
-	} else {
-		h = fmt.Sprintf("%s, %s", h, version)
-	}
-
-	r.Header.Set(XHuanProxyHeaer, h)
+	r.Header.Set(XHuanProxyHeaer, version)
+	w.Header().Set(XHuanProxyHeaer, version)
 }
 
-func (s *HuanProxyServer) writeViaHeader(rule *rulescompile.RuleCompileConfig, r *http.Request) {
+func (s *HuanProxyServer) writeViaHeader(rule *rulescompile.RuleCompileConfig, w http.ResponseWriter, r *http.Request) {
 	info := fmt.Sprintf("%s %s", r.Proto, rule.Api.Via)
 
-	h := r.Header.Get(ViaHeader)
-	if h == "" {
-		h = info
+	reqHeader := r.Header.Get(ViaHeader)
+	if reqHeader == "" {
+		reqHeader = info
 	} else {
-		h = fmt.Sprintf("%s, %s", h, info)
+		reqHeader = fmt.Sprintf("%s, %s", reqHeader, info)
 	}
+	r.Header.Set(ViaHeader, reqHeader)
 
-	r.Header.Set(ViaHeader, h)
-}
-
-func (s *HuanProxyServer) abortForbidden(w http.ResponseWriter) {
-	w.WriteHeader(http.StatusForbidden)
-}
-
-func (s *HuanProxyServer) abortNotFound(w http.ResponseWriter) {
-	w.WriteHeader(http.StatusNotFound)
-}
-
-func (s *HuanProxyServer) abortNotAcceptable(w http.ResponseWriter) {
-	w.WriteHeader(http.StatusNotAcceptable)
-}
-
-func (s *HuanProxyServer) abortMethodNotAllowed(w http.ResponseWriter) {
-	w.WriteHeader(http.StatusMethodNotAllowed)
-}
-
-func (s *HuanProxyServer) abortServerError(w http.ResponseWriter) {
-	w.WriteHeader(http.StatusInternalServerError)
-}
-
-func (s *HuanProxyServer) abortNoContent(w http.ResponseWriter) {
-	w.WriteHeader(http.StatusNoContent)
+	respHeader := w.Header().Get(ViaHeader)
+	if respHeader == "" {
+		respHeader = info
+	} else if !strings.Contains(respHeader, info) {
+		respHeader = fmt.Sprintf("%s, %s", respHeader, info)
+	}
+	w.Header().Set(ViaHeader, respHeader)
 }
 
 func (s *HuanProxyServer) statusOK(w http.ResponseWriter) {

+ 1 - 1
src/server/serverhttp.go

@@ -7,7 +7,7 @@ import (
 )
 
 func (s *HuanProxyServer) NormalServeHTTP(w http.ResponseWriter, r *http.Request) {
-	s.writeHuanProxyHeader(r)
+	s.writeHuanProxyHeader(w, r)
 
 	func() {
 		for _, rule := range s.GetRulesList() {