- HTTP協(xié)議的主要特點(diǎn)
- HTTP報(bào)文的組成部分
- HTTP方法
- POST和GET的區(qū)別
- HTTP狀態(tài)碼
- 什么是持久連接
- 什么是管線化
一、HTTP協(xié)議的主要特點(diǎn)
- 簡(jiǎn)單快速:每個(gè)資源都是固定的,都有自己的一個(gè)url;
- 靈活:每一個(gè)HTTP協(xié)議中有一個(gè)頭部分,都有一個(gè)數(shù)據(jù)類型,通過一個(gè)HTTP協(xié)議就可以完成不同數(shù)據(jù)類型的傳輸;
- 無連接:連接一次就會(huì)斷掉,不會(huì)保持連接;
- 無狀態(tài):客戶端和服務(wù)端是兩種身份,單從HTTP協(xié)議上是不能區(qū)別兩次連接者的身份的;
二、HTTP報(bào)文的組成部分
- 請(qǐng)求報(bào)文
- 請(qǐng)求行
- HTTP方法
- 頁(yè)面地址
- HTTP協(xié)議以及版本
- 請(qǐng)求頭
- 一些key,value值,來告訴服務(wù)端要哪些內(nèi)容,要什么類型;
- 空行
- 告訴服務(wù)端請(qǐng)求頭結(jié)束了,接下來的內(nèi)容就是請(qǐng)求體了;
- 請(qǐng)求體
- 請(qǐng)求行
- 響應(yīng)豹紋
- 狀態(tài)行
- 響應(yīng)頭
- 空行
- 響應(yīng)體
三、HTTP方法
- GET————獲取資源
- POST————傳輸資源
- PUT————更新資源
- DELETE————?jiǎng)h除資源
- HEAD————獲得報(bào)文首部
四、POST和GET的區(qū)別
- GET在瀏覽器回退時(shí)是無害的,而POST會(huì)再次提交請(qǐng)求(
必須記住); - GET產(chǎn)生的URL地址可以被收藏,而POST不可以;
- GET請(qǐng)求會(huì)被瀏覽器主動(dòng)緩存,而POST不會(huì),除非手動(dòng)設(shè)置(
必須記住); - GET請(qǐng)求只能進(jìn)行url編碼,而POST支持多種編碼方式;
- GET請(qǐng)求參數(shù)會(huì)被完整保留在瀏覽器的歷史記錄中,而POST中的參數(shù)不會(huì)被保留(
必須記住); - GET請(qǐng)求在URL中傳送的參數(shù)是有長(zhǎng)度限制的(一般是2k,不同瀏覽器限制長(zhǎng)度不同),而POST沒有限制(
必須記住); - 對(duì)參數(shù)的數(shù)據(jù)類型,GET只接受ASCII字符,而POST沒有限制;
- GET比POST更不安全,因?yàn)閰?shù)直接暴露在URL上,所以不能用來傳遞敏感信息;
- GET參數(shù)通過URL傳遞,POST放在Request body中(
必須記住);
五、HTTP狀態(tài)碼
- 1XX:指示信息--表示請(qǐng)求已接受收,繼續(xù)處理;
- 2XX:成功--表示請(qǐng)求已被成功接受;
- 200 OK:客戶端請(qǐng)求成功;
- 206 Partial Content:客戶發(fā)送了一個(gè)帶有Range(范圍,例如0-10000字節(jié))頭的GET請(qǐng)求,服務(wù)器完成了它;
- 3XX:重定向--要完成請(qǐng)求必須進(jìn)行更進(jìn)一步的操作;
- 301 Moved Permanently:所請(qǐng)求的頁(yè)面已經(jīng)轉(zhuǎn)移至新的url;
- 302 Found:所請(qǐng)求的頁(yè)面已經(jīng)臨時(shí)轉(zhuǎn)移至新的url;
- 304 Not Modified:客戶端有緩存的文檔并發(fā)出了一個(gè)條件性的請(qǐng)求,服務(wù)器告訴客戶,原來緩存的文檔還可以繼續(xù)使用;
- 4XX:客戶端錯(cuò)誤--請(qǐng)求有語(yǔ)法錯(cuò)誤或請(qǐng)求無法實(shí)現(xiàn);
- 400 Bad Request:客戶端請(qǐng)求有語(yǔ)法錯(cuò)誤,不能被服務(wù)器所理解;
- 401 Unauthorized:請(qǐng)求未經(jīng)授權(quán),這個(gè)狀態(tài)代碼必須和Www-Authenticate報(bào)頭域一起使用;
- 403 Forbidden:對(duì)被請(qǐng)求頁(yè)面的訪問被禁止;
- 404 Not Found:請(qǐng)求資源不存在;
- 5XX:服務(wù)器錯(cuò)誤--服務(wù)器未能實(shí)合法的請(qǐng)求;
- 500 Internal Server Error:服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤原來緩沖的文檔還可以繼續(xù)使用;
- 503 Server Unavailable:請(qǐng)求未完成,服務(wù)器臨時(shí)過載或當(dāng)機(jī),一段時(shí)間后可能恢復(fù)正常;
六、持久連接(HTTP 1.1版本才支持,1.0版本是不支持的)
- HTTP協(xié)議采用"請(qǐng)求-應(yīng)答"模式,當(dāng)使用普通模式,即非Keep-Alive模式時(shí),每個(gè)請(qǐng)求/應(yīng)答客,戶和服務(wù)器都要新建一個(gè)連接,完成之后立即斷開連接(HTTP協(xié)議為無連接的協(xié)議);
- 當(dāng)使用Keep-Alive模式(又稱持久連接、連接重用)時(shí),Keep-Alive功能使客戶端到服務(wù)器端!的連接持續(xù)有效,當(dāng)出現(xiàn)對(duì)服務(wù)器的后繼請(qǐng)求時(shí),Keep-Alive功能避免了建立或者重新建立連接;
七、管線化(我把請(qǐng)求打包一次給你傳輸過去,你也打包一次響應(yīng)過來)
- 理解:
- 在使用
持久連接的情況下,某個(gè)連接上消息的傳遞類似于:
請(qǐng)求1 -> 響應(yīng)1 -> 請(qǐng)求2 -> 響應(yīng)2 -> 請(qǐng)求3 -> 響應(yīng)3 - 某個(gè)連接上的消息變成了類似這樣(管線化):
請(qǐng)求1 -> 請(qǐng)求2 -> 請(qǐng)求3 -> 響應(yīng)1 -> 響應(yīng)2 -> 響應(yīng)3
- 在使用
- 特點(diǎn):
- 管線化機(jī)制通過持久連接完成,僅HTTP/1.1支持此技術(shù);
- 只有GET和HEAD請(qǐng)求可以進(jìn)行管線化,而POST則有所限制;
- 初次創(chuàng)建連接時(shí)不應(yīng)啟動(dòng)管線機(jī)制,因?yàn)閷?duì)方(服務(wù)器)不一定支持HTTP/1.1版本的協(xié)議;
- 管線化不會(huì)影響響應(yīng)到來的順序,如上面的例子所示,響應(yīng)返回的順序并未改變;
- HTTP /1.1要求服務(wù)器端支持管線化,但并不要求服務(wù)器端也對(duì)響應(yīng)進(jìn)行管線化處理,只是要求對(duì)于管線化的請(qǐng)求不失敗即可;
- 由于上面提到的服務(wù)器端問題,開啟管線化很可能并不會(huì)帶來大幅度的性能提升,而且很多服務(wù)器端和代理程序?qū)芫€化的支持并不好,因此現(xiàn)代瀏覽器如Chrome和Firefox默認(rèn)并未開啟管線化支持;