什么原因导致 Apache 返回格式错误的 HTTP 响应?

什么原因导致 Apache 返回格式错误的 HTTP 响应?

我有一台 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()
    }
}

相关内容