HTTP協(xié)議的主要特點
- 簡單快速
- 靈活
- 無連接
- 無狀態(tài)
HTTP報文的組成部分
請求報文
- 請求行(包含HTTP方法穿稳、頁面地址坝橡、HTTP協(xié)議蜒茄、HTTP版本)
- 請求頭
- 空行
- 請求體
響應(yīng)報文
- 狀態(tài)行
- 響應(yīng)頭
- 空行
- 響應(yīng)體
HTTP方法
- GET(獲取資源)
- POST(傳輸資源)
- PUT(更新資源)
- DELETE(刪除資源)
- HEAD(獲取報文首部)
POST和GET的區(qū)別
- GET在瀏覽器回退時是無害的蚊丐,而POST會再次提交請求
- GET產(chǎn)生的URL地址可以被收藏丧慈,而POST不可以
- GET請求會被瀏覽器主動緩存耸采,而POST不會兴泥,除非主動設(shè)置
- GET請求只能進行URL編碼,而POST支持多種編碼方式
- GET請求參數(shù)會被完整保留在瀏覽器的歷史記錄里虾宇,而POST的參數(shù)不會保留
- GET請求在URL中傳送的參數(shù)是有長度限制的搓彻,而POST沒有限制
- 對請求的數(shù)據(jù)類型,GET只接受ASCII字符嘱朽,而POST沒有限制
- GET比POST更不安全旭贬,因為參數(shù)直接暴露在URL上,所以不能傳遞敏感信息
- GET參數(shù)通過URL傳遞搪泳,POST放在Request body中
HTTP狀態(tài)碼
1xx:指示信息——表示請求已接收骑篙,繼續(xù)處理
-
2xx:成功——表示請求已被成功接收
- 200 OK:客戶端請求成功
- 206 Partial Content:客戶端發(fā)送了一個帶有Range頭的GET請求,服務(wù)器完成了它
-
3xx:重定向——要完成請求必須進行更進一步的操作
- 301 Moved Permanently:所請求的頁面已經(jīng)轉(zhuǎn)移至新的url
- 302 Found:所請求的頁面已經(jīng)臨時轉(zhuǎn)移至新的url
- 304 Not Modified:客戶端有緩沖的文檔并發(fā)出了一個條件性的請求森书,服務(wù)器告訴客戶靶端,原來的緩沖文檔還可以使用
-
4xx:客戶端錯誤——請求有語法錯誤或請求無法實現(xiàn)
- 403 Forbidden:請求的頁面訪問被禁止
- 404 Not Found:請求資源不存在
-
5xx:服務(wù)器錯誤——服務(wù)器未能實現(xiàn)合法的請求
- 500 Internal Server Error:服務(wù)器發(fā)生不可預(yù)期的錯誤原來的緩沖文檔還可以繼續(xù)使用
- 503 Server Unavailable:請求未完成,服務(wù)器臨時過載或宕機凛膏,一段時間后可能恢復(fù)正常
持久連接
HTTP協(xié)議采用“請求-應(yīng)答”模式杨名,當(dāng)使用普通模式,即非 Keep-Alive 模式時猖毫,每個請求/應(yīng)答客戶和服務(wù)器都要新建一個連接台谍,完成后立即斷開連接(HTTP協(xié)議為無連接的協(xié)議)
當(dāng)使用 Keep-Alive 模式時, Keep-Alive 功能使客戶端到服務(wù)器端的連接持續(xù)有效吁断,當(dāng)出現(xiàn)對服務(wù)器的后續(xù)請求時趁蕊, Keep-Alive 功能避免了建立或重新建立連接(HTTP/1.1 后開始支持)
管線化
當(dāng)使用持久連接時坞生,某個連接上的消息傳遞類似于:
請求1->響應(yīng)1->請求2->響應(yīng)2->請求3->響應(yīng)3
當(dāng)使用管線化的時候,不向上面那樣請求一次響應(yīng)一次掷伙,而是把現(xiàn)在所有的請求打包一起發(fā)送給服務(wù)端是己,而服務(wù)端也把所有的響應(yīng)一起打包響應(yīng)發(fā)送。
請求1->請求2->請求3->響應(yīng)1->響應(yīng)2->響應(yīng)3
管線化特點
- 管線化機制通過持久連接完成任柜,僅HTTP/1.1及后續(xù)版本支持此技術(shù)
- 只有GET和HEAD請求可以進行管線化卒废,而POST請求有所限制
- 初次連接時不應(yīng)啟動管線化機制,因為對方(服務(wù)器)不一定支持HTTP/1.1
- 管線化不會影響響應(yīng)到來的順序