Fazendo mod_proxy_http enviar de volta a resposta de forma assíncrona (sem 100 Continue)

2

Um mecanismo de servlet (Jetty) está sendo executado por trás de um servidor Apache Httpd, encaminhado usando mod_proxy_http . Isso está executando um pequeno servlet que aceita solicitações PUT e é autenticado usando a autenticação HTTP básica (tratada no Jetty).

Ao fazer uma solicitação PUT direta (não em proxy) com curl , usando as credenciais de autenticação erradas, o servidor retorna um código de status 401 como esperado:

curl -v -T testfile -u user:WRONG_PASSWORD http://localhost:8080/myservlet/

Isso interrompe as solicitações assim que o código de status é recebido, por isso, o curl não carrega todo o corpo, mas para cedo ( HTTP error before end of send, stop sending ).

* About to connect() to localhost port 8080 (#0)
*   Trying 127.0.0.1... connected
* Server auth using Basic with user 'user'
> PUT /myservlet/testfile HTTP/1.1
> Authorization: Basic xxxxxxxxxxxxxxxxx
> User-Agent: curl/7.22.0
> Host: localhost:8080
> Accept: */*
> Content-Length: 3672
> Expect: 100-continue
> 
< HTTP/1.1 401 Unauthorized
< Date: xxxxxxxxxxxxxxxx
* Authentication problem. Ignoring this.
< WWW-Authenticate: basic realm="Test Realm"
< Content-Length: 0
< Server: Jetty(7.4.5.v20110725)
* HTTP error before end of send, stop sending
< 
* Closing connection #0

Em contraste, quando atrás de mod_proxy_http , há uma resposta 100 Continue enviada quase de imediato pelo Apache Httpd, que curl interpreta como continue , então envia a solicitação inteira ( We are completely uploaded and fine ) antes de eventualmente receber a resposta 401 .

*   Trying 127.0.0.1... connected
* Server auth using Basic with user 'user'
> PUT /myservlet/testfile HTTP/1.1
> Authorization: Basic xxxxxxxxxxxxxxxxx
> User-Agent: curl/7.22.0
> Host: localhost
> Accept: */*
> Content-Length: xxxxxx
> Expect: 100-continue
> 
< HTTP/1.1 100 Continue
* We are completely uploaded and fine
< HTTP/1.1 401 Unauthorized
< Date: xxxxxxxxxxxxxxxx
< Server: Jetty(7.4.5.v20110725)
* Authentication problem. Ignoring this.
< WWW-Authenticate: basic realm="Test Realm"
< Content-Length: 0
< Via: 1.1 localhost
< Content-Type: xxxxxxxxxxxxxx
< 
* Connection #0 to host localhost left intact
* Closing connection #0

Existe uma maneira de impedir que mod_proxy_http use o código 100 Continue e aguarde o código de status 401 do servidor backend antes de enviar sua primeira resposta?

Eu tentei seguir a seguinte sugestão desta pergunta , mas isso não resolveu o problema não era exatamente o mesmo problema):

    ProxyPass /myservlet/ http://localhost:8080/myservlet/
    <Location /myservlet/>
            RequestHeader unset Expect early
    </Location>
    
por Bruno 20.12.2011 / 20:52

0 respostas