前言
??相信大多數(shù)本行人士對于這個問題都不會太陌生,畢竟這個問題已經(jīng)不是老生常談這個詞能夠形容的了,尤其是在面試時,大多數(shù)面試官都會選擇拋出這個問題來考查應(yīng)聘者的能力深淺。以下是博主通過查閱相關(guān)資料整理得到的一些見解。
來源
??首先,在了解GET和POST的區(qū)別之前,你需要知道這兩個概念來源于何處。它們是HTTP協(xié)議的兩種請求方法,所謂HTTP協(xié)議(HyperText Transfer Protocol,超文本傳輸協(xié)議)是指因特網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)傳輸協(xié)議,所有的WWW文件都必須遵守這個標準。它是基于TCP/IP通信協(xié)議來傳遞數(shù)據(jù)(HTML 文件, 圖片文件, 查詢結(jié)果等)。
HTTP工作原理
??HTTP協(xié)議工作于客戶端-服務(wù)端架構(gòu)上。瀏覽器作為HTTP客戶端通過URL向HTTP服務(wù)端即WEB服務(wù)器發(fā)送所有請求。
Web服務(wù)器有:Apache服務(wù)器,IIS服務(wù)器(Internet Information Services)等。
Web服務(wù)器根據(jù)接收到的請求后,向客戶端發(fā)送響應(yīng)信息。
HTTP默認端口號為80,但是你也可以改為8080或者其他端口。
HTTP三點注意事項:
- HTTP是無連接:無連接的含義是限制每次連接只處理一個請求。服務(wù)器處理完客戶的請求,并收到客戶的應(yīng)答后,即斷開連接。采用這種方式可以節(jié)省傳輸時間。
- HTTP是媒體獨立的:這意味著,只要客戶端和服務(wù)器知道如何處理的數(shù)據(jù)內(nèi)容,任何類型的數(shù)據(jù)都可以通過HTTP發(fā)送。客戶端以及服務(wù)器指定使用適合的MIME-type內(nèi)容類型。
- HTTP是無狀態(tài):HTTP協(xié)議是無狀態(tài)協(xié)議。無狀態(tài)是指協(xié)議對于事務(wù)處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務(wù)器不需要先前信息時它的應(yīng)答就較快。
HTTP消息結(jié)構(gòu)
??HTTP是基于客戶端/服務(wù)端(C/S)的架構(gòu)模型,通過一個可靠的鏈接來交換信息,是一個無狀態(tài)的請求/響應(yīng)協(xié)議。
-
客戶端請求消息
??客戶端發(fā)送一個HTTP請求到服務(wù)器的請求消息包括以下格式:請求行(request line)、請求頭部(header)、空行和請求數(shù)據(jù)四個部分組成。
image -
服務(wù)器響應(yīng)消息
??HTTP響應(yīng)也由四個部分組成,分別是:狀態(tài)行、消息報頭、空行和響應(yīng)正文。
image
HTTP中的GET和POST請求
??根據(jù)官方文獻中介紹,GET是請求指定的頁面信息,并返回實體主體;POST是向指定資源提交數(shù)據(jù)進行處理請求(例如提交表單或者上傳文件),數(shù)據(jù)被包含在請求體中。POST請求可能會導(dǎo)致新的資源的建立和/或已有資源的修改。
??綜上,可以明確一點,GET和POST最本質(zhì)的區(qū)別就是GET是請求數(shù)據(jù)并獲得,而POST是提交數(shù)據(jù)進行處理請求。
GET和POST的區(qū)別
??或許有人會問說了這么多,終于說到正題了,沒錯,以下就是你想要的答案。
GET是用來向獲取服務(wù)器信息的,請求報文傳輸?shù)男畔⒅皇怯糜诿枋鏊栀Y源的參數(shù),返回的信息才是數(shù)據(jù)本身;POST是用來向服務(wù)器傳遞數(shù)據(jù)的,其請求報文傳遞的信息就是數(shù)據(jù)本身,返回的報文只是操作的結(jié)果。
使用HTTP報文體段傳輸?shù)腜OST報文比使用URL傳遞的GET更加安全,因為不會被泄露在地址欄上,所以 POST的安全性比GET高,而這個高也僅僅是高那么一點點,因為只要凡有一些WEB安全意識或者HTTP抓包經(jīng)驗的行業(yè)人員都會明白,能抓到或會留有URL痕跡的地方,數(shù)據(jù)的傳遞信息基本暴露無遺,所以要想數(shù)據(jù)能夠絕對安全就必須經(jīng)過加密處理。
GET是冪等的,POST不是冪等的。 冪等的含義是多次請求,效果一致。多數(shù)瀏覽器對于POST采用兩階段發(fā)送數(shù)據(jù)的,先發(fā)送請求頭,再發(fā)送請求體,即使參數(shù)再少再短,也會被分成兩個步驟來發(fā)送(相對于GET),也就是第一步發(fā)送header數(shù)據(jù),第二步再發(fā)送body部分。
GET請求能夠被cache,GET請求能夠被保存在瀏覽器的瀏覽歷史里面(密碼等重要數(shù)據(jù)GET提交,別人查看歷史記錄,就可以直接看到這些私密數(shù)據(jù)),POST則不進行緩存。
HTTP協(xié)議本身沒有限制傳遞信息的最大值,所謂的請求長度限制是由瀏覽器和 web 服務(wù)器決定和設(shè)置的,各種瀏覽器和 web 服務(wù)器的設(shè)定均不一樣,這依賴于各個瀏覽器廠家的規(guī)定或者可以根據(jù) web 服務(wù)器的處理能力來設(shè)定。一般而言,GET的長度限制更短,通常不超過2k,而POST請求無長度限制。

