Як увімкнути всі HTTP-методи на HTTP-сервері Apache


16

Як я можу включити обробку всіх методів HTTP, визначених в RFC 2616 на веб-сервері Apache? Це:

OPTIONS
GET
HEAD
POST
PUT
DELETE
TRACE
CONNECT

Я використовую HTTP-сервер Apache, версія 2.2.22 (Ubuntu)
Ось мій .htaccessфайл:

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

Ось результат, який я отримую від запуску Telnet - Існує метод 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.

Будь-які думки з цього приводу?


яку версію apache ви використовуєте?

Версія сервера: Apache / 2.2.22 (Ubuntu)

1
Ви обмежуєте методи /outputрозташування, але просите OPTIONSпро /місцеположення. Обмеження методів не поширюється на батьківські місця, лише на більш глибокі місця.
lanzz

Відповіді:


7

Apache реалізує всі відповідні методи HTTP для статичного вмісту (фактичні файли, що обслуговуються безпосередньо Apache). Що стосується динамічного вмісту (сценарії CGI mod_phpтощо), Apache не хвилює, що таке метод HTTP (якщо він прямо не обмежений <Limit>директивою ), і передає запит відповідному оброблювачеві. Ваш сценарій повинен обробляти конкретний метод за призначенням, а не Apache. Навіть нестандартні методи без проблем передаються динамічним обробникам.

Тестовано з недійсним ASDFG / HTTP/1.1запитом, обробленим mod_phpсценарієм. Ні скарги від Apache, отримав ASDFGв $_SERVER['REQUEST_METHOD']в сценарії обробника.


Дякую за вашу відповідь. Я відредагував свій .htaccess файл, щоб дозволити деякі методи http. Я перевірив опції / HTTP / 1.0 через telnet. Дозволені методи http ніколи не змінювалися. Це питання, можливо, не стосується apache, але для мене все ще є проблемою включити всі http-методи.

Напевно, ви повинні розмістити саме те, що ви намагаєтесь, яку відповідь ви очікуєте побачити, що ви бачите замість цього та як обробляєте ці запити на стороні сервера. Ніщо не повинно зупиняти OPTIONSзапит, якщо ви прямо не забороните його <Limit OPTIONS> deny from all </Limit>чи подібний контроль доступу.
lanzz

2

на основі http://httpd.apache.org/docs/current/mod/core.html , ці методи можна змінювати у файлах directoryта .htaccessконфігурації за допомогою Limit method [method] ... > ... </Limit>директиви

В основному, ви повинні коментувати такі параметри, як ті, які нижче використовуються для блокування методів.

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


1

Вірний спосіб виправити це - дізнатися, чому Apache відхиляє запити у вашому конкретному випадку . Ви можете дізнатися це з журналів помилок.

У моєму випадку tail -f /usr/local/apache/logs/error_logдав це:

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

Він згадує правила безпеки і файл він приходить з: /usr/local/apache/conf/modsec-imh/01_base_rules.conf. Редагування цього файлу вирішило мою проблему.


-1

Документ PHP має розділ посилань на цей http://php.net/manual/en/features.file-upload.put-method.php

Основна документація apache для директиви знаходиться на веб-сторінці http://httpd.apache.org/docs/2.2/mod/mod_action.html


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.