qq對(duì)于HTTP協(xié)議,做Web編程的開(kāi)發(fā)人員再熟悉不過(guò)了。?不論是前端Html頁(yè)面通過(guò)Ajax還是客戶(hù)端通過(guò)?HttpClient?又或服務(wù)端與服務(wù)端之間的Rest請(qǐng)求,這都需要通過(guò)Http協(xié)議完成請(qǐng)求?。在HTTP協(xié)議中,我們最常用的是GET和POST請(qǐng)求,對(duì)于這兩個(gè)方法,應(yīng)該是最基礎(chǔ)的東西。但是,兩者的區(qū)別以及使用場(chǎng)景一直是大家經(jīng)常討論的問(wèn)題,也是在面試中經(jīng)常被問(wèn)到的問(wèn)題。?本文將詳細(xì)介紹HTTP協(xié)議以及GET和POST方法的區(qū)別和使用場(chǎng)景。
HTTP協(xié)議概念以及版本
HTTP是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,由于其簡(jiǎn)捷、快速的方式,非常適用于分布式超媒體信息系統(tǒng)。?HTTP經(jīng)歷了HTTP\0.9、HTTP\1.0、HTTP\1.1和HTTP\2.0的版本?,其中,HTTP\0.9是最早的HTTP協(xié)議,目前已經(jīng)廢棄?。?HTTP\1.0最早使用在簡(jiǎn)單的網(wǎng)頁(yè)和網(wǎng)絡(luò)和請(qǐng)求上。HTTP\1.1發(fā)布于1999年,?增加了緩存處理、帶寬優(yōu)化及網(wǎng)絡(luò)連接的使用、錯(cuò)誤通知的管理、Host頭處理、長(zhǎng)連接等功能?,?這些優(yōu)點(diǎn)使得HTTP\1.1得到了廣泛的使用,它是目前使用最廣泛的協(xié)議。
一個(gè)完整的HTTP請(qǐng)求數(shù)據(jù)主要包括請(qǐng)求行、請(qǐng)求頭部、請(qǐng)求包體?,如下圖所示:
HTTP響應(yīng)數(shù)據(jù)主要包括狀態(tài)行、消息報(bào)頭、響應(yīng)正文?,下圖所示:
HTTP支持的方法
HTTP\0.9版本中只有GET和POST兩種方法。HTTP\1.0中有三種方法:GET、POST和HEAD。HTTP1\.1中增加到了八種方法?,分別為:
- GET?:請(qǐng)求指定的url,獲取響應(yīng)內(nèi)容。GET方法多用來(lái)獲取內(nèi)容而不是提交內(nèi)容。因?yàn)镚ET方法會(huì)暴露請(qǐng)求參數(shù),這是一種不安全的方法。
- POST?:向指定url提交數(shù)據(jù),例如form表單提交、文件上傳等。
- HEAD?:請(qǐng)求指定url,獲取響應(yīng)的頭信息。?HEAD請(qǐng)求時(shí),服務(wù)端并不會(huì)返回響應(yīng)的主體數(shù)據(jù),多用于client查看服務(wù)端的性能?。
- PUT?:與POST方法類(lèi)似,用來(lái)提交數(shù)據(jù)。區(qū)別是PUT方法是冪等的,用來(lái)提交全部信息。(主要是語(yǔ)義上的區(qū)別)
- DELETE?:刪除請(qǐng)求url所標(biāo)識(shí)的資源。
- OPTION?:一般隨POST方法一起發(fā)起(先于POST)。用來(lái)獲取服務(wù)端所支持的方法。?在跨域請(qǐng)求的時(shí)候,OPTION請(qǐng)求會(huì)先發(fā),用來(lái)檢測(cè)該url是否具有權(quán)限訪問(wèn)資源?。
- TRACE?:用戶(hù)測(cè)試HTTP請(qǐng)求,服務(wù)端會(huì)回顯請(qǐng)求的信息。
- CONNECT?:HTTP\1.1預(yù)留的方法。多用于SSL加密服務(wù)器的鏈接。
GET方法和POST方法的區(qū)別
HTTP\1.1的八種方法中,最常用的還是GET和POST方法?。GET和POST方法的使用場(chǎng)景不同,兩者之間有很多不同。這些不同點(diǎn)主要體現(xiàn)在什么地方呢?
- 1、參數(shù)傳遞的方式不同
GET方法請(qǐng)求的時(shí)候,?參數(shù)會(huì)拼接到URL的后面,參數(shù)之間以&相連?,如:login.php?username=xx&password=x,請(qǐng)求參數(shù)會(huì)暴露在瀏覽器中,所以是一種不安全的請(qǐng)求方式,多用來(lái)獲取數(shù)據(jù)。
POST方法請(qǐng)求的時(shí)候,參數(shù)會(huì)放到HTTP的請(qǐng)求體中,對(duì)于用戶(hù)是不可見(jiàn)的,如下圖所示:
雖然請(qǐng)求參數(shù)對(duì)于用戶(hù)是不可見(jiàn)的,但是對(duì)于瀏覽器而言任然是可見(jiàn)的。?我們可以通過(guò)瀏覽器的開(kāi)發(fā)者模式查看POST的請(qǐng)求體,?所以POST方法也是不安全的。
- 2、URL長(zhǎng)度不同
嚴(yán)格來(lái)說(shuō),GET方法和POST方法的請(qǐng)求參數(shù)長(zhǎng)度都是沒(méi)有限制的,?HTTP協(xié)議中并沒(méi)有規(guī)定參數(shù)的長(zhǎng)度?。但是,在瀏覽器和WEB容器中有限制,主要是為了提高URL解析的效率。一般瀏覽器規(guī)定GET請(qǐng)求的時(shí)候,?URL長(zhǎng)度不能大于2000個(gè)字符,POST請(qǐng)求的數(shù)據(jù)不能大于4M?。當(dāng)然不同的瀏覽器和服務(wù)器限制條件不同,可以參照下圖:
所以,為了兼容大多數(shù)的瀏覽器和服務(wù)器,URL參數(shù)保證在2000個(gè)字符以?xún)?nèi)?,這樣,對(duì)于服務(wù)器的壓力也小,可以提升系統(tǒng)的性能。
- 3、安全性不同
GET方法的請(qǐng)求的時(shí)候,參數(shù)暴露在瀏覽器中,用戶(hù)可以明顯的看到參數(shù),這是不安全的請(qǐng)求方式。
POST請(qǐng)求的時(shí)候,參數(shù)隨請(qǐng)求體傳遞。POST方法相對(duì)GET方法安全一些,但不是絕對(duì)的。通過(guò)抓包方式也是可以查看POST的請(qǐng)求參數(shù)的。
- 4、數(shù)據(jù)包不同
GET請(qǐng)求的時(shí)候,產(chǎn)生一個(gè)?TCP?數(shù)據(jù)包。?請(qǐng)求的?header?和data一起發(fā)送出去,服務(wù)端返響應(yīng)具體的狀態(tài)碼。
POST請(qǐng)求的時(shí)候,產(chǎn)生兩個(gè)TCP數(shù)據(jù)包。?先發(fā)送header信息,服務(wù)端響應(yīng)100 continue,瀏覽器再發(fā)送data信息,服務(wù)端響應(yīng)具體的狀態(tài)碼?。
所以說(shuō),GET請(qǐng)求的性能要高于POST請(qǐng)求。但是這種差別幾乎可以忽略不計(jì)。?因?yàn)榫W(wǎng)絡(luò)良好的情況下,兩次包發(fā)送的時(shí)間幾乎等于發(fā)送一次包的時(shí)間(tcp包)?。而且,在某些瀏覽器下,POST請(qǐng)求也只發(fā)一次請(qǐng)求(Firefox)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-472523.html
總結(jié)
本文中主要講解了HTTP協(xié)議的基本概念以及HTTP四個(gè)不同的版本,其中HTTP1.1是目前常用的版本。接著講解了HTTP協(xié)議中規(guī)定的八個(gè)方法以及常用的GET和POST方法的區(qū)別,?二者的區(qū)別主要體現(xiàn)在參數(shù)傳遞、URL長(zhǎng)度、安全性、數(shù)據(jù)包等方面?。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-472523.html
到了這里,關(guān)于基礎(chǔ)知識(shí):HTTP協(xié)議以及GET請(qǐng)求和POST請(qǐng)求的區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!