本系列第一節,咱們回顧了與HTTP協議有關的基本術語和概念,本文將分析HTTP協議的基本原理與機制html
HTTP協議的用途
HTTP協議用於客戶端與服務器之間的通訊,在通訊線路兩端,一定一端是客戶端,另外一端是服務器。
注意:客戶端與服務器的角色不是固定的,一端充當客戶端,也可能在某次請求中充當服務器。這取決與請求的發起端。HTTP協議屬於應用層,創建在傳輸層協議TCP之上。客戶端經過與服務器創建TCP鏈接,以後發送HTTP請求與接收HTTP響應都是經過訪問Socket接口來調用TCP協議實現。安全
請求報文服務器
GET /index.html HTTP/1.1 Host: www.cnblogs.com/ACFLOOD Content-Length: 16
請求報文是由請求方法,請求URI,協議版本,可選的首部字段以及內容實體構成。session
本例中,GET表示請求方法,/index.jsp是請求URI,HTTP/1.1是協議版本,其他的是首部字段。響應報文less
HTTP/1.1 200 OK Date: Mon, 10 May 2016 07:50:15 GMT Content-Length: 300 Content-Type: text/html
響應報文基本上由協議版本,狀態碼(返回請求成功或失敗狀況),對狀態碼的解釋短語,可選的首部字段以及內容實體構成。jsp
本例中,HTTP/1.1表示協議版本,200表示狀態碼,OK是對狀態碼的描述,Date是響應日期,與Content-Length和Content-Type同樣,都屬於首部字段。加密
HTTP是無狀態協議3d
HTTP是一種無狀態(stateless) 協議,HTTP協議自己不會對發送過的請求和相應的通訊狀態進行持久化處理。這樣作的目的是爲了保持HTTP協議的簡單性,從而可以快速處理大量的事務,提升效率。代理
然而,在許多應用場景中,咱們須要保持用戶登陸的狀態或記錄用戶購物車中的商品。因爲HTTP是無狀態協議,因此必須引入一些技術來記錄管理狀態,例如Cookie。code
HTTP方法
在第一節,咱們曾辨析過GET與POST方法。實際上經常使用的HTTP方法遠不止這些,下圖展現了基本的HTTP方法。OPTIONS:詢問服務器支持哪些方法。示例
請求報文
OPTIONS * HTTP/1.1 Host: www.cnblogs.com
響應報文
HTTP/1.1 200 OK Allow: GET, POST, HEAD, OPTIONS本例中,客戶端經過OPTIONS *詢問服務器支持的方法。響應報文最後返回了支持的 方法類型。
CONNECT:經過與代理服務器創建隧道,使用隧道協議加密以後,與服務器進行TCP通訊。經常使用的隧道協議有SSL(Secure Socket Layer)以及TLS(Transport Layer Security)。
非持久鏈接 和 持久鏈接
在實際的應用中,客戶端每每會發出一系列請求,接着服務器端對每一個請求進行響應。對於這些請求|響應,若是每次都通過一個單獨的TCP鏈接發送,稱爲非持久鏈接。反之,若是每次都通過相同的TCP鏈接進行發送,稱爲持久鏈接。
非持久鏈接在每次請求|響應以後都要斷開鏈接,下次再創建新的TCP鏈接,這樣就形成了大量的通訊開銷。例如前面提到的往返時間(RTT) 就是在創建TCP鏈接的過程當中的代價。
非持久鏈接給服務器帶來了沉重的負擔,每臺服務器可能同時面對數以百計甚至更多的請求。持久鏈接就是爲了解決這些問題,其特色是一直保持TCP鏈接狀態,直到遇到明確的中斷要求以後再中斷鏈接。持久鏈接減小了通訊開銷,節省了通訊量。
圖 持久化鏈接節省通訊開銷
總結
本文分析了基本的HTTP運行機制與原理,經過一些實例分析了HTTP請求與響應的過程,以及常見的HTTP方法。對於HTTP鏈接的特性與機制也進行了探討。固然這些只是簡單的創建起基礎的概念。後續的系列我還會對Cookie與session的原理,請求發起的過程以及Socket(套接字)的理,HTTP解析的過程進行深刻思考和剖析。
做者: I'm coding
連接:ACFLOOD
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
若是您以爲本文對您有所幫助,就給俺點個贊吧!