HTTP協議

主要特點

特點 描述
簡單快速 客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯繫的類型不同。由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。
靈活 HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type(數據類型)加以標記
無連接 服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。
無狀態 HTTP是一個無狀態協議,這意味着每個請求都是獨立的,Keep-Alive沒能改變這個結果。單平請求時無法記錄上一次和這一次是不是同一個請求,所以引入cookie和session

報文組成部分

報文 組成
請求報文 請求行、請求頭、空行、請求體
響應報文 狀態行、響應頭、空行、響應體

1.請求行

由3部分組成,分別爲:請求方法、URL(見備註1)以及協議版本,之間由空格分隔

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

協議版本的格式爲:HTTP/主版本號.次版本號,常用的有HTTP/1.0和HTTP/1.1

2.請求頭部

請求頭部爲請求報文添加了一些附加信息,由“名/值”對組成,每行一對,名和值之間使用冒號分隔

常見請求頭如下:

請求頭 說明
Host 接受請求的服務器地址,可以是IP:端口號,也可以是域名
User-Agent 發送請求的應用程序名稱
Connection 指定與連接相關的屬性,如Connection:Keep-Alive
Accept-Charset 通知服務端可以發送的編碼格式
Accept-Encoding 通知服務端可以發送的數據壓縮格式
Accept-Language 通知服務端可以發送的語言

3.空行
請求頭部的最後會有一個空行,表示請求頭部結束

4.請求體
就是發過去的數據

1.狀態行

由3部分組成,分別爲:協議版本,狀態碼,狀態碼描述,之間由空格分隔

狀態代碼爲3位數字,200~299的狀態碼錶示成功,300~399的狀態碼指資源重定向,400~499的狀態碼指客戶端請求出錯,500~599的狀態碼指服務端出錯(HTTP/1.1向協議中引入了信息性狀態碼,範圍爲100~199)
例子:

狀態碼 說明
200 響應成功
302 跳轉,跳轉地址通過響應頭中的Location屬性指定(JSP中Forward和Redirect之間的區別)
400 客戶端請求有語法錯誤,不能被服務器識別
403 服務器接收到請求,但是拒絕提供服務(認證失敗)
404 請求資源不存在
500 服務器內部錯誤

2.響應頭

請求頭 說明
Server 服務器應用程序軟件的名稱和版本
Content-Type 響應正文的類型(是圖片還是二進制字符串)
Content-Length 響應正文長度
Content-Charset 響應正文使用的編碼
Content-Encoding 響應正文使用的數據壓縮格式
Content-Language 響應正文使用的語言

3.空行
響應頭部的最後會有一個空行,表示響應頭部結束

4.響應體
返回數據

HTTP方法種類

方法名 方法用途
GET 獲取資源
POST 傳輸資源
PUT 更新資源
DELETE 刪除資源
HEAD 獲得報文頭部

持久鏈接

HTTP協議採用“請求-應答”模式,當時用普通模式,即非Keep-Alive模式時,每個請求/應答客戶和服務器都要新建一個鏈接,完成之後立即斷開(HTTP下一爲無連接協議)

但是當使用Keep-Alive模式(持久鏈接、連接重用)時,Keep-Alive功能使客戶端到服務器端的連接持續有效,當出現對服務器 的後續請求時,Keep-Alive功能避免了簡歷或者重新建立連接

管線化

默認情況下http協議中每個傳輸層連接只能承載一個http請求和響應,然後結束。

  • 管線化機制通過持久鏈接完成,僅HTTP/1.1支持此技術
  • 只有Get和HEAD請求可以進行管線化,而POST則有所限制
  • 初次創建連接時不起動管線機制,因爲對方(服務器)不一定支持HTTP/1.1版本協議
  • 管線化不會影響響應到來的順序
  • HTTP/1.1要求服務器端支持管線化,但並不要求服務器端也對相應進行管線化處理,只是要求對於管線化的請求不失敗即可
  • 由於上面提到的服務器端問題,開啓管線化很可能並不會帶來大幅度的性能提升,而且很多服務器端和代理程序對管線化的支持並不好,因此Chrome和Firefox默認並不開啓管線化支持
發佈了39 篇原創文章 · 獲贊 6 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章