O Apache altera o código de resposta 460 para 500 - por quê?

1

Eu tenho um proxy Apache para um aplicativo Java personalizado que retorna o código de status 460 em uma condição de erro específica. Quando isso alcança o cliente, o apache está incorretamente transformando-o em um código de status 500, embora outros (404, 403) sejam enviados corretamente.

Aqui está meu host virtual:

<VirtualHost *:80>
    ServerName api.acme.org
    ProxyPass / http://service.internal:10001/
    ProxyPassReverse / http://service.internal:10001/
</VirtualHost>

E a entrada de log, que mostra o código correto:

10.0.0.2 - - [21/Nov/2010:23:20:17 +0000] "GET /session/abc123/touch HTTP/1.1" 460 1379

Alguma ideia do que está causando isso?

Atualização: aqui está a saída para os cabeçalhos do curl:

Direto ao serviço:

# curl -I http://service.internal:10001/session/abc123/touch
HTTP/1.1 460
Content-length: 1388

Proxied:

# curl -O http://api.acme.org/session/abc123/touch
HTTP/1.1 500 Internal Server Error
Date: Mon, 22 Nov 2010 17:24:51 GMT
Content-length: 1388
Connection: close
Content-Type: text/plain; charset=UTF-8

Parece que o Apache tem sua própria ideia sobre qual erro deve ser!

    
por gubby 22.11.2010 / 00:28

3 respostas

2

O problema pode ser um bug no httpd. Corrigido em 2.2.18.

link

    
por 12.08.2013 / 22:55
1

Pelo contrário, parece que o Apache está retornando o código de erro correto. O log mostra o Apache retornando 460, mas seu navegador pode estar interpretando de forma diferente (porque 460 não está definido em um RFC). Há uma maneira fácil de verificar isso; de uma máquina Linux (pode até ser o próprio servidor), tente executar o seguinte:

curl -I http://service.internal:10001/session/abc123/touch

Se isso estiver retornando 460, do que parece ser algo relacionado aos navegadores (isto é, um código de status desconhecido significa um erro no servidor). Se não, você pode querer considerar tentar isso SEM usar mod_proxy - ou seja, acessando a URL diretamente.

    
por 22.11.2010 / 04:36
0

O mod_proxy não sabe o que o status 460 significa e não sabe como reagir.

Por outro lado, quando vê o status 200, ele encaminha. Quando se vê 403, 404 e alguns outros, ele sabe o que fazer.

    
por 22.11.2010 / 01:33