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

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

如何在 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.

对此有什么想法吗?

答案1

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

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

答案2

基于http://httpd.apache.org/docs/current/mod/core.html,可以使用指令在directory和 配置文件中修改这些方法.htaccessLimit method [method] ... > ... </Limit>

基本上你必须注释掉像下面这样的选项用于阻止方法。

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

答案3

可能您使用的是 libapache2-mod-php5filter 而不是 libapache2-mod-php5。

细节:apache2 和 php5:模块或过滤器

答案4

我不得不建议大家标记或更改你发帖的 IP。这只会给黑客一个确定的目标。发帖时要小心。

相关内容