根據http頭判斷用戶來源是GET仍是POST

OSC上看了有人問怎麼判斷用戶是GET來的仍是POST來的,這裏作個筆記 php

 

HTTP頭裏有一個Request Method,表示請求是GET仍是POST ide

 

貼上一段代碼YII的代碼 this

// 返回當前請求的方法,請留意方法名稱是大小寫敏感的,按規範應轉換爲大寫字母
public function getMethod()
{
    // $this->methodParam 默認值爲 '_method'
    // 若是指定 $_POST['_method'] ,表示使用POST請求來模擬其餘方法的請求。
    // 此時 $_POST['_method'] 即爲所模擬的請求類型。
    if (isset($_POST[$this->methodParam])) {
        return strtoupper($_POST[$this->methodParam]);

    // 或者使用 $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] 的值做爲方法名。
    } elseif (isset($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'])) {
        return strtoupper($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']);

    // 或者使用 $_SERVER['REQUEST_METHOD'] 做爲方法名,未指定時,默認爲 GET 方法
    } else {
        return isset($_SERVER['REQUEST_METHOD']) ?
            strtoupper($_SERVER['REQUEST_METHOD']) : 'GET';
    }
}

這個方法使用了3種方法來獲取當前用戶的請求,優先級從高到低依次爲: spa

  • 當使用POST請求來模擬其餘請求時,以 $_POST['_method'] 做爲當前請求的方法;
  • 不然,若是存在 X_HTTP_METHOD_OVERRIDE HTTP頭時,以該HTTP頭所指定的方法做爲請求方法, 如 X-HTTP-Method-Override: PUT 表示該請求所要執行的是 PUT 方法;
  • 若是 X_HTTP_METHOD_OVERRIDE 不存在,則以 REQUEST_METHOD 的值做爲當前請求的方法。 若是連 REQUEST_METHOD 也不存在,則視該請求是一個 GET 請求。

前面兩種方法,主要是針對一些只支持GET和POST等有限方法的User Agent而設計的。 設計

相關文章
相關標籤/搜索