get 和 post請求的區別

2021-09-19 16:08:42 字數 2330 閱讀 5126

使用上的區別

方法get

post

後退按鈕/重新整理

無害資料會被重新提交(瀏覽器應該告知使用者資料會被重新提交)。

書籤可收藏為書籤

不可收藏為書籤

快取能被快取

不能快取

編碼型別

歷史引數保留在瀏覽器歷史中。

引數不會儲存在瀏覽器歷史中。

對資料長度的限制

是的。當傳送資料時,get 方法向 url 新增資料;url 的長度是受限制的(url 的最大長度是 2048 個字元)。

無限制。

對資料型別的限制

只允許 ascii 字元。

沒有限制。也允許二進位制資料。

安全性與 post 相比,get 的安全性較差,因為所傳送的資料是 url 的一部分。在傳送密碼或其他敏感資訊時絕不要使用 get !

post 比 get 更安全,因為引數不會被儲存在瀏覽器歷史或 web 伺服器日誌中。

可見性資料在 url 中對所有人都是可見的。

資料不會顯示在 url 中。

造成使用區別的原因

get使用url或cookie傳參,而post將資料放在body中。這個是因為http協議用法的約定。並非它們的本身區別。

get方式提交的資料有長度限制,則post的資料則可以非常大。這個是因為它們使用的作業系統和瀏覽器設定的不同引起的區別。也不是get和post本身的區別。

post比get安全,因為資料在位址列上不可見。這個說法沒毛病,但依然不是get和post本身的區別。

rfc(徵求意見稿),specification(規範),implementation(實現),semantic(語義)

徵求意見稿(英語:request for comments,縮寫為rfc),是由網際網路工程任務組(ietf)發布的一系列備忘錄。檔案收集了有關網際網路相關資訊,以及unix和網際網路社群的軟體檔案,以編號排定。目前rfc檔案是由網際網路協會(isoc)贊助發行。

semantic(語義)

一種語言是合法句子的集合。什麼樣的句子是合法的呢?可以從兩方面來判斷:語法和語義。語法是和文法結構有關,然而語義是和按照這個結構所組合的單詞符號的意義有關。合理的語法結構並不表明語義是合法的。例如我們常說:我上大學,這個句子是符合語法規則的,也符合語義規則。但是大學上我,雖然符合語法規則,但沒有什麼意義,所以說是不符合語義的。

rfc7231裡緊接著定義了http方法的幾個特性

safe - 安全

這裡的「安全」和通常理解的「安全」意義不同,如果乙個方法的語義在本質上是「唯讀」的,那麼這個方法就是安全的。客戶端向服務端的資源發起的請求如果使用了是安全的方法,就不應該引起服務端任何的狀態變化,因此也是無害的。 此rfc定義,get, head, options 和 trace 這幾個方法是安全的。

但是這個定義只是規範,並不能保證方法的實現也是安全的,服務端的實現可能會不符合方法語義,正如上文說過的使用get修改使用者資訊的情況。

引入安全這個概念的目的是為了方便網路爬蟲和快取,以免呼叫或者快取某些不安全方法時引起某些意外的後果。user agent(瀏覽器)應該在執行安全和不安全方法時做出區分對待,並給使用者以提示。

idempotent - 冪等

冪等的概念是指同乙個請求方法執行多次和僅執行一次的效果完全相同。按照rfc規範,put,delete和安全方法都是冪等的。同樣,這也僅僅是規範,服務端實現是否冪等是無法確保的。

引入冪等主要是為了處理同乙個請求重**送的情況,比如在請求響應前失去連線,如果方法是冪等的,就可以放心地重發一次請求。這也是瀏覽器在後退/重新整理時遇到post會給使用者提示的原因:post語義不是冪等的,重複請求可能會帶來意想不到的後果。

cacheable本質區別

要理解這兩個方法的區別,本質上是「語義」的對比而不是「語法」的對比,是「specification」的對比而不是「implementation」的對比 。

get的語義是請求獲取指定的資源。get方法是安全、冪等、可快取的(除非有 cache-control header的約束),get方法的報文主體沒有任何語義。

post的語義是根據請求負荷(報文主體)對指定的資源做出處理,具體的處理方式視資源型別而不同。post不安全,不冪等,(大部分實現)不可快取。為了針對其不可快取性,有一系列的方法來進行優化,以後有機會再研究(flag已經立起)。

Get和Post請求區別

get和post是什麼?http協議中的兩種傳送請求的方法。http是什麼?http是基於tcp ip的關於資料如何在全球資訊網中如何通訊的協議。http的底層是tcp ip。所以get和post的底層也是tcp ip,也就是說,get post都是tcp鏈結。get和post能做的事情是一樣一樣的...

GET 和 POST 請求區別

1 get是從伺服器上獲取資料。2 post是向伺服器傳送資料。1 get是把引數資料佇列加到提交表單的action屬性所指的url中,值和表單內各個字段一一對應,在url中可以看到。2 post是通過http post機制,將表單內各個字段與其內容放置在html header內一起傳送到actio...

get和post請求區別

get和post請求區別 1 get產生乙個tcp資料報 post產生兩個tcp資料報。對於get方式的請求,瀏覽器會把http header和data一併傳送出去,伺服器響應200 返回資料 而對於post,瀏覽器先傳送header,伺服器響應100 continue,瀏覽器再傳送data,伺服器...