9、基於HTTP的功能追加協議
一、基於HTTP的協議
在創建HTTP標註規範時,制定者主要想把它當作傳輸HTML文檔的協議。現在,web的用途更具多樣性,但因爲HTTP協議上的限制以及自身性能有限,在性能上卻未必最優。因爲基於HTTP的web瀏覽器的使用環境已遍及全球,沒法徹底拋棄它,因此一些新協議的規則都是基於HTTP的。
二、消除HTTP瓶頸的SPDY
(1)HTTP的瓶頸:
1)一條鏈接上只可發送一個請求。
2)請求只能從客戶端開始。客戶端不能夠接收除響應之外的指令。
3)請求/響應首部未經壓縮就發送。首部信息越多延遲越大。
4)發送冗長的首部。每次互相發送相同的首部形成的浪費較多。
5)可任意選擇數據壓縮格式。非強制壓縮發送。
解決方法:
1)Ajax(Asynchronous JavaScript and XML,異步JavaScript與XML技術)
實現局部Web頁面替換加載的異步通訊,響應中傳輸的數據量會所以而減小。
可是利用Ajax有可能會致使大量請求產生,並且仍未解決HTTP協議自己存在的問題。
2)Comet
一般,服務器端接收到請求,在處理完畢後就會當即返回響應,但爲了實現推送功能,Comet會先將響應置於掛起狀態,當服務器端有內容更新時,再返回該響應。
可是爲了保留響應,一次鏈接的持續時間也變長了,期間,爲了維持鏈接會消耗更多的資源,且也未能解決HTTP協議自己存在的問題。
(2)SPDY的設計與功能
SPDY沒有徹底改寫HTTP協議,而是在TCP/IP的應用層與運輸層之間經過新加會話層的形式運做。同時,SPDY規定通訊中使用SSL。
使用SPDY後,HTTP協議額外得到如下功能:
1)多路複用流
經過單一的TCP鏈接,能夠無限制處理多個HTTP請求。全部的請求的處理都在一條TCP鏈接上完成,所以TCP的處理效率獲得調高。
2)賦予請求優先級
SPDY不只能夠無限制地併發處理騎牛羣,還能夠給請求逐個分配優先級順序。這樣主要是爲了在發送多個請求時,解決因帶寬低而致使響應變慢的問題。
3)壓縮HTTP首部
壓縮HTTP請求和響應的首部可以使通訊產生的數據包數量和發送的字節數更少。
4)推送功能
支持服務器主動向客戶端推送數據的功能。這樣,服務器可直接發送數據,而沒必要等待客戶端的請求。
5)服務器提醒功能
服務器能夠主動提示客戶端請求所需的資源。因爲在客戶端發現資源以前就能夠獲知資源的存在,所以在資源已緩存等狀況下,能夠避免發送沒必要要的請求。
SPDY基本上只是將單個域名(IP地址)的通訊多路複用,因此當一個web網站上使用多個域名下的資源,改善效果就會收到限制。
三、使用瀏覽器進行全雙工通訊的WebSocket
(1)WebSocket協議
一旦web服務器與客戶端之間創建起WebSocket協議的通訊鏈接,以後全部的通訊都依靠這個專用協議進行。通訊過程當中可互相發送JSON、XML、HTML或圖片等任意格式的數據。
WebSocket特色:
1)推送功能
支持由服務器向客戶端推送數據的推送功能。服務器可直接發送數據,而沒必要等待客戶端的請求。
2)減小通訊量
和HTTP相比,不但每次鏈接時的總開銷減小,並且因爲WebSocket的首部信息很小,通訊量也相應減小了。
(2)WebSocket要求
爲了實現WebSocket通訊,請求時須要用到HTTP的Upgrade首部字段,告知服務器通訊協議發生改變,以達到握手的目的。
Upgrade : websocket
對上面的請求,服務器返回狀態碼101 Switching Protocols的響應。
通訊時再也不使用HTTP的數據幀,而採用WebSocket獨立的數據幀。
四、期盼已久的HTTP/2.0
(1)HTTP/2.0的特色
HTTP/2.0的目標是改善用戶在使用web時的速度體驗。
1)二進制
HTTP/2.0是一個二進制協議,可使成幀的使用變得更爲便捷。
2)多路複用的流
每一個單獨的HTTP/2.0鏈接均可以包含多個併發的流,這些流中交錯的包含着兩端的幀。流既能夠唄客戶端/服務器端單方面的創建和使用,也能夠被雙方共享,或者被任意一邊關閉。
3)優先級和依賴性
每一個流都包含一個優先級,它被用來告訴對端哪一個流更重要。當資源有限的時候,服務器會根據優先級來選擇應該先發送哪些流。
4)頭壓縮
這是一個專爲HTTP/2.0頭部設計的壓縮格式。使信息量的損失儘量少,使編碼快速而方便,使接收方能控制壓縮文本的大小。
5)重置
在HTTP/1.1時,當一個含有確切值得Content-Length的HTTP消息被送出以後,就很難中斷了。而在HTTP/2.0中咱們能夠發送RST_STREAM幀來實現只終止當前傳輸的消息並從新發送一個新的,從而避免浪費寬帶和中斷已有的鏈接。
6)服務器推送
這個功能一般被稱做「緩存推送」。服務器會在客戶端發送請求前主動將其可能須要的資源推送過去,以備未來之需。
7)流量控制
HTTP/2.0上面每一個流都擁有本身的公示的流量窗口,它能夠限制另外一端發送數據。
五、web服務器管理文件的WebDAV
(1)WebDAV(Web-based Distributed Authoring and Versioning,基於萬維網的分佈式創做和版本控制):是一個可對wev服務器上的內容直接進行文件複製、編輯等操做的分佈式文件系統。
除了建立、刪除文件等基本功能,它還具有文件建立者管理、文件編輯過程當中禁止其餘用戶內容覆蓋的加鎖功能,以及對文件內容修改的版本控制功能。
(2)擴展HTTP/1.1的WebDAV
WebDAV新增長了一些概念:
集合:是一種贊成管理多個資源的概念。以集合爲單位可進行各類操做。也可實現相似集合的集合這樣的疊加。
資源:把文件或集合成爲資源。
屬性:定義資源的屬性。定義以「名稱=值」的格式執行。
鎖:把文件設置成沒法編輯狀態。多人同時編輯時,可防止在同一時間進行內容寫入。
(3)WebDAV內新增的方法及狀態碼
方法:
PROPFIND:獲取屬性
PROPPATCH:修改屬性
MKCOL:建立集合
COPY:複製資源及屬性
MOVE:移動資源
LOCK:資源加鎖
UNLOCK:資源解鎖
狀態碼:
102 Processing:可正常處理請求,但目前是處理中狀態。
207 Multi-Status:存在多種狀態
422 Unprocessible Entity:格式正確,內容有誤
423 Locked:資源已被加鎖
424 Insufficient Storage:保存空間不足