首先:
一般來說,我們發送get是希望從服務器上獲取數據,post請求需要向服務器傳送數據。
1. get 在瀏覽器回退時是無害的,post 會再次提交數據
2. get 產生的url 地址可以被 bookmark,post 則不可以
3. get 請求會被瀏覽器主動cache (緩存),post 則不會,除非手動設置
4. get 請求參數會被完整保留在瀏覽器歷史記錄里,而post中參數不會被保留
5. get 只接受ASCII 碼字符,而post 沒有限制
6. get 請求只能進行url 編碼,而post 支持多種編碼方式。
7. get 把請求參數放在url 上,即http協議頭上,post 放在Request body請求體中。
故get 比post 更不安全,不能用來傳遞敏感信息。
附:get 參數放在url上,以?分割url,參數之間以&相連;英文/數字,不做改變,原樣發送;
空格轉換為+;中文/其他字符,則用base64加密,即%加上“十六進制ASCII碼”
8. get 一般來說提交的數據最大是2k;(原則上url 長度無限制,但大多數瀏覽器通常都會限制url 長度在2k(2048字節byte))
post 理論上沒有限制,實際上IIS4中最大量為80k,IIS5中為100k。
9. get 產生一個tcp 數據包,瀏覽器會把http header 和data 一並發送出去,服務器響應200(返回數據)
post 產生兩個tcp 數據包,瀏覽器會先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200(返回數據)
附:Http 是基於tcp/ip 關於數據如何在萬維網中通信的協議。所以http 的底層是tcp/ip,get 、post 的底層也是tcp/ip,
也就是說,get、post 都是tcp 連接。
ok
