GET與POST類型接口


工作當中經常用到這兩種類型的接口,一直對它們兩個的區別一知半解,並不能從原理上說出區別。

GET和POST最直觀的區別應該就是GET將url包含在參數當中,POST通過request body(請求主體)傳遞參數。

其余的區別有

    1.GET請求在瀏覽器回退時是無害的,POST會再次提交請求;

       這句話簡單理解就是,get會將請求參數放在請求的url中,回退操作實際上瀏覽器會從之前的緩存中拿結果;post每次調用都會創建新的資源。還有人說從method的定義上說,get是冪等的,老衲查了一下,等冪性的意思就是一個請求和多次請求,資源的狀態是一樣的。get,head,put,delete都有等冪性。

    2.GET產生的URL地址可以被Bookmark,而POST不可以。

       我理解就是一個可以在瀏覽器的歷史紀錄里看到。。。可以要是ajax發起的GET請求,不是也不能看到嗎?不明白

   3.GET請求會被瀏覽器主動cache,而POST不會。

       瀏覽器緩存又分為強緩存和協商緩存。

   4.GET只能進行url編碼,POST支持多種方式編碼。

    url編碼指的是urlEncode,POST提交數據的方式有application/x-www-form-urlencoded(瀏覽器form表單默認的編碼方式,提交的數據按照 key1=val1&key2=val2 的方式進行編碼,key 和 val 都進行了 URL 轉碼),multipart/form-data(表單上傳文件時,必須讓 form 的 enctype 等於這個值),application/json(告訴服務端消息主體是序列化后的 JSON 字符串),text/xml

   5.GET請求參數會被完整保留在瀏覽器歷史記錄里,而POST中的參數不會被保留。

        怎么感覺跟第2條有點重復,要么就是我對第2條有些誤解

   6.GET請求在URL中傳送的參數是有長度限制的,而POST沒有。

       在開發API的時候就遇到過把接口創建成了get類型,因為參數太多太長請求不能成功,具體長度上限應該是2048字節。POST接口按理說是不會有限制的,但是webconfig文件中可以設置maxQueryStringLength,需要驗證一下對POST請求起不起作用。

   7.對參數的數據類型,GET只接受ASCII字符,而POST沒有限制。

     URL 是 HTTP 的一個首部。既然作為一個首部,那么根據約定,一定是 ASCII 字符的。

   8.GET比POST更不安全,因為參數直接暴露在URL上,所以不能用來傳遞敏感信息

      這句話好像還比較好理解,嘿嘿嘿。

GET和POST還有一些共同點

     GET和POST是http協議的兩種發送請求的方法。因為http的底層是TCP/IP,所以GET和POST的底層也是TCP/IP,有人說GET和POST請求都是TCP鏈接。又查了一下TCP是什么,感覺還比較復雜,今天理解應該無望,暫且不論。暫時簡單粗暴地理解TCP就是傳輸數據用的,GET請求會產生一個TCP數據包,POST請求會產生兩個TCP數據包。GET請求是把http header和data一並發出去,服務器響應200,POST請求是瀏覽器先發送header,服務器響應100,瀏覽器發送data,瀏覽器再響應200。


免責聲明!

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



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