集群服务设置增加“支持低版本HTTP”选项/分片内容提示不支持低版本HTTP协议

This commit is contained in:
刘祥超
2023-04-01 09:57:24 +08:00
parent d9fa3dcc3b
commit 95abb7bfae
2 changed files with 20 additions and 2 deletions

View File

@@ -21,13 +21,15 @@ func (this *HTTPRequest) doReverseProxy() {
return return
} }
var isLowVersionHTTP = this.RawReq.ProtoMajor < 1 /** 0.x **/ || (this.RawReq.ProtoMajor == 1 && this.RawReq.ProtoMinor == 0 /** 1.0 **/)
var retries = 3 var retries = 3
var failedOriginIds []int64 var failedOriginIds []int64
var failedLnNodeIds []int64 var failedLnNodeIds []int64
for i := 0; i < retries; i++ { for i := 0; i < retries; i++ {
originId, lnNodeId, shouldRetry := this.doOriginRequest(failedOriginIds, failedLnNodeIds, i == 0, i == retries-1) originId, lnNodeId, shouldRetry := this.doOriginRequest(failedOriginIds, failedLnNodeIds, i == 0, i == retries-1, isLowVersionHTTP)
if !shouldRetry { if !shouldRetry {
break break
} }
@@ -41,7 +43,7 @@ func (this *HTTPRequest) doReverseProxy() {
} }
// 请求源站 // 请求源站
func (this *HTTPRequest) doOriginRequest(failedOriginIds []int64, failedLnNodeIds []int64, isFirstTry bool, isLastRetry bool) (originId int64, lnNodeId int64, shouldRetry bool) { func (this *HTTPRequest) doOriginRequest(failedOriginIds []int64, failedLnNodeIds []int64, isFirstTry bool, isLastRetry bool, isLowVersionHTTP bool) (originId int64, lnNodeId int64, shouldRetry bool) {
// 对URL的处理 // 对URL的处理
var stripPrefix = this.reverseProxy.StripPrefix var stripPrefix = this.reverseProxy.StripPrefix
var requestURI = this.reverseProxy.RequestURI var requestURI = this.reverseProxy.RequestURI
@@ -321,6 +323,16 @@ func (this *HTTPRequest) doOriginRequest(failedOriginIds []int64, failedLnNodeId
return return
} }
// 是否为1.1以下
if isLowVersionHTTP && resp.ContentLength < 0 {
this.writer.WriteHeader(http.StatusBadRequest)
_, _ = this.writer.WriteString("The content does not support " + this.RawReq.Proto + " request.")
if resp.Body != nil {
_ = resp.Body.Close()
}
return
}
// 记录相关数据 // 记录相关数据
this.originStatus = int32(resp.StatusCode) this.originStatus = int32(resp.StatusCode)

View File

@@ -114,6 +114,12 @@ func (this *HTTPListener) Reload(group *serverconfigs.ServerAddressGroup) {
// ServerHTTP 处理HTTP请求 // ServerHTTP 处理HTTP请求
func (this *HTTPListener) ServeHTTP(rawWriter http.ResponseWriter, rawReq *http.Request) { func (this *HTTPListener) ServeHTTP(rawWriter http.ResponseWriter, rawReq *http.Request) {
var globalServerConfig = sharedNodeConfig.GlobalServerConfig
if globalServerConfig != nil && !globalServerConfig.HTTPAll.SupportsLowVersionHTTP && (rawReq.ProtoMajor < 1 /** 0.x **/ || (rawReq.ProtoMajor == 1 && rawReq.ProtoMinor == 0 /** 1.0 **/)) {
http.Error(rawWriter, rawReq.Proto+" request is not supported.", http.StatusBadRequest)
return
}
// 不支持Connect // 不支持Connect
if rawReq.Method == http.MethodConnect { if rawReq.Method == http.MethodConnect {
http.Error(rawWriter, "Method Not Allowed", http.StatusMethodNotAllowed) http.Error(rawWriter, "Method Not Allowed", http.StatusMethodNotAllowed)