Como habilitar todos os métodos HTTP em um servidor HTTP Apache

16

Como posso ativar o tratamento de todos os métodos HTTP, conforme definido na RFC 2616 no servidor da web Apache? Estes seriam:

OPTIONS
GET
HEAD
POST
PUT
DELETE
TRACE
CONNECT

Estou usando o servidor HTTP Apache, versão 2.2.22 (Ubuntu)
Aqui está o meu .htaccessarquivo:

<Location /output>
        Dav On
    <LimitExcept GET HEAD OPTIONS PUT>
        Allow from all
    </LimitExcept>
</Location>

Aqui está a saída que recebo da execução do Telnet - Não há método PUT:

Escape character is '^]'.
OPTIONS / HTTP/1.0

HTTP/1.1 200 OK
Date: Tue, 09 Oct 2012 06:56:42 GMT
Server: Apache/2.2.22 (Ubuntu)
Allow: GET,HEAD,POST,OPTIONS
Vary: Accept-Encoding
Content-Length: 0
Connection: close
Content-Type: text/html

Connection closed by foreign host.

Alguma idéia sobre isso?


fonte
qual versão do apache você usa?
Versão do servidor: Apache / 2.2.22 (Ubuntu)
11
Você está limitando os métodos no /outputlocal, mas está solicitando OPTIONSo /local. Os limites do método não se aplicam aos locais principais, apenas aos locais mais profundos.
#

Respostas:

7

O Apache implementa todos os métodos HTTP relevantes para conteúdo estático (arquivos reais servidos diretamente pelo Apache). Para conteúdo dinâmico (scripts CGI mod_php, etc), o Apache não se importa com o que é o método HTTP (a menos que seja explicitamente restrito a uma <Limit>diretiva ) e passa a solicitação para o manipulador apropriado. Seu script precisa manipular o método específico conforme pretendido, não o Apache. Até métodos não padronizados são passados ​​para manipuladores dinâmicos sem nenhum problema.

Testado com uma ASDFG / HTTP/1.1solicitação inválida manipulada por um mod_phpscript. Nenhuma reclamação do Apache, recebida ASDFGno $_SERVER['REQUEST_METHOD']script do manipulador.

lanzz
fonte
Obrigado pela sua resposta. Editei meu arquivo .htaccess para permitir alguns métodos http. Eu verifiquei com OPTIONS / HTTP / 1.0 através de telnet. Os métodos http permitidos nunca foram alterados. Talvez esse problema não seja sobre o apache, mas ainda é um problema para mim ativar todo o método http.
Você provavelmente deve postar exatamente o que está tentando, que resposta espera ver, o que vê e como lida com essas solicitações no servidor. Nada deve parar uma OPTIONSsolicitação, a menos que você a proíba explicitamente <Limit OPTIONS> deny from all </Limit>ou com um controle de acesso semelhante.
lanzz
2

Com base em http://httpd.apache.org/docs/current/mod/core.html , esses métodos podem ser modificados nos arquivos de configuração directorye .htaccessusando a Limit method [method] ... > ... </Limit>diretiva

Basicamente, você deve comentar as opções abaixo, usadas para bloquear os métodos.

<Limit POST PUT DELETE>
  Require valid-user
</Limit>
MaVRoSCy
fonte
1

A maneira certa de corrigir isso é saber por que o Apache nega as solicitações no seu caso específico . Você pode aprender isso em logs de erros.

No meu caso, tail -f /usr/local/apache/logs/error_logdei o seguinte:

[Sun Sep 18 08:39:52.570672 2016] [:error] [pid 32076:tid 140086307448576] 
[client 93.125.93.77] ModSecurity: Access denied with code 501 (phase 2). 
Match of "rx ^((?:(?:POS|GE)T|OPTIONS|HEAD))$" against "REQUEST_METHOD" 
required. [file "/usr/local/apache/conf/modsec-imh/01_base_rules.conf"] [line 
"32"] [id "960032"] [msg "Method is not allowed by policy"] [severity 
"CRITICAL"] [tag "POLICY/METHOD_NOT_ALLOWED"] [hostname "104.244.122.237"] 
[uri "/products/order/items/45"] [unique_id "V96LGGj0eu0AAH1MR8sAAACB"]

Menciona uma regra de segurança eo arquivo que está vindo de: /usr/local/apache/conf/modsec-imh/01_base_rules.conf. A edição desse arquivo resolveu meu problema.

Anton Khamets
fonte