如何在Apache HTTP服务器中启用所有HTTP方法


16

如何在Apache Web服务器上启用对RFC 2616中定义的所有HTTP方法的处理?这些将是:

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 2012年

Answers:


7

Apache为静态内容(Apache直接提供的实际文件)实现了所有相关的HTTP方法。对于动态内容(CGI脚本mod_php等),Apache不在乎HTTP方法是什么(除非使用<Limit>指令对其进行明确限制),并将请求原样传递给适当的处理程序。您的脚本需要按预期处理特定的方法,而不是Apache。即使非标准方法也可以毫无问题地传递给动态处理程序。

使用脚本ASDFG / HTTP/1.1处理的无效请求进行了测试mod_php。Apache的无投诉,收到ASDFG$_SERVER['REQUEST_METHOD']在处理程序脚本。


感谢您的回答。我编辑了.htaccess文件,以允许使用某些http方法。我通过telnet检查了OPTIONS / HTTP / 1.0。允许的http方法永不更改。这个问题可能与apache无关,但是对于我来说,启用所有http方法仍然是个问题。

您可能应该确切地发布您正在尝试的内容,期望看到的响应,看到的内容以及在服务器端如何处理这些请求。OPTIONS除非您明确禁止使用<Limit OPTIONS> deny from all </Limit>或类似的访问控制,否则什么也不应停止请求。
lanzz 2012年

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。编辑该文件解决了我的问题。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.