關於GET和POST的深層理解

2021-09-12 21:03:24 字數 894 閱讀 5102

get是向伺服器發索取資料的一種請求;而post是向伺服器提交資料的一種請求

get引數通過url傳遞,且使用者可以看見;post將表單內容放在request body(請求體)中,對使用者是透明的。

get請求在url中傳遞的引數是有長度限制的,但這並不是http對其的限制,而特定的瀏覽器及伺服器對它的限制;post理論上沒有大小限制,起限制作用的是伺服器的處理程式的處理能力。

get比post更不安全,因為引數直接暴露在url中,所以不能用來傳遞敏感資訊。

get請求只能進行url編碼,而post支援多種編碼方式

get請求引數會被完整保留在瀏覽歷史記錄裡,而post中的引數不會被保留。

get和post都是http協議的兩種傳送請求的方法,而http是基於tcp/ip的通訊協議,因此get和post的底層也是tcp/ip,本質上並沒有區別,只是在http的規定下產生了區別。

get和post還有乙個區別在於,get產生乙個tcp資料報;post產生兩個tcp資料報

原因是:

對於get方式的請求,瀏覽器會把http header和data一併傳送出去,伺服器響應200(返回資料);

而對於post,瀏覽器先傳送header,伺服器響應100 continue,瀏覽器再傳送data,伺服器響應200 ok(返回資料)。

也就是說,get只需要汽車跑一趟就把貨送到了,而post得跑兩趟,第一趟,先去和伺服器打個招呼「嗨,我等下要送一批貨來,你們開啟門迎接我」,然後再回頭把貨送過去。

get與post都有自己的語義,不能隨便混用。

據研究,在網路環境好的情況下,發一次包的時間和發兩次包的時間差別基本可以無視。而在網路環境差的情況下,兩次包的tcp在驗證資料報完整性上,有非常大的優點。

並不是所有瀏覽器都會在post中傳送兩次包,firefox就只傳送一次。

堆和棧深層理解

一 堆和棧的概念區別 堆 是大家共有的空間,分全域性堆和區域性堆。全域性堆就是所有沒有分配的空間,區域性堆就是使用者分配的空間。堆在作業系統對程序 初始化的時候分配,執行過程中也可以向系統要額外的堆,但是記得用完了要還給作業系統,要不然就是記憶體洩漏。堆裡面一般 放的是靜態資料,比如static的資...

關於get和post的理解

如果採用 post 方法,瀏覽器將會按照下面兩步來傳送資料。首先,瀏覽器將與 action 屬性中指定的表單處理伺服器建立聯絡,一旦建立連線之後,瀏覽器就會按分段傳輸的方法將資料傳送給伺服器 在伺服器端,一旦 post 樣式的應用程式開始執行時,就應該從乙個標誌位置讀取引數,而一旦讀到引數,在應用程...

android中Logcat的深層理解

android的開發也可以歸類為嵌入式裝置的開發,即便不是嵌入式開發,依然要注意對記憶體和處理的使用。養成乙個好的習慣對自己的幫助是很大的。在log的原始碼中可以看到這樣的注釋 the order in terms of verbosity,from least to most is error,w...