關于post和get的差別
首先,get和post并沒有本質上的差別,都隻是 HTTP 協定中兩種請求方式,用的都是同一個傳輸層協定,在傳輸上并沒有什麼不同。

1.get和post封包上的差別
GET 和 POST 隻是 HTTP 協定中兩種請求方式,而 HTTP 協定是基于 TCP/IP 的應用層協定,無論 GET 還是 POST,用的都是同一個傳輸層協定,是以在傳輸上,沒有差別。
封包格式上,不帶參數時,最大差別就是第一行方法名不同
POST方法請求封包第一行是這樣的
POST /uri HTTP/1.1 \r\n
GET方法請求封包第一行是這樣的
GET /uri HTTP/1.1 \r\n
帶參數時封包的差別是GET 方法的參數應該放在 url 中,POST 方法參數應該放在 body 中
get方法簡約版封包:
GET /index.php?name=xiaoming.c&age=3 HTTP/1.1
Host:
localhost
post方法簡約版封包:
POST /index.php HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencode
name=qiming.c&age=22
2. GET方法 和 POST 方法安全性上差異
按照網上大部分文章的解釋,POST 比 GET 安全,因為資料在位址欄上不可見
然而,從傳輸的角度來說,他們都是不安全的,因為 HTTP 在網絡上是明文傳輸的,隻要在網絡節點上捉包,就能完整地擷取資料封包。
要想安全傳輸,就隻有加密,也就是 HTTPS。
3. GET 方法有長度限制 ?最多為1024kb?
GET方法送出的url參數資料大小沒有限制
HTTP 協定沒有 Body 和 URL 的長度限制,對 URL 限制的大多是浏覽器和伺服器的原因。
浏覽器原因是因為浏覽器廠商的設定,伺服器是因為處理長 URL 要消耗比較多的資源,為了性能和安全(防止惡意構造長 URL 來攻擊)考慮,會給 URL 長度加限制。
4. POST 方法産生兩個資料包?
有些觀點中提到,post 會将 header 和 body 分開發送,先發送 header,服務端傳回 100 狀态碼再發送 body。
HTTP 協定中沒有明确說明 POST 會産生兩個 TCP 資料包,而且實際測試(Chrome)發現,header 和 body 不會分開發送。
是以,header 和 body 分開發送是部分浏覽器或架構的請求方法,不屬于 post 必然行為。
5. “get常用于擷取資料,post用于送出資料”
雖然get的确常被用于擷取資料,但post也可以在一些UI架構被用于取回資料
get和post用途也是因地制宜,要根據實際情況來決定用哪個方法。