GET和POST的區(qū)別

前言

??相信大多數(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請求無長度限制。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容