天天看點

POST和GET詳解

GET和POST

 Http定義了與伺服器互動的不同方法,最基本的方法有4種,分别是GET,POST,PUT,DELETE。URL全稱是資源描述符,我們可以這樣認為:一個URL位址,它用于描述一個網絡上的資源,而HTTP中的GET,POST,PUT,DELETE就對應着對這個資源的查,改,增,删4個操作。到這裡,大家應該有個大概的了解了,GET一般用于擷取/查詢資源資訊,而POST一般用于更新資源資訊。

1.差別(表現形式角度)

method GET POST
後退按鈕/重新整理 無害(幂等) 資料會被重新送出
書簽 可收藏為書簽 不可收藏為書簽
緩存 能被緩存 不能緩存
編碼類型 application/x-www-form-urlencoded application/x-www-form-urlencoded 或 multipart/form-data。為二進制資料使用多重編碼
曆史 參數保留在浏覽器曆史中 參數不會儲存在浏覽器曆史中
對資料長度的限制 有限制 無限制
對資料類型的限制 隻允許 ASCII 字元 沒有限制。也允許二進制資料
安全性 與 POST 相比,GET 的安全性較差,因為所發送的資料是URL的一部分。在發送密碼或其他敏感資訊時絕不要使用 GET POST 比 GET 更安全,因為參數不會被儲存在浏覽器曆史或 web 伺服器日志中
可見性 資料在 URL 中對所有人都是可見的 資料不會顯示在 URL 中

2.具體解釋

1.Get/Post後退或重新整理(幂等):

比如在請求響應前失去連接配接,如果方法是幂等的,就可以放心地重發一次請求。這也是浏覽器在後退/重新整理時遇到POST會給使用者提示的原因:POST語義不是幂等的,是以在實際應用中要防止表單的重複送出。

幂等:幂等的意味着對同一URL的多個請求應該傳回同樣的結果
           

2.Get/Post收藏書簽:

由于Get請求的參數都附着在URL上。POST把送出的資料則放置在是HTTP包的包體中。比如一個目前打開的淘寶網址為 ( Get ) :www.taobao.com?id=456&name=123  加入書簽中,下次可以照常打開這個頁面。如果這是一個Post請求獲得的商品頁面位址如:http://www.taobao.com 加入書簽後,下次打開或者發給别人看,别人隻能打開隻是淘寶網的首頁而已。
           

3.Get/Post緩存:

GET時預設可以複用前面的請求資料作為緩存結果傳回,此時以完整的URL作為緩存資料的KEY。如果為了請求到新資料可以在url後随意加一個參數,就會重新請去伺服器請求資源。而post一般不會被這些緩存影響。
           

4.GET和POST長度的限制:

HTTP協定對URL長度是沒有限制的。GET是通過URL送出資料,是以GET可送出的資料量就跟URL所能達到的最大長度有直接關系。
           

5.GET和POST安全性:

1.GET是通過URL方式請求,可以直接看到,明文傳輸
2.POST是通過請求header請求,普通使用者是看不到請求的參數的(可以開發者工具或者抓包可以看到)     3.比如在評論别人文章時,使用post,如果使用get位址欄顯示:http://www.xxxx.com?uid=xx&content=xxxx,内容會直接顯示出來,如果别人把url複制一下就可以幫你評論那不是就亂套了( 不安全)。
           

3.總而言之

1.Get用于從伺服器端擷取資料,包括靜态資源、動态資料展示等等。
2.POST用于向伺服器送出資料,比如增删改資料等操作。           
POST和GET詳解