目標:php
在一個單獨的持久鏈接上提供全雙工、雙向通訊。與其餘方案不一樣,
Web Sockets
不使用HTTP
協議,而使用一種自定義的協議。這種協議專門爲快速傳輸小數據設計。雖然要求使用不一樣的Web服務器,但卻具備速度上的優點算法
過程:跨域
也就是說,使用標準的
HTTP
服務器沒法實現Web Sockets
,只有支持這種協議的專門服務器才能正常工做瀏覽器
在使用
Web Socket URL
時,必須帶着這個模式(將來可能支持其餘模式)安全
ws://
wss://
使用自定義協議而非HTTP協議:服務器
好處cookie
可以在客戶端和服務器之間發送很是少許的數據,而沒必要擔憂HTTP那樣的字節開銷網絡
適用於移動應用(帶寬和網絡延遲)socket
缺點:函數
制定協議的時間比制定
JavaScript API
的時間還要長
支持Web Sockets爲瀏覽器:
Firefox 6+ 、 Safari 5+ 、 Chrome和iOS 4+版Safari
var socket = new WebSocket("ws://www.example.com/server.php")
-Ps: 必須給WebSocket
構造函數傳入絕對URL。同源策略對Web Sockets
不適用,所以能夠經過它打開到任何站點的鏈接。至因而否與某個域中的頁面通訊,徹底取決於服務器。(經過握手信息就能夠知道請求來自何方)-
如:
xhr.open("get","example.php",true, "usename","password")
// 不要這樣作!!!
即使能夠考慮這種安全機制,可是仍是儘可能不雅這樣作。把用戶名和密碼保存在JavaScript代碼總自己就很不安全的。任何人,只要他會使用JavaScript調試器,就能夠經過查看相應的變量發現純文本形式的用戶名和密碼
: 是對XHR的一個主要約束,它爲通訊設置了「相同的域、相同的端口、相同的協議」這一限制。
試圖訪問上述限制以外的資源,都會引起安全錯誤,除非採用CORS(Cross-Origin Resource Sharing, 跨源資源共享)
。IE經過XDomainRequest對象支持CORS,其餘瀏覽器也經過XHR對象原生支持CORS。圖像Ping和JSONP是另外兩種跨域通訊的技術,但不如CORS