一、傳輸數據方式
- GET : 是放在URL後,?分割請求數據,&分割請求參數
- POST:四種常見的提交方式
二、安全性
POST將請求數據放在請求體中,GET放在URL中,HTTP是明文傳輸,所以從攻擊角度,爲了安全要用HTTPS協議
三、請求數據大小
在HTTP協議中,並未對GET請求限制大小,是瀏覽器限制,並且不同瀏覽器限制不同。
POST無此限制,但理論上,IIS4中最大量爲80KB,IIS5中爲100KB。
爲什麼GET瀏覽器會限制?
URL這種東西必須當作一個整體看待,無法一塊一塊處理,於是就處理一個請求時必須分配一整塊足夠大的內存。如果URL太長,而併發又很高,就容易擠爆服務器的內存;
四、緩存
- GET:可以看做DB的select操作,不會對服務端數據產生影響。可以做緩存(客戶端、代理服務器Nginx、服務器Etag)
- POST:可以看做DB的update、insert、select,是必須訪問數據庫行爲,所以不做緩存。
五、請求次數
http 100-continue用於客戶端在發送POST數據給服務器前,徵詢服務器情況,看服務器是否處理POST的數據,如果不處理,客戶端則不上傳POST數據,如果處理,則POST上傳數據。在現實應用中,通過在POST大數據時,纔會使用100-continue協議(加入頭{“Expect”:“100-continue”})。
【但這並不是協議規定的,所以也可以像GET直接發數據】
六、管道傳輸
- get支持管道化傳輸,而post不支持
在長連接中,是順序請求和響應:請求1->響應1->請求2>響應2
管道化:請求1 -> 請求2 -> 請求3 -> 響應1 -> 響應2 -> 響應3
HTTP1.1要求服務器支持管線化,但並不要求服務器對響應進行管線化處理,只是要求對於管線化的請求不失敗,而且現在服務端和代理程序對管線化的支持並不好,Chrome和Firefox默認並未開啓管線化支持。