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

16

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 .htaccessfichier:

<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?


la source
quelle version d'apache utilisez-vous?
Version du serveur: Apache / 2.2.22 (Ubuntu)
1
Vous limitez les méthodes sur l' /outputemplacement, mais vous demandez OPTIONSsur l' /emplacement. Les limites de méthode ne s'appliquent pas aux emplacements parents, uniquement aux emplacements plus profonds.
lanzz

Réponses:

7

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 la méthode HTTP (sauf si elle est explicitement restreinte par une <Limit>directive ) et transmet la demande au gestionnaire approprié en l'état. 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 une ASDFG / HTTP/1.1requête non valide gérée par un mod_phpscript. Aucune plainte d'Apache, a reçu ASDFGdans $_SERVER['REQUEST_METHOD']dans le script de gestionnaire.

lanzz
la source
Merci pour votre réponse. J'ai modifié mon fichier .htaccess pour autoriser certaines méthodes http. J'ai vérifié avec OPTIONS / HTTP / 1.0 sur telnet. Les méthodes http autorisées n'ont jamais changé. Ce problème ne concerne peut-être pas Apache, mais c'est toujours un problème pour moi d'activer toutes les méthodes http.
Vous devriez probablement publier exactement ce que vous essayez, quelle réponse vous attendez, ce que vous voyez à la place et comment vous gérez ces demandes côté serveur. Rien ne doit arrêter une OPTIONSdemande, sauf si vous l'interdisez explicitement avec <Limit OPTIONS> deny from all </Limit>ou un contrôle d'accès similaire.
lanzz
2

basé sur http://httpd.apache.org/docs/current/mod/core.html , ces méthodes peuvent être modifiées dans les fichiers de configuration directoryet .htaccessà l'aide de la 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>
MaVRoSCy
la source
1

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

Dans mon cas, a tail -f /usr/local/apache/logs/error_logdonné 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 il vient de: /usr/local/apache/conf/modsec-imh/01_base_rules.conf. La modification de ce fichier a résolu mon problème.

Anton Khamets
la source