A regra de reescrita do Apache adiciona o cabeçalho Allow vazio

2

Estou usando uma regra de reconfiguração do Apache (2.2) para colocar na lista de permissões alguns métodos HTTP:

RewriteEngine on
RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|DELETE|PUT|POST)$
RewriteRule ^(.*)$ - [F,L]

Isso funciona bem e rejeita métodos indesejados:

curl -X ACL -v http://localhost/my-page/
* About to connect() to localhost port 80 (#0)
*   Trying 127.0.0.1... connected
> ACL /my-page/ HTTP/1.1
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Accept: */*
> Host: localhost
> 
< HTTP/1.1 403 Forbidden
< Date: Fri, 18 Jul 2014 16:15:29 GMT
< Server: Apache
< Vary: Accept-Encoding
< Content-Length: 217
< Content-Type: text/html; charset=iso-8859-1

Achei que seria interessante alterar a reescrita para enviar uma resposta "405 - método não permitido":

RewriteEngine on
RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|DELETE|PUT|POST)$
RewriteRule ^(.*)$ - [R=405,L]

No entanto, com essa alteração simples, agora recebo um falso cabeçalho vazio na minha resposta:

curl -X ACL -v http://localhost/my-page/
* About to connect() to localhost port 80 (#0)
*   Trying 127.0.0.1... connected
> ACL /my-page/ HTTP/1.1
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Accept: */*
> Host: localhost
> 
< HTTP/1.1 405 Method Not Allowed
< Date: Fri, 18 Jul 2014 16:18:37 GMT
< Server: Apache
< Allow: 
< Vary: Accept-Encoding
< Content-Length: 236
< Content-Type: text/html; charset=iso-8859-1

Por que o Apache está inserindo este cabeçalho? Estou tentando usar "SetEnvIf / Header add" para enviar um cabeçalho Permitir válido, nesse caso acabo com 2 Permitir cabeçalhos. Posso me livrar do cabeçalho Allow vazio de alguma forma, ou talvez fazer com que ele seja preenchido corretamente?

    
por Robin 18.07.2014 / 18:24

1 resposta

0

Espere é frustrante se o Apache adicionar o cabeçalho, com certeza, o RFC diz que precisa. Mas o Apache adiciona um cabeçalho EMPTY, quando o RFC diz que eles devem listar os métodos que devem funcionar.

Pelo RFC, Allow: com os métodos NO listados, como o Apache cria, significa que nenhum método pode funcionar.

Felizmente, muito poucos clientes prestam atenção ao cabeçalho Allow, seja de OPTIONS, ou como parte do 405 exigido, ou (como sugerido, mas não obrigatório) como parte do 501.

A razão pela qual ninguém usa OPTIONS ou presta atenção ao cabeçalho Allow é que é muito raro (quase nunca) vê-los implementados corretamente. E, como no Apache, é difícil, se não impossível, que um web designer convença o servidor a fazer isso da maneira certa.

Francamente, é uma bagunça, o IETF perdeu o barco com o novo RFC para HTTP. o que eles deveriam ter feito é codificar a prática existente suspendendo o cabeçalho Permitir, explicando que os servidores farão o que quiserem, os clientes devem ignorá-los e toda a bagunça deve ser esquecida.

    
por 06.11.2014 / 03:47

Tags