w3school標準答案

精髓來了:
get和post是HTTP協議中兩種發送請求的方法,
HTTP是基于TCP/IP的關于資料如何在萬維網中如何通信的協議
HTTP的底層是TCP/IP,所以get和post的底層也是TCP/IP,也就是說,get/post都是TCP連接,
get和post能做的事情是一樣的,如果給get加上request body,給post帶上url引數,技術上完全可以行的通,
TCP就好像汽車,我們用汽車來運輸資料,它很可靠,從來不會發生什么丟少物件的事情,但是如果路上跑的車都是相同的,那世界就會是一團亂麻,
送急件的汽車可能被前面裝載貨物的汽車攔堵在路上,于是交通規則就產生了---http協議
HTTP給汽車運輸設定了好幾個服務類別,有get,post,put,delete.
于是,規定:當執行get請求的時候,要貼上“GET”標簽,將貨物放在車頂(url).
執行post請求的時候,要貼上“POST”標簽,將貨物放在車廂(request body)中,
當然,你開get車,將貨物放在車廂里,也可以開post車時,將貨物放在車頂,
HTTP只是個行為準測,TCP才是實作POST AND GET的方法,
整個交通系統中,還包含了另一個重要的角色:運輸公司,不同的瀏覽器(發送http請求)和服務器(接受http請求)就是不同的運輸公司,雖然可以在車頂上或者車廂中無限制的放置貨物,但是瀏覽器通常都會限制url的長度,在2k個位元組,服務器最多處理64k的url,超過的部分,恕不處理,
舉例說明:倘若你用GET方法,卻在車廂(request body)中放置貨物,不同服務器的處理方式也是不同的,有的幫忙卸載資料,有的就直接忽略,
結論:雖然GET可以帶request body,但不一定保證會被接收,
GET和POST本質上就是TCP連接,并無差別,是因為HTTP協議規定和瀏覽器和服務器的限制導致了她們在應用程序中體現出一些不同,
GET和POST還有一個重大的區別就是:GET產生一個資料包,POST產生兩個資料包,
解釋一下,就是:GET將http header 和data一起發送出去,服務器回應200
POST將http header 先發送出去,服務器回應100 continue ,瀏覽器在在發送data,服務器回應200,
因為POST需要兩步,所以看起來GET比POST更加有效果,
但是:在網路較差的時候,兩次包的TCP在驗證資料包的完整性上,有非常大的優點,
并不是所有的瀏覽器中都會給POST發送2次包的,firefox就只發送一次,
至于面試,老老實實回答還是有必要的,暫時為以下答案:
- get在瀏覽器回退時是無害的,而post會再次請求
- get產生的url地址可以被收藏,而post不會
- get請求會被瀏覽器主動快取,而post不會,除非手動設定
- get請求只能進行url編碼,而post支持多種編碼方式
- get請求引數會被完整保留在瀏覽歷史記錄里,而post中的引數不會被保留
- get 請求在url中傳送的引數有長度限制,而post沒有
- 對引數的資料型別,get只接受ascll字符,而post沒有限制
- get沒有post安全,因為引數直接暴露在url上,所以不能用來傳遞敏感資訊
- get引數通過url傳遞,post放在request body中
(記不住全部的,重點回答出1,2,5,6,9這幾點即可)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/10560.html
標籤:其他
