我們會經常看到有人問:http協議中get請求和post請求有什麼區別?
很多同學都是一知半解,因為這個問題看起來似乎很簡單,但是不同程度的人會回答出不同的結果。今天就讓我們來深刻了解下http協議中get和post的真正區別。
我們還是要用一句簡練的話來回答get和post的區別:
提及get和post的區別,一定要確定基於什麼前提。在不同的前提下有不同的答案。
兩台計算機中的兩個程式,這兩個程式之間想要通訊可以有很多種協議,就好比有很多種交通方式可以到達。假設其中一種方式就是網路中的http協議。
在本質上,get請求和post請求都能拉取資料。
既然get和post都可以做到拉取資料,那麼為什麼我們通常拉取資料使用get而不使用post呢?
rfc規範就是iso國際標準化組織,我們常說的http協議實際上是基於rfc規範的,實際上get和post請求的語法是完全相同的,但是在rfc規範中,給get請求和post請求規定了語義,規定get用來獲取資訊,post用來傳送資訊。
在網際網路環境中,如果想要傳送資訊就要使用post方法。這就是按照rfc的規範來執行的。
post方法雖然是傳送訊息的,但也是有response的,在請求返回的時候帶回來一點資料也是被允許的。
光有規範沒有具體的軟體實施也是沒有意義的,所以很多的軟體遵從了rfc的規範,比如我們熟悉的chrome瀏覽器。所以我們想用get方式傳送檔案或者是不可能的。
當人們問起get和post的區別時,我們要先確定,這裡的get和post是基於什麼前提的?
如果什麼前提都沒有,也就是不用任何規範限制的話,我們只考慮語法來說,這兩個方式是沒有任何區別的,只有名字不一樣。
如果是基於rfc規範的,那麼問題就又來了。是基於rfc理論的,還是基於具體的實現的。
(1)如果是基於rfc理論的,我們稱這個為specification。那麼get和post是具有相同的語法,但是不具備相同的語義,get方式用作獲取資訊,post方式用作傳送資訊。
(2)如果是基於rfc的具體實現的,我們稱之為implementation。其實要區分是具體的哪一種實現。我們通常預設指的是瀏覽器實現的rfc。當然不止瀏覽器,我們任何人都可以設計乙個http協議的介面,使用rfc規範,當然這些是我們不用考慮的,因為並不通用。
所以我們只需要考慮瀏覽器實現的rfc,或者說web環境下的rfc。這個前提下的答案,就是我們最常見的那些。我就簡單的列舉在下面了~
a. get的資料在 url 中對所有人都是可見的。post的資料不會顯示在 url 中。
b. get對資料長度有限制,當傳送資料時,get 方法向 url 新增資料;url 的長度是受限制的(url 的最大長度是 2048 個字元)。post無限制。
c.get可收藏為書籤,post不可收藏為書籤。
d. get後退按鈕/重新整理無影響,post資料會被重新提交(瀏覽器應該告知使用者資料會被重新提交)。
f.get歷史引數會保留在瀏覽器歷史中。post引數不會儲存在瀏覽器歷史中。
g. get只允許 ascii 字元。post沒有限制。也允許二進位制資料。
h.與 post 相比,get 的安全性較差,因為所傳送的資料是 url 的一部分。在傳送密碼或其他敏感資訊時絕不要使用 get !post 比 get 更安全,因為引數不會被儲存在瀏覽器歷史或 web 伺服器日誌中。
以上這些點都是我們常見的,還有一些我們不常見的,比如get請求只會有一次tcp連線,而post請求會有兩次tcp連線。在這背後也有許多的設計和考慮~
get和post的區別,你真的理解嗎?
1 get是把引數資料佇列加到提交表單的action屬性所指的url中,值和表單內各個字段一一對應,在url中可以看到。post是通過http post機制,將表單內各個字段與其內容放置在html header內一起傳送到action屬性所指的url位址。使用者看不到這個過程。2 對於get方式,伺...
簡單了解GET和POST的請求區別
1.get 向伺服器獲取 2.post 向伺服器傳遞 3.put 向伺服器傳遞,並讓伺服器新增 4.delete 讓伺服器刪除 5.head 只用於獲取響應頭 6.patch 和put類似,只不過更傾向於更新區域性資料 7.connect 預留方式,管道連線更改為 連線使用 8.options 允許...
post和get區別,其他答案真的太坑
原理 get和post都是http定義與伺服器互動的方法,還有put,delete url是網路上的資源,那麼http中的get,post,put,delete對應的就是對這個資源的查,改,增,刪四個操作,因此會說get一般是用來獲取 查詢伺服器資源資訊,post一般是用於更新伺服器資源資訊。即ge...