1.介紹
為了讓Web應用程式能夠和伺服器進程之間保持雙向通信,這裡介紹WebSocket 介面。
2.一致性需求(略)
#3.術語(略)
4.WebSocket介面(程式碼略)WebSocket(url, protocols)建構子可以傳入1-2個參數。第一個參宿指定要連接的URL
。第二個參數如果聲明,可以是一個字串或是一個字串陣列。如果是一個字串,它就相當於一個只包含那一個字串的陣列。如果第二個參數省略,它就相當於一個空數組【也就是說第二個參數傳入的是什麼,都會當作一個字串陣列處理】。每一個數組中的字串都是子協定名。只有當伺服器聲明其已經選擇了其中一個子協定的時候連接才能建立。所有子協定名稱必須符合以下要求:這些字串要包含
WebSocket協定宣告頭部的Sec-WebSocket-Protocol的內容①。 當WebSocket()建構函式被呼叫時,使用者代理程式必須執行下列步驟:(1)從url參數中解析出URL
的各個元件,從而獲得主機、連接埠、資源名稱和安全性協定#(host , port, resource name, and secure)。如果這個過程失敗了,就會拋出SyntaxError異常並且終止下面的步驟。 (2)如果secure是空,但是原來的進入腳本有一個模式組成本身就是一個安全協議,例如
###HTTPS ######,那麼就拋出######SecurityError######異常。 ######(###If### secure is false but the ###origin of the entry script has a scheme component that ###exception# ##.)###(3)如果參數中的使用連接埠被使用者代理設定為禁止存取的,那麼就會拋出SecurityError異常。連接埠80和443#不應該被禁止訪問,包括secure是false的情況下443#連接埠不能禁止訪問,secure是 true的時候80連接埠不能禁止存取【這裡是說,WebSocket有兩種形式,ws是不帶安全協議的,預設使用#80##端口,wss是帶有安全協定的,預設使用443端口,但是即便使用的協定不需要對應的端口,也不能禁止訪問443 和80這兩個連接埠】。
(4)如果沒有宣告protocols參數,讓其成為空數組。否則,如果protocols參數是字串,就讓其變成包含這個字串的陣列。
(5)如果protocols參數中的任何一個變數被宣告了超過以此,或是沒有滿足①的需求,就拋出SyntaxError異常並且終止下面的步驟。
(6)Letorigin be the ASCII serialization of the origin of the entry script, converted# to ASCII# lowercase.##707case(7)# to WebSocket
物件,並且在背景程式中繼續執行下面的步驟。 (8)建立一個包含給定的host, port, resource name, and secure
以及protocols列表,並且一個空的擴充(extensions)列表和originWebSocket
######## #連接。頭部要想發送正確的#########cookie###s######必須使用######Cookie######頭,其中的值是透過用戶儲存的######cookie######值以及######url#######計算出來的。出於這些目的,這不是一個沒有######HTTP######協議的##########API#########。 ######在「WebSocket建立連線演算法」執行期間,當使用者代理驗證伺服器的回應時,如果從伺服器收到的狀態碼不是101,使用者代理程式必須終止這次WebSocket#連線。
警告!這裡使用HTTP處理可能會對瀏覽器上下文環境造成嚴重的安全隱患。例如,設想一個主機是使用WebSocket在一個路徑上建立的伺服器,一個開放的HTTP##重定向指向另一個路徑。突然,任何被指定了一個特定的WebSocket URL的腳本都可以進入這個服務並和其他的主機在網路上進行溝通,即時腳本檢查了# URL為正確的主機名稱。
注意:如果WebSocket連接演算法執行失敗了,會觸發WebSocket連接失敗演算法,這個演算法會執行關閉WebSocket連接的演算法,這就會將WebSocket連接關閉,觸發close 事件,執行步驟如下面所描述的。
當腳本的全域物件是Window物件或是透過WorkerUtils介面實例化的物件時,這個建構函數必須是可見的。
url屬性必須是從為建構子傳遞的URL解析出來的。
readyState屬性表示了連接的狀態,它有以下幾個值:
CONNECTING,對應的值是0,表示連接尚未建立;
OPEN,對應的值是1#WebSocket
連線已經建立了,並且可以進行通訊;#CLOSING,對應值是2,表示連線正在進行關閉握手,或close()
方法已經被呼叫;##CLOSED,對應值是3,表示連線已經關閉或無法開啟連線。
當WebSocket實例化物件被建立時,它的readyState##值必須設定為 CONNESTING。
extensions屬性初始值必須是一個空的字串。當WebSocket連線建立後,它的值可以依照下列規則改變。
注意:如果伺服器選擇了擴展,extension屬性傳回的伺服器選擇的擴展。 (目前這個欄位一直是一個空字段)
#protocol屬性初始化必須是一個空的字串。當WebSocket連線建立後,它的值可以依照下列規則改變。
注意:如果伺服器指定了子協議,protocol屬性傳回伺服器選擇的子協定。
close()方法必須按照下面的步驟執行:
(1)如果這個方法傳遞了第一個參數但是不等於 1000或不在3000到4999之內,拋出InvalidAccessError異常並終止下面的步驟。
(2)如果傳入了第二個參數,就執行下面的子步驟:
①讓raw reason成為方法的第二個參數
②(後省略#)
(3)執行下面第一個符合到的步驟
①如果readyState#屬性是#CLOSING#或CLOSED
##CLOSED#,什麼也不發生。 ②如果WebSocket連線尚未建立,終止WebSocket連接的建立並且將
readyState的屬性值設定為CLOSING。 ③如果WebSocket的關閉握手還沒有開始,啟動WebSocket的關閉握手,並且將readyState設定成CLOSING。如果傳遞了第一個參數,那麼WebSocket
關閉封包使用的狀態碼必須是第一個參數指定的整數。如果第二個參數也宣告了,必須在關閉封包的狀態碼後面給出reason#。 ④其他情況,將
readyState#######屬性值設為######CLOSING#######。 ######以上是詳細介紹WebSocket API HTML5規格翻譯的詳細內容。更多資訊請關注PHP中文網其他相關文章!