post和get請求的區(qū)別

前端當中,get和post大家都不會陌生,經(jīng)常遇見。

但是當被問到二者的區(qū)別時,很多都只能簡單的說幾點,今天就讓我們來徹底搞明白。


首先,我們先看下面這張圖:

從標準上來看,GET 和 POST 的區(qū)別如下:

GET 用于獲取信息,是無副作用的,且可緩存,通過URL傳遞參數(shù);?

POST 用于修改服務器上的數(shù)據(jù),有副作用,不可緩存,參數(shù)放在request body中。

GET和POST本質(zhì)上就是T C P 鏈接,并無差別。但是由于HTTP的規(guī)定和瀏覽器/服務器的限制,導致他們在應用過程中體現(xiàn)出一些不同。

GET、POST 請求報文上的區(qū)別:

GET 和 POST 只是 HTTP 協(xié)議中兩種請求方式(異曲同工),而 HTTP 協(xié)議是基于 TCP/IP 的應用層協(xié)議,無論 GET 還是 POST,用的都是同一個傳輸層協(xié)議,所以在傳輸上,沒有區(qū)別。

說到請求報文,本人是有點懵的,于是參考了各位大佬的文章之后,總結(jié)如下:

HTTP請求報文:

HTTP請求報文主要由請求行、請求頭、請求體組成

1.請求行

由3部分組成,分別為:請求方法、URL以及協(xié)議版本,之間由空格分隔。

請求方法包括GET、HEAD、PUT、POST、TRACE(追溯)、OPTIONS、DELETE以及擴展方法,當然并不是所有的服務器都實現(xiàn)了所有的方法,部分方法即便支持,處于安全性的考慮也是不可用的。

協(xié)議版本的格式為:HTTP/主版本號.次版本號,常用的有HTTP/1.0和HTTP/1.1

2.請求頭

HTTP客戶程序(例如瀏覽器),向服務器發(fā)送請求的時候必須指明請求類型(一般是GET或者 POST)

常見的請求頭字段含義:

Accept: 瀏覽器可接受的MIME類型。

Accept-Charset:瀏覽器可接受的字符集。

Accept-Encoding:瀏覽器能夠進行解碼的數(shù)據(jù)編碼方式,比如gzip。Servlet能夠向支持gzip的瀏覽器返回經(jīng)gzip編碼的HTML頁面。許多情形下這可以減少5到10倍的下載時間。

Accept-Language:瀏覽器所希望的語言種類,當服務器能夠提供一種以上的語言版本時要用到。

Authorization:授權(quán)信息,通常出現(xiàn)在對服務器發(fā)送的WWW-Authenticate頭的應答中。

Content-Length:表示請求消息正文的長度。

Host: 客戶機通過這個頭告訴服務器,想訪問的主機名。Host頭域指定請求資源的Intenet主機和端口號,必須表示請求url的原始服務器或網(wǎng)關(guān)的位置。HTTP/1.1請求必須包含主機頭域,否則系統(tǒng)會以400狀態(tài)碼返回。

Cookie:客戶機通過這個頭可以向服務器帶數(shù)據(jù),這是最重要的請求頭信息之一。

請求頭部的最后會有一個空行,表示請求頭部結(jié)束,接下來為請求正文,這一行非常重要,必不可少。

3.請求體

若方法字段是GET,則此項為空,沒有數(shù)據(jù)

若方法字段是POST,則通常來說此處放置的就是要提交的數(shù)據(jù)。

比如要使用POST方法提交一個表單,其中有user字段中數(shù)據(jù)為“admin”, password字段為123456,那么這里的請求數(shù)據(jù)就是 user=admin&password=123456,使用&來連接各個字段。

總的來說,HTTP請求報文格式就如下圖所示:

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

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

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