0

我正在学习为我正在从事的项目编写 Apache 模块。我找到了官方指南,结果非常有用。

在第一页,“为 Apache HTTP Server 2.4 开发模块”,“构建处理程序”部分,“request_rec结构”小节提供了一些示例代码:

static int example_handler(request_rec *r)
{
    /* Set the appropriate content type */
    ap_set_content_type(r, "text/html");

    /* Print out the IP address of the client connecting to us: */
    ap_rprintf(r, "<h2>Hello, %s!</h2>", r->useragent_ip);

    /* If we were reached through a GET or a POST request, be happy, else sad. */
    if ( !strcmp(r->method, "POST") || !strcmp(r->method, "GET") ) {
        ap_rputs("You used a GET or a POST method, that makes us happy!<br/>", r);
    }
    else {
        ap_rputs("You did not use POST or GET, that makes us sad :(<br/>", r);
    }

    /* Lastly, if there was a query string, let's print that too! */
    if (r->args) {
        ap_rprintf(r, "Your query string was: %s", r->args);
    }
    return OK;
}

引起我注意的是正在strcmp查看r->method它是POST,GET还是其他东西。这很奇怪。我认为唯一的 HTTP 方法是GETand POST? 是否还有其他原因,或者只是开发人员(或记录人员)不必要地谨慎?

4

2 回答 2

1

是的,有。

OPTIONS Request options of a Web page
GET     Request to read a Web page
HEAD    Request to read a Web page
PUT     Request to write a Web page
POST    Append to a named resource (e.g. a Web page)
DELETE  Remove the Web page
LINK    Connects two existing resources
UNLINK  Breaks an existing connection between two resources

如需完整参考,请查看HTTP 规范(RFC2616,第 5.1.1 章)

于 2013-07-06T22:33:40.750 回答
1

定义的常用方法集是RFC2616

  • 选项
  • 得到
  • 邮政
  • 删除
  • 痕迹
  • 连接

但是还有许多其他协议使用的附加方法。例如WEBDAV 协议定义了所有这些:

  • PROPFIND
  • 宣传片
  • MKCOL
  • 复制
  • 移动
  • 开锁

有一个包含所有已知扩展方法列表的RFC 草案。但在未来,预计新方法将在 HTTP 方法注册表中向 IANA 注册,如此处所述

于 2013-07-06T22:37:01.020 回答