2014-07-17 27 views
4

我通過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']?我搜索了一下,唯一發現的是X-HTTP-Method-Override頭的用法,通過POST方法來傳遞所需的執行方法。其實上面的代碼看起來好像是在做它。那是嗎?

+1

這是什麼?這段代碼的確在做你所描述的內容。 – Jon

回答

5

From Microsoft's article on X-HTTP-Method

在X-HTTP-方法的標題可以被添加到該信號,該服務器不能處理該請求作爲POST POST請求,但如果指定爲值的HTTP動詞的頭部被用作HTTP請求的請求線上的方法,如[RFC2616]第5.1節中所述。這種技術通常被稱爲「動態隧道效應」。

簡短的回答,真正的HTTP動詞是在頭將POST但應用程序會尋找這個特殊的頭弄清楚什麼類型的請求實際上是通過模擬HTTP動詞的意思。

然後,它在$_SERVER[]之下,因爲它是作爲HTTP標頭髮送的。大多數HTTP標頭可在$_SERVER陣列下訪問,並且前綴爲HTTP_