Назад | Перейти на главную страницу

Что может заставить 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()
    }
}