a) 參數:
GET傳遞的參數只能帶URL后面,文本格式QueryString,各瀏覽器一般有長度限制,一般認為是2083,如果有中文字符更短。提交到服務器端的數據量小。
POST可以傳遞application/x-www-form-urlencoded的類似QueryString、multipart/form-data的二進制報文格式(支持文件信息嵌入報文傳輸)、純文本或二進制的body參數。提交到服務器端的數據量大。參考:http://blog.csdn.net/kimmking/article/details/2051169
b) 用途:
GET用於從服務器端獲取數據,包括靜態資源(HTML|JS|CSS|Image等等)、動態數據展示(列表數據、詳情數據等等)。
POST用於向服務器提交數據,比如增刪改數據,提交一個表單新建一個用戶、或修改一個用戶等。
c) 緩存:
GET時默認可以復用前面的請求數據作為緩存結果返回,此時以完整的URL作為緩存數據的KEY。所以有時候為了強制每次請求都是新數據,我們可以在URL后面加上一個隨機參數Math.random或時間戳new Date().getTime()、或版本號,比如abc.com?a=1&rnd=0.123987之類的。這也是目前一些靜態資源后面加一個很長的版本號的原因,jquery-min.js?v=13877770表示一個版本,當頁面引用jquery-min.js?v=13877771時瀏覽器必然會重新去服務器請求這個資源。jQuery.ajax方法,如果cache=false,則會在GET請求參數中附加”_={timestamp}”來禁用緩存。
POST一般則不會被這些緩存因素影響。
d) 安全性:
默認對於nginx的access log,會自動記錄get或post的完整URL,包括其中帶的參數。
對於POST來說,請求的報文卻不會被記錄,這些對於敏感數據來說,POST更安全一些。
e) 自動化性能測試:
基於上面提到的nginx日志,可以使用grep GET+日期,awk格式化,然后sort -u去重,從而提取到某天的所有GET請求URL,使用程序模擬登陸,然后請求所有URL即可獲取簡單的性能測試數據,每個請求是否正確,響應時間多少等等。
但是對於POST請求,因為不知道報文,無法這樣簡單處理。可以通過nginx-lua獲取報文輸出到log,這樣格式化會麻煩很多,但不失為一個辦法。