我正在阅读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
方法传输所需的执行方法。实际上上面的代码似乎正在做它。那是吗?
答案 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_
为前缀。