web-dev-qa-db-fra.com

Comment activer toutes les méthodes HTTP dans un serveur HTTP Apache

Comment puis-je activer la gestion de toutes les méthodes HTTP telles que définies dans RFC 2616 sur le serveur Web Apache? Ce seraient:

OPTIONS
GET
HEAD
POST
PUT
DELETE
TRACE
CONNECT

J'utilise Apache HTTP Server, version 2.2.22 (Ubuntu)
Voici mon .htaccess Fichier:

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

Voici la sortie que j'obtiens en exécutant Telnet - Il n'y a pas de méthode 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.

Des réflexions à ce sujet?

16
MatandDie

Apache implémente toutes les méthodes HTTP pertinentes pour le contenu statique (fichiers réels servis directement par Apache). Pour le contenu dynamique (scripts CGI, mod_php, etc.), Apache ne se soucie pas de ce qu'est la méthode HTTP (sauf si elle est explicitement restreinte par un <Limit> directive ), et transmet la demande au gestionnaire approprié tel quel. Votre script doit gérer la méthode spécifique comme prévu, pas Apache. Même les méthodes non standard sont transmises aux gestionnaires dynamiques sans problème.

Testé avec un ASDFG / HTTP/1.1 demande gérée par un mod_php script. Aucune plainte d'Apache, reçu ASDFG en $_SERVER['REQUEST_METHOD'] dans le script du gestionnaire.

7
lanzz

basé sur http://httpd.Apache.org/docs/current/mod/core.html , ces méthodes peuvent être modifiées dans les directory et .htaccess fichiers de configuration à l'aide de Limit method [method] ... > ... </Limit> directive

Fondamentalement, vous devez commenter les options comme celles ci-dessous qui sont utilisées pour bloquer les méthodes.

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

Vous utilisez probablement libapache2-mod-php5filter au lieu de libapache2-mod-php5.

Détails: Apache2 et php5: module ou filtre

1
skazi

Le moyen sûr de résoudre ce problème est d'apprendre pourquoi Apache refuse les demandes dans votre cas particulier. Vous pouvez l'apprendre à partir des journaux d'erreurs.

Dans mon cas, tail -f /usr/local/Apache/logs/error_log a donné ceci:

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

Il mentionne une règle de sécurité et le fichier dont il provient: /usr/local/Apache/conf/modsec-imh/01_base_rules.conf. La modification de ce fichier a résolu mon problème.

1
Anton Khamets