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

 

 

  

  





 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM