如何在 Apache HTTP Server 中启用所有 HTTP 方法

16 http apache-2.2

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

OPTIONS
GET
HEAD
POST
PUT
DELETE
TRACE
CONNECT
Run Code Online (Sandbox Code Playgroud)

我使用的是 Apache HTTP Server,版本 2.2.22 (Ubuntu)
这是我的.htaccess文件:

<Location /output>
        Dav On
    <LimitExcept GET HEAD OPTIONS PUT>
        Allow from all
    </LimitExcept>
</Location>
Run Code Online (Sandbox Code Playgroud)

这是我从运行 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.
Run Code Online (Sandbox Code Playgroud)

对此有何想法?

lan*_*nzz 7

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

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