前端當(dāng)中,get和post大家都不會陌生铅鲤,經(jīng)常遇見划提。
但是當(dāng)被問到二者的區(qū)別時(shí),很多都只能簡單的說幾點(diǎn)邢享,今天就讓我們來徹底搞明白鹏往。
首先,我們先看下面這張圖:
從標(biāo)準(zhǔn)上來看骇塘,GET 和 POST 的區(qū)別如下:
GET 用于獲取信息伊履,是無副作用的韩容,且可緩存,通過URL傳遞參數(shù)唐瀑;?
POST 用于修改服務(wù)器上的數(shù)據(jù)群凶,有副作用,不可緩存介褥,參數(shù)放在request body中座掘。
GET和POST本質(zhì)上就是T C P 鏈接递惋,并無差別柔滔。但是由于HTTP的規(guī)定和瀏覽器/服務(wù)器的限制,導(dǎo)致他們在應(yīng)用過程中體現(xiàn)出一些不同萍虽。
GET睛廊、POST 請求報(bào)文上的區(qū)別:
GET 和 POST 只是 HTTP 協(xié)議中兩種請求方式(異曲同工),而 HTTP 協(xié)議是基于 TCP/IP 的應(yīng)用層協(xié)議杉编,無論 GET 還是 POST超全,用的都是同一個傳輸層協(xié)議,所以在傳輸上邓馒,沒有區(qū)別嘶朱。
說到請求報(bào)文,本人是有點(diǎn)懵的光酣,于是參考了各位大佬的文章之后疏遏,總結(jié)如下:
HTTP請求報(bào)文:
HTTP請求報(bào)文主要由請求行、請求頭救军、請求體組成
1.請求行
由3部分組成财异,分別為:請求方法、URL以及協(xié)議版本唱遭,之間由空格分隔戳寸。
請求方法包括GET、HEAD拷泽、PUT疫鹊、POST、TRACE(追溯)司致、OPTIONS拆吆、DELETE以及擴(kuò)展方法,當(dāng)然并不是所有的服務(wù)器都實(shí)現(xiàn)了所有的方法蚌吸,部分方法即便支持锈拨,處于安全性的考慮也是不可用的。
協(xié)議版本的格式為:HTTP/主版本號.次版本號羹唠,常用的有HTTP/1.0和HTTP/1.1
2.請求頭
HTTP客戶程序(例如瀏覽器)奕枢,向服務(wù)器發(fā)送請求的時(shí)候必須指明請求類型(一般是GET或者 POST)
常見的請求頭字段含義:
Accept: 瀏覽器可接受的MIME類型娄昆。
Accept-Charset:瀏覽器可接受的字符集。
Accept-Encoding:瀏覽器能夠進(jìn)行解碼的數(shù)據(jù)編碼方式缝彬,比如gzip萌焰。Servlet能夠向支持gzip的瀏覽器返回經(jīng)gzip編碼的HTML頁面。許多情形下這可以減少5到10倍的下載時(shí)間谷浅。
Accept-Language:瀏覽器所希望的語言種類扒俯,當(dāng)服務(wù)器能夠提供一種以上的語言版本時(shí)要用到。
Authorization:授權(quán)信息一疯,通常出現(xiàn)在對服務(wù)器發(fā)送的WWW-Authenticate頭的應(yīng)答中撼玄。
Content-Length:表示請求消息正文的長度。
Host: 客戶機(jī)通過這個頭告訴服務(wù)器墩邀,想訪問的主機(jī)名掌猛。Host頭域指定請求資源的Intenet主機(jī)和端口號,必須表示請求url的原始服務(wù)器或網(wǎng)關(guān)的位置眉睹。HTTP/1.1請求必須包含主機(jī)頭域荔茬,否則系統(tǒng)會以400狀態(tài)碼返回。
Cookie:客戶機(jī)通過這個頭可以向服務(wù)器帶數(shù)據(jù)竹海,這是最重要的請求頭信息之一慕蔚。
請求頭部的最后會有一個空行,表示請求頭部結(jié)束斋配,接下來為請求正文孔飒,這一行非常重要,必不可少许起。
3.請求體
若方法字段是GET十偶,則此項(xiàng)為空,沒有數(shù)據(jù)
若方法字段是POST,則通常來說此處放置的就是要提交的數(shù)據(jù)园细。
比如要使用POST方法提交一個表單惦积,其中有user字段中數(shù)據(jù)為“admin”, password字段為123456,那么這里的請求數(shù)據(jù)就是 user=admin&password=123456猛频,使用&來連接各個字段狮崩。
總的來說,HTTP請求報(bào)文格式就如下圖所示: