天天看點

關于post和get的差別 - 諸星大

關于post和get的差別

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

關于post和get的差別 - 諸星大

 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用途也是因地制宜,要根據實際情況來決定用哪個方法。