POST請求與GET請求(面試題)

2021-08-21 07:56:49 字數 3383 閱讀 1794

一、原理區別

http定義了與伺服器互動的不同方法,其中最基本的四種:get,post,put,delete,head,其中get和head被稱為安全方法,因為使用get和head的http請求不會產生什麼動作。不會產生動作意味著get和head的http請求不會在伺服器上產生任何結果。但是安全方法並不是什麼動作都不產生,這裡的安全方法僅僅指不會修改資訊。

二、表現形式區別

搞清楚了兩者的原理區別後,我們來看一下在實際應用中的區別。

首先,我們先看一下http請求的格式:

在http請求中,奇異行必須是乙個請求行,包括請求方法,請求url,報文所用http版本資訊。緊接著是乙個herders小節,可以有零個或乙個首部,用來說明伺服器要使用的附加資訊。在首部之後就是乙個空行,最後就是報文實體的主體部分,包含乙個由任意資料組成的資料塊。但是並不是所有的報文都包含實體的主體部分。

get請求例項:

get 

host: weibo.com

post請求例項:

item=bandsaw 2647接下來看看兩種請求方式的區別:

1、get請求,請求的資料會附加在url之後,以?分割url和傳輸資料,多個引數用&連線。url的編碼格式採用的是ascii編碼,而不是uniclde,即是說所有的非ascii字元都要編碼之後再傳輸。

post請求:post請求會把請求的資料放置在http請求包的包體中。上面的item=bandsaw就是實際的傳輸資料。

因此,get請求的資料會暴露在位址列中,而post請求則不會。

2、傳輸資料的大小

在http規範中,沒有對url的長度和傳輸的資料大小進行限制。但是在實際開發過程中,對於get,特定的瀏覽器和伺服器對url的長度有限制。因此,在使用get請求時,傳輸資料會受到url長度的限制。

對於post,由於不是url傳值,理論上是不會受限制的,但是實際上各個伺服器會規定對post提交資料大小進行限制,apache、iis都有各自的配置。

3、安全性

post的安全性比get的高。這裡的安全是指真正的安全,而不同於上面get提到的安全方法中的安全,上面提到的安全僅僅是不修改伺服器的資料。比如,在進行登入操作,通過get請求,使用者名稱和密碼都會暴露再url上,因為登入頁面有可能被瀏覽器快取以及其他人檢視瀏覽器的歷史記錄的原因,此時的使用者名稱和密碼就很容易被他人拿到了。除此之外,get請求提交的資料還可能會造成cross-site request frogery攻擊

4、http中的get,post,soap協議都是在http上執行的

三、http響應

http響應報文的格式

status,狀態碼描述了請求過程中發生的情況

reson-phrase 是數字狀態碼的可讀版本

常見的狀態碼以及含義如下:

200 ok 伺服器成功處理請求

301/302 moved permanently(重定向)請求的url已移走。響應報文中應該包含乙個location url,說明資源現在所處的位置

304 not modified(未修改) 客戶的快取資源是最新的,要客戶端使用快取內容

404 not found 未找到資源

501 internal server error 伺服器遇到錯誤,使其無法對請求提供服務

http響應示例

hello world!面試題:get和post是http請求的兩種基本方法,它們的區別:

get和post是http請求的兩種基本方法,要說它們的區別,接觸過web開發的人都能說出一二。

最直觀的區別就是get把引數包含在url中,post通過request body傳遞引數。

當你在面試中被問到這個問題,你的內心充滿了自信和喜悅。

你輕輕鬆鬆的給出了乙個「標準答案」:

get在瀏覽器回退時是無害的,而post會再次提交請求。

get產生的url位址可以被bookmark,而post不可以。

get請求會被瀏覽器主動cache,而post不會,除非手動設定。

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

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

get請求在url中傳送的引數是有長度限制的,而post麼有。

對引數的資料型別,get只接受ascii字元,而post沒有限制。

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

get引數通過url傳遞,post放在request body中。

如果我告訴你get和post本質上沒有區別你信嗎?

get和post是什麼?http協議中的兩種傳送請求的方法。

http的底層是tcp/ip。所以get和post的底層也是tcp/ip,也就是說,get/post都是tcp鏈結。get和post能做的事情是一樣一樣的。你要給get加上request body,給post帶上url引數,技術上是完全行的通的。

get和post還有乙個重大區別,簡單的說:

get產生乙個tcp資料報;post產生兩個tcp資料報。

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

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

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

因為post需要兩步,時間上消耗的要多一點,看起來get比post更有效。因此yahoo團隊有推薦用get替換post來優化**效能。但這是乙個坑!跳入需謹慎。為什麼?

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

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

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

現在,當面試官再問你「get與post的區別」的時候,你的內心是不是這樣的

Get請求 Post請求

複製直接用 post同步請求 void synchronourequestbypost post非同步請求 1.方法 void asynchronourequestbypost void connection nsurlconnection connection didreceiveresponse...

get請求 post請求

今天由於群裡的人說出了這個問題,在這裡總結一下,順便加強記憶。get和post是http請求的兩種基本方法,要說它們的區別 直觀的區別就是get把引數包含在url中,post通過request body傳遞引數 本標準答案參考自w3schools 這只是乙個表面的並不是深層的更深一步理解 get和p...

POST 請求 GET請求

get 引數 username 和 password 1.get的請求都拼接在url中 2.後面是跟的引數 前面跟的都是介面 3.引數的形式key value key2 value2 對於get請求 所有得引數都拼接在url中,這樣暴露在外面 會造成資料的不安全 url的長度是有限制的 如果引數過於...