Как включить все методы HTTP на HTTP-сервере Apache


16

Как я могу включить обработку всех методов HTTP, как определено в RFC 2616 на веб-сервере Apache? Это будет:

OPTIONS
GET
HEAD
POST
PUT
DELETE
TRACE
CONNECT

Я использую Apache HTTP Server, версия 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. Я проверил с помощью OPTIONS / 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.