什么是$ _SERVER [' HTTP_X_HTTP_METHOD']

时间:2014-07-17 20:32:18

标签: php

我正在阅读REST api here的解释,并且有以下代码块:

$this->method = $_SERVER['REQUEST_METHOD'];
if ($this->method == 'POST' && array_key_exists('HTTP_X_HTTP_METHOD', $_SERVER)) {
    if ($_SERVER['HTTP_X_HTTP_METHOD'] == 'DELETE') {
        $this->method = 'DELETE';
    } else if ($_SERVER['HTTP_X_HTTP_METHOD'] == 'PUT') {
        $this->method = 'PUT';
    } else {
        throw new Exception("Unexpected Header");
    }
}

我的问题是$_SERVER['HTTP_X_HTTP_METHOD']是什么?我已经用Google搜索了,我发现的唯一事情就是使用X-HTTP-Method-Override标头来通过POST方法传输所需的执行方法。实际上上面的代码似乎正在做它。那是吗?

1 个答案:

答案 0 :(得分:6)

From Microsoft's article on X-HTTP-Method

  

可以将X-HTTP-Method标头添加到POST请求中,该请求表示服务器必须处理请求而不是POST,但好像将指定为标头值的HTTP谓词用作方法HTTP请求的请求行,如[RFC2616]第5.1节中所述。这种技术通常被称为“动词隧道”。

简短的回答,标题中真正的HTTP动词将是POST,但是应用程序会查找这个特殊的标题,以通过模拟HTTP动词来确定实际意味着什么类型的请求。

然后,它位于$_SERVER[]下,因为它是作为HTTP标头发送的。大多数HTTP标头都可以在$_SERVER数组下访问,并以HTTP_为前缀。