Cómo habilitar todos los métodos HTTP en un servidor HTTP Apache


16

¿Cómo puedo habilitar el manejo de todos los métodos HTTP definidos en RFC 2616 en el servidor web Apache? Estos serían:

OPTIONS
GET
HEAD
POST
PUT
DELETE
TRACE
CONNECT

Estoy usando el servidor HTTP Apache, versión 2.2.22 (Ubuntu)
Aquí está mi .htaccessarchivo:

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

Aquí está el resultado que obtengo al ejecutar Telnet: no hay ningún 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.

Tiene alguna idea sobre esto?


¿Qué versión de apache usas?

Versión del servidor: Apache / 2.2.22 (Ubuntu)

1
Estás limitando los métodos en la /outputubicación, pero estás preguntando por OPTIONSla /ubicación. Los límites del método no se aplican a ubicaciones principales, solo a ubicaciones más profundas.
Lanzz

Respuestas:


7

Apache implementa todos los métodos HTTP relevantes para contenido estático (archivos reales servidos directamente por Apache). Para contenido dinámico (scripts CGI mod_php, etc.), a Apache no le importa cuál es el método HTTP (a menos que esté restringido explícitamente con una <Limit>directiva ), y pasa la solicitud al controlador apropiado tal como está. Su secuencia de comandos debe manejar el método específico según lo previsto, no Apache. Incluso los métodos no estándar se pasan a controladores dinámicos sin ningún problema.

Probado con una ASDFG / HTTP/1.1solicitud no válida manejada por un mod_phpscript. No se queja de Apache, recibida ASDFGen $_SERVER['REQUEST_METHOD']el guión manipulador.


Gracias por tu respuesta. Edité mi archivo .htaccess para permitir algunos métodos http. Lo comprobé con OPTIONS / HTTP / 1.0 a través de telnet. Los métodos http permitidos nunca cambiaron. Este problema no se trata de apache tal vez, pero todavía es un problema para mí habilitar todos los métodos http.

Probablemente debería publicar exactamente lo que está intentando, qué respuesta espera ver, qué ve en su lugar y cómo maneja esas solicitudes en el lado del servidor. Nada debe detener una OPTIONSsolicitud, a menos que lo prohíba explícitamente <Limit OPTIONS> deny from all </Limit>o con un control de acceso similar.
Lanzz

2

basado en http://httpd.apache.org/docs/current/mod/core.html , estos métodos se pueden modificar en los archivos de configuración directoryy .htaccessutilizando la Limit method [method] ... > ... </Limit>directiva

Básicamente, debe comentar las opciones como las siguientes que se utilizan para bloquear los métodos.

<Limit POST PUT DELETE>
  Require valid-user
</Limit>


1

La forma segura de solucionar esto es saber por qué Apache niega las solicitudes en su caso particular . Puede aprender esto de los registros de errores.

En mi caso, tail -f /usr/local/apache/logs/error_logdi esto:

[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"]

Se menciona una regla de seguridad y el archivo que viene de: /usr/local/apache/conf/modsec-imh/01_base_rules.conf. Editar ese archivo resolvió mi problema.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.