[Web]get/post(WEB)

1. 概述

關於 get/post,可以查看 rfc-2616 瞭解詳情:

get: RFC 2616 - Hypertext Transfer Protocol – HTTP/1.1
post: RFC 2616 - Hypertext Transfer Protocol – HTTP/1.1

其實,http 中的 get 與 post 只是單純的名字上的區別,get 請求的數據也可以放在 request body 中,只是瀏覽器沒有實現它。

get/post 可以顧名思義地理解,get 是用來請求數據,那麼,既然是請求數據,爲什麼還要帶上數據呢?其實很好理解,比如一個新聞頁面,有很多內頁,那麼 get 請求可能帶上的類似這樣的參數 page=1,即爲請求第一頁的數據。post 的話顧名思義就是發送數據,所以需要帶上數據

1. 區別

1. get是安全和冪等的

安全: 此處的安全是指不會影響到服務端內容。get請求從服務端獲取程序,並不會修改服務端內容。

冪等: 不管同一個get請求發送多少次,服務端最終的狀態都是相同的,此爲冪等。

2. post 相對 get 請求是 “安全” 的

“安全”: 此處的安全是指get請求使用明文加在URL後面,所有人可見,而post請求是將請求數據封裝在請求體中。
既然是安全,爲何加雙引號呢?是因爲抓個包就能看到post請求,所以這個安全有點僞安全。

3. get 請求發送數據更小

雖然http對URL長度並沒有限制,但是瀏覽器和操作系統會限制URL長度,既然get請求數據是放在URL上,那就也要受到URL長度限制。

4. get 能被緩存,post 不能被緩存

這點非常容易理解,打開一個頁面,如果之前打開過,那麼很明顯速度會加快,這是因爲 html/js/css/img 等文件都能被瀏覽器緩存(也可以被服務器緩存),而這些文件的獲取,都是用的 get 請求。事實上,web 中的絕大多數請求都是用 get 完成的,post 請求目前爲止我只是在 ajax 以及 form 表單中有見過。

但是實際上,http 協議中 post 和 get 都是可以被緩存的,不過不要驚訝,瀏覽器的實現總是比標準厲害。(post 和 get 真的只有名字上的區別啊。。)

3. 表面現像上面看看GET和POST的區別:

GET後退按鈕/刷新無害,POST數據會被重新提交(瀏覽器應該告知用戶數據會被重新提交)。

GET書籤可收藏,POST爲書籤不可收藏。GET能被緩存,POST不能緩存 。

GET編碼類型application/x-www-form-url,POST編碼類型encodedapplication/x-www-form-urlencoded 或 multipart/form-data。爲二進制數據使用多重編碼。

GET歷史參數保留在瀏覽器歷史中。POST參數不會保存在瀏覽器歷史中。

GET對數據長度有限制,當發送數據時,GET 方法向 URL 添加數據;URL 的長度是受限制的(URL 的最大長度是 2048 個字符)。POST無限制。

GET只允許 ASCII 字符。POST沒有限制。也允許二進制數據。

與 POST 相比,GET 的安全性較差,因爲所發送的數據是 URL 的一部分。GET的數據在 URL 中對所有人都是可見的。POST的數據不會顯示在 URL 中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章