我有一台 Go 服务器,它将请求反向代理到 Apache/PHP 服务器。我偶尔会观察到 Apache/PHP 服务器会导致 Go 产生以下错误消息:malformed HTTP response "false"
。请求是相同的,我可以坐下来刷新浏览器中遵循该请求路径的页面,错误发生的频率可能是百分之一。我无法观察到它何时发生或不发生的任何模式。任何访问日志、错误日志或系统日志中都没有任何相关的内容。
我已经能够使用下面的代码让 Go 生成该错误消息,因此看起来 Apache 必须发送无效响应,将字符串“false”直接写入 TCP 连接。
如能提供任何线索我将非常感激。
要求:
package main
import (
"fmt"
"net/http"
"net/http/httputil"
)
func main() {
req, _ := http.NewRequest("GET", "http://127.0.0.1:36302", nil)
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
respDump, _ := httputil.DumpResponse(resp, true)
fmt.Println(string(respDump))
}
服务器:
package main
import (
"fmt"
"io"
"net"
"time"
)
func main() {
l, _ := net.ListenTCP("tcp4", &net.TCPAddr{net.ParseIP("127.0.0.1"), 36302, ""})
for {
fmt.Println("Accepting connections")
c, err := l.AcceptTCP()
if err != nil {
fmt.Println(err)
}
time.Sleep(1 * time.Second)
io.WriteString(c, "false")
time.Sleep(1 * time.Second)
c.Close()
}
}