O que faria com que o Apache retornasse respostas HTTP malformadas?

2

Eu tenho um servidor Go que reverte as solicitações de proxies para um servidor Apache / PHP. Eu tenho sido capaz de raramente observar que, ocasionalmente, o servidor Apache / PHP fará com que o Go produza a seguinte mensagem de erro: malformed HTTP response "false" . As solicitações são idênticas, e posso sentar e atualizar uma página em um navegador que segue esse caminho de solicitação e fazer com que o erro aconteça uma vez em cada cem. Não consegui observar nenhum padrão quanto a quando isso acontecerá ou não. Não há nada em qualquer log de acesso, log de erros ou log do sistema que pareça relevante.

Eu consegui fazer com que Go produzisse essa mensagem de erro com o código abaixo, então parece que o Apache deve estar enviando respostas inválidas, escrevendo a string "false" diretamente para uma conexão TCP.

Qualquer pista disso seria muito apreciada.

Solicitação:

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))
}

Servidor:

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()
    }
}
    
por Stephen Searles 11.08.2014 / 19:13

0 respostas