摘要:概述本文為協(xié)議的第十一章,本文翻譯的主要內(nèi)容為的相關(guān)注意事項(xiàng)。應(yīng)用協(xié)議使用這個(gè)協(xié)議規(guī)范互操作性注意事項(xiàng)使用時(shí)需要使用或者更高版本的協(xié)議。安全性注意事項(xiàng)見安全性注意事項(xiàng)一節(jié)。
概述
本文為 WebSocket 協(xié)議的第十一章,本文翻譯的主要內(nèi)容為 WebSocket 的 IANA 相關(guān)注意事項(xiàng)。
IANA 注意事項(xiàng)(協(xié)議正文) 11.1 注冊新 URI 協(xié)議 11.1.1 注冊 “ws” 協(xié)議ws URI 定義了 WebSocket 服務(wù)器和資源名稱。
URI 協(xié)議名稱
ws
狀態(tài)
永久
URI 協(xié)議語法
使用 ABNF (RFC5234)語法和來自 URI 規(guī)范 RFC3986 的 ABNF 終端:
"ws:" "http://" authority path-abempty [ "?" query ]
path-abempty 和 query RFC3986 部分組成了發(fā)送給服務(wù)端的資源名稱,來標(biāo)記需要的服務(wù)類型。其他的部分在 RFC3986 中定義了含義。
URI 協(xié)議含義
這個(gè)方案的唯一操作就是使用 WebSocket 協(xié)議打開一個(gè)連接。
編碼注意事項(xiàng)
按照上面定義的語法排除的主機(jī)部分中的字符必須按照 RFC3987 中的規(guī)定從 Unicode 轉(zhuǎn)換為 ASCII 或其替換字符。為了實(shí)現(xiàn)基于方案的規(guī)范化,國際化網(wǎng)域名稱(IDN)主機(jī)組件的形式與 punycode 碼之間的相互轉(zhuǎn)化認(rèn)為是等價(jià)的(見 RFC3987 第 5.3.3 節(jié))。
除了由上面語法排除的字符外,其他組件的字符在第一次轉(zhuǎn)換為 UTF-8 字符時(shí),必須從 Unicode 碼轉(zhuǎn)化到 ASCII 碼,然后使用百分比編碼格式替換對(duì)應(yīng)的定義在 URI RFC3896 字符和國際化資源標(biāo)識(shí)符(IRI) RFC3987 規(guī)范。
應(yīng)用/協(xié)議使用這個(gè) URI 協(xié)議規(guī)范
WebSocket Protocol
互操作性注意事項(xiàng)
使用 WebSocket 時(shí)需要使用 1.1 或者更高版本的 HTTP 協(xié)議。
安全性注意事項(xiàng)
見”安全性注意事項(xiàng)”一節(jié)。
聯(lián)系
HYBI WG
作者/更改控制者
IETF
關(guān)聯(lián)
RFC 6455
11.1.2 注冊 “wss”協(xié)議一個(gè) wss 的 URI 定義了一個(gè) WebSocket 服務(wù)器和資源名稱,表明通過這個(gè)鏈接的傳輸需要通過 TLS(包含標(biāo)準(zhǔn)的 TLS 能力例如數(shù)據(jù)保密性和完整性以及終端認(rèn)證)來進(jìn)行保護(hù)。
URI 協(xié)議名稱
wss
狀態(tài)
永久
URI 協(xié)議語法
使用 ABNF (RFC5234)語法和來自 URI 規(guī)范 RFC3986 的 ABNF 終端:
"wss:" "http://" authority path-abempty [ "?" query ]
path-abempty 和 query RFC3986 部分組成了發(fā)送給服務(wù)端的資源名稱,來標(biāo)記需要的服務(wù)類型。其他的部分在 RFC3986 中定義了含義。
URI 協(xié)議含義
這個(gè)方案的唯一操作就是使用 WebSocket 協(xié)議打開一個(gè)連接,通過 TLS 加密。
編碼注意事項(xiàng)
按照上面定義的語法排除的主機(jī)部分中的字符必須按照 RFC3987 中的規(guī)定從 Unicode 轉(zhuǎn)換為 ASCII 或其替換字符。為了實(shí)現(xiàn)基于方案的規(guī)范化,國際化網(wǎng)域名稱(IDN)主機(jī)組件的形式與 punycode 碼之間的相互轉(zhuǎn)化認(rèn)為是等價(jià)的(見 RFC3987 第 5.3.3 節(jié))。
除了由上面語法排除的字符外,其他組件的字符在第一次轉(zhuǎn)換為 UTF-8 字符時(shí),必須從 Unicode 碼轉(zhuǎn)化到 ASCII 碼,然后使用百分比編碼格式替換對(duì)應(yīng)的定義在 URI RFC3896 字符和國際化資源標(biāo)識(shí)符(IRI) RFC3987 規(guī)范。
應(yīng)用/協(xié)議使用這個(gè) URI 協(xié)議規(guī)范
WebSocket Protocol
互操作性注意事項(xiàng)
使用 WebSocket 時(shí)需要使用 1.1 或者更高版本的 HTTP 協(xié)議。
安全性注意事項(xiàng)
見”安全性注意事項(xiàng)”一節(jié)。
聯(lián)系
HYBI WG
作者/更改控制者
IETF
關(guān)聯(lián)
RFC 6455
11.2 注冊“WebSocket”協(xié)議升級(jí)關(guān)鍵值這一節(jié)描述一個(gè)在 HTTP 升級(jí)憑證注冊的關(guān)鍵值,在 RFC2817 定義。
憑證名稱
WebSocket
作者/更改控制者
IETF
關(guān)聯(lián)
RFC 6455
11.3 注冊新的 HTTP 頭字段 Sec-WebSocket-Key這一節(jié)描述一個(gè)注冊在永久消息頭字段名稱中的頭字段,在 RFC3864 定義。
頭字段名稱
Sec-WebSocket-Key
應(yīng)用協(xié)議
http
狀態(tài)
標(biāo)準(zhǔn)
作者/更改控制者
IETF
說明文檔
RFC 6455
關(guān)聯(lián)信息
這個(gè)頭字段只用于 WebSocket 開始握手。
Sec-WebSocket-Key 頭字段是用在 WebSocket 開始握手階段。它是通過客戶端發(fā)送給服務(wù)端,這部分信息用于服務(wù)端證明收到一個(gè)有效的 WebSocket 握手操作的認(rèn)證。這可以幫助確認(rèn)服務(wù)端不會(huì)接收可能被用來向 WebSocket 服務(wù)任意發(fā)送數(shù)據(jù)的非 WebSocket 客戶端的連接(例如 HTTP 客戶端)。
Sec-WebSocket-Key 頭字段禁止在一個(gè) HTTP 請(qǐng)求中出現(xiàn)多次。
11.3.2 Sec-WebSocket-Extensions這一節(jié)描述一個(gè)注冊在永久消息頭字段名稱中的頭字段,在 RFC3864 定義。
頭字段名稱
Sec-WebSocket-Extensions
應(yīng)用協(xié)議
http
狀態(tài)
標(biāo)準(zhǔn)
作者/更改控制者
IETF
說明文檔
RFC 6455
關(guān)聯(lián)信息
這個(gè)頭字段只用于 WebSocket 開始握手。
Sec-WebSocket-Extensions 頭字段是用于 WebSocket 開始握手階段。它最開始是通過客戶端發(fā)送給服務(wù)端,然后通過服務(wù)端發(fā)送給客戶端,來對(duì)一個(gè)在連接中的協(xié)議級(jí)的擴(kuò)展進(jìn)行協(xié)商。
Sec-WebSocket-Extensions 頭字段可能會(huì)在一個(gè) HTTP 請(qǐng)求中出現(xiàn)多次(這個(gè)邏輯是等價(jià)于一個(gè)多帶帶的 Sec-WebSocket-Extensions 頭字段包含所有值)。然而,Sec-WebSocket-Extensions 頭字段在 HTTP 響應(yīng)中不能出現(xiàn)超過1次。
11.3.3 Sec-WebSocket-Accept這一節(jié)描述一個(gè)注冊在永久消息頭字段名稱中的頭字段,在 RFC3864 定義。
頭字段名稱
Sec-WebSocket-Accept
應(yīng)用協(xié)議
http
狀態(tài)
標(biāo)準(zhǔn)
作者/更改控制者
IETF
說明文檔
RFC 6455
關(guān)聯(lián)信息
這個(gè)頭字段只用于 WebSocket 開始握手。
Sec-WebSocket-Accpet 頭字段是用于 WebSocket 開始握手階段。它是通過服務(wù)端發(fā)送給客戶端,用來確認(rèn)服務(wù)端會(huì)初始化一個(gè) WebSocket 連接。
Sec-WebSocket-Accpet 頭在一個(gè) HTTP 響應(yīng)中不允許出現(xiàn)超過1次。
11.3.4 Sec-WebSocket-Protocol這一節(jié)描述一個(gè)注冊在永久消息頭字段名稱中的頭字段,在 RFC3864 定義。
頭字段名稱
Sec-WebSocket-Protocol
應(yīng)用協(xié)議
http
狀態(tài)
標(biāo)準(zhǔn)
作者/更改控制者
IETF
說明文檔
RFC 6455
關(guān)聯(lián)信息
這個(gè)頭字段只用于 WebSocket 開始握手。
Sec-WebSocket-Protocol 頭字段是用于 WebSocket 開始握手階段。它是從客戶端發(fā)送給服務(wù)端,然后從服務(wù)端返回給服務(wù)端來確認(rèn)連接的子協(xié)議。這個(gè)機(jī)制能夠讓雙方選擇一個(gè)子協(xié)議,同時(shí)向服務(wù)端確認(rèn)可以支持這個(gè)子協(xié)議。
Sec-WebSocket-Protocol 頭字段可以在一個(gè) HTTP 請(qǐng)求中出現(xiàn)多次(這個(gè)邏輯是等價(jià)于一個(gè)多帶帶的 Sec-WebSocket-Protocol 頭字段包含所有值)。然而,? Sec-WebSocket-Protocol 頭字段在 HTTP 響應(yīng)中不能出現(xiàn)超過1次。
11.3.5 Sec-WebSocket-Version這一節(jié)描述一個(gè)注冊在永久消息頭字段名稱中的頭字段,在 RFC3864 定義。
頭字段名稱
Sec-WebSocket-Version
應(yīng)用協(xié)議
http
狀態(tài)
標(biāo)準(zhǔn)
作者/更改控制者
IETF
說明文檔
RFC 6455
關(guān)聯(lián)信息
這個(gè)頭字段只用于 WebSocket 開始握手。
Sec-WebSocket-Version 頭字段是用于 WebSocket 開始握手階段。它是從客戶端發(fā)送給服務(wù)端來表示這個(gè)連接使用的協(xié)議版本。它能夠讓服務(wù)端正確的進(jìn)行開始握手和接下來的數(shù)據(jù)發(fā)送,以及在服務(wù)端不能夠在一個(gè)安全方式下正確解析數(shù)據(jù)時(shí)關(guān)閉連接。Sec-WebSocket-Version 頭字段在服務(wù)端理解的版本不匹配從客戶端收到的版本導(dǎo)致的 WebSocket 握手失敗時(shí),也從服務(wù)端發(fā)送給客戶端。在這種情況下,這個(gè)頭字段包含服務(wù)端支持的協(xié)議版本。
注意這里不期望更高的版本號(hào)需要向前兼容低版本號(hào)。
Sec-WebSocket-Version 頭字段可以在一個(gè) HTTP 響應(yīng)中出現(xiàn)多次(這個(gè)邏輯等價(jià)于一個(gè)多帶帶的Sec-WebSocket-Version包含所有的值)。然而,Sec-WebSocket-Version 頭字段不能在 HTTP 請(qǐng)求中出現(xiàn)超過1次。
11.4 WebSocket 擴(kuò)展名注冊表這個(gè)規(guī)范根據(jù)RFC5526中規(guī)定的原則為 WebSocket 協(xié)議創(chuàng)建了一個(gè)新的 IANA 注冊表,用于 WebSocket 擴(kuò)展名稱。
作為此注冊表的一部分,IANA 包含了一下信息:
擴(kuò)展定義
這個(gè)擴(kuò)展的定義,將在 Sec-WebSocket-Extensions 頭字段中使用,在此規(guī)范的第 11.3.2 節(jié)注冊。這個(gè)值必須滿足在此規(guī)范第 9.1 節(jié)中定義的擴(kuò)展憑證要求。
擴(kuò)展通用名
擴(kuò)展名稱,一般稱為擴(kuò)展名。
擴(kuò)展定義
對(duì)定義與 WebSocket 協(xié)議一起使用的擴(kuò)展的文檔的引用。
已知不兼容擴(kuò)展
已知的不兼容的擴(kuò)展定義列表。
WebSocket 擴(kuò)展名是受到“先到先得” IANA 注冊政策 RFC5226 限制的。
這個(gè)注冊表里沒有初始值。
11.5 WebSocket 子協(xié)議名注冊表這個(gè)規(guī)范根據(jù)RFC5526中規(guī)定的原則為 WebSocket 協(xié)議創(chuàng)建了一個(gè)新的 IANA 注冊表,用于 WebSocket 擴(kuò)展名稱。
作為此注冊表的一部分,IANA 包含了一下信息:
子協(xié)議定義
子協(xié)議的標(biāo)識(shí)符將在 Sec-WebSocket-Protocol 頭字段中使用,在此規(guī)范的第 11.3.4 節(jié)中注冊。這個(gè)之必須符合此規(guī)范第 4.1 節(jié)中的第 10 項(xiàng)要求—換句話說,這個(gè)之必須是 RFC2616 中定義的憑證。
子協(xié)議通用名
子協(xié)議名稱,通常被稱為子協(xié)議。
子協(xié)議定義
對(duì)定義與 WebSocket 協(xié)議一起使用的子協(xié)議的文檔的引用。
WebSocket 子協(xié)議名是受到“先到先得” IANA 注冊政策 RFC5226 限制的。
11.6 WebSocket 版本號(hào)注冊表該規(guī)范根據(jù) RFC5226 中規(guī)定的原則為 WebSocket 協(xié)議創(chuàng)建了一個(gè)新的 IANA 注冊表,用于 WebSocket 版本號(hào)。
作為此注冊表的一部分,IANA 包含了一下信息:
版本號(hào)
版本號(hào)是用于在此規(guī)范第 4.1 節(jié)中制定的 Sec-WebSocket-Version 字段。這個(gè)值必須是一個(gè)范圍在 0 到 255(含)之間的非負(fù)整數(shù)。
參考
RFC 請(qǐng)求新版本號(hào)或者帶有版本號(hào)的草稿名稱(見下文)。
狀態(tài)
臨時(shí)或者標(biāo)準(zhǔn)。見下面描述。
版本號(hào)被指定為“臨時(shí)”或者“標(biāo)準(zhǔn)”。
“標(biāo)準(zhǔn)”的版本號(hào)被記錄在 RFC 文檔中,被認(rèn)為是一個(gè)重大、穩(wěn)定的 WebSocket 協(xié)議版本,例如定義在這個(gè) RFC 中的版本。“標(biāo)準(zhǔn)”版本號(hào)是受到 “IETF 評(píng)論” IANA 注冊政策 RFC5526 限制的。
“臨時(shí)”版本是記錄在網(wǎng)絡(luò)草案和用于幫助實(shí)現(xiàn)者識(shí)別 WebSocket 協(xié)議的已部署版本并與之互操作,例如開發(fā)后但是發(fā)布前的 RFC 版本?!芭R時(shí)”版本號(hào)是受到 “專家評(píng)論” IANA 注冊政策 RFC5526 、 最初的指定專家如HYBI 工作組主席(或者,如果工作組關(guān)閉,那么是 IETF 應(yīng)用領(lǐng)域的領(lǐng)域主任)限制的。
IANA 已經(jīng)向注冊表中添加了如下的初始值。
版本號(hào) | 引用 | 狀態(tài) |
---|---|---|
0 | draft-ietf-hybi-thewebsocketprotocol-00 | 臨時(shí) |
1 | draft-ietf-hybi-thewebsocketprotocol-01 | 臨時(shí) |
2 | draft-ietf-hybi-thewebsocketprotocol-02 | 臨時(shí) |
3 | draft-ietf-hybi-thewebsocketprotocol-03 | 臨時(shí) |
4 | draft-ietf-hybi-thewebsocketprotocol-04 | 臨時(shí) |
5 | draft-ietf-hybi-thewebsocketprotocol-05 | 臨時(shí) |
6 | draft-ietf-hybi-thewebsocketprotocol-06 | 臨時(shí) |
7 | draft-ietf-hybi-thewebsocketprotocol-07 | 臨時(shí) |
8 | draft-ietf-hybi-thewebsocketprotocol-08 | 臨時(shí) |
9 | 保留 | |
10 | 保留 | |
11 | 保留 | |
12 | 保留 | |
13 | RFC6455 |
該規(guī)范根據(jù) RFC5226 中規(guī)定的原則為 WebSocket 協(xié)議創(chuàng)建了一個(gè)新的 IANA 注冊表,用于 WebSocket 關(guān)閉碼。
作為此注冊表的一部分,IANA 包含了一下信息:
狀態(tài)碼
狀態(tài)碼表示定義在此文檔第 7.4 節(jié)中 WebSocket 連接關(guān)閉的原因。這個(gè)狀態(tài)碼是一個(gè)在 1000 到 4999(含)之間的整數(shù)。
含義
狀態(tài)碼含義。每一個(gè)狀態(tài)碼有一個(gè)特定的含義。
聯(lián)系
保留狀態(tài)代碼的實(shí)體的聯(lián)系人。
關(guān)聯(lián)
請(qǐng)求狀態(tài)碼的固定文檔和含義定義。對(duì)于 1000-2999 的狀態(tài)碼來說是必須的,推薦使用 3000-3999 范圍的狀態(tài)碼。
WebSocket 關(guān)閉狀態(tài)碼根據(jù)它的范圍有不同的注冊要求。使用在這個(gè)協(xié)議和它的后續(xù)的版本或者擴(kuò)展的請(qǐng)求版本號(hào)是受到“標(biāo)準(zhǔn)行為”、“規(guī)范要求”(這意味著“指定專家”)或者“IESG 評(píng)論” IANA注冊表政策限制的,應(yīng)該在 1000-2999 范圍內(nèi)授權(quán)。被類庫、框架和應(yīng)用使用的狀態(tài)碼是受限制于“先到先得”IANA 注冊表政策,應(yīng)該在 3000-3999 范圍內(nèi)授權(quán)。4000-4999 范圍的狀態(tài)碼是私用的。請(qǐng)求應(yīng)指明它們是否正在通過擴(kuò)展、類庫、框架或者應(yīng)用使用請(qǐng)求WebSocket協(xié)議的狀態(tài)代碼(或者將來的協(xié)議的版本)。
IANA已經(jīng)向注冊表中添加了如下初始值。
狀態(tài)碼 | 含義 | 聯(lián)系人 | 關(guān)聯(lián) |
---|---|---|---|
1000 | 正常關(guān)閉 | hybi@ietf.org | RFC6455 |
1001 | 離開 | hybi@ietf.org | RFC6455 |
1002 | 協(xié)議錯(cuò)誤 | hybi@ietf.org | RFC6455 |
1003 | 不支持的數(shù)據(jù)類型 | hybi@ietf.org | RFC6455 |
1004 | 保留 | hybi@ietf.org | RFC6455 |
1005 | 沒有收到狀態(tài)碼 | hybi@ietf.org | RFC6455 |
1006 | 異常關(guān)閉 | hybi@ietf.org | RFC6455 |
1007 | 無效的幀數(shù)據(jù) | hybi@ietf.org | RFC6455 |
1008 | 違反政策 | hybi@ietf.org | RFC6455 |
1009 | 消息太大 | hybi@ietf.org | RFC6455 |
1010 | 強(qiáng)制擴(kuò)展 | hybi@ietf.org | RFC6455 |
1011 | 內(nèi)部服務(wù)器錯(cuò)誤 | hybi@ietf.org | RFC6455 |
1015 | TLS握手 | hybi@ietf.org | RFC6455 |
該規(guī)范根據(jù) RFC5226 中規(guī)定的原則為 WebSocket 協(xié)議創(chuàng)建了一個(gè)新的 IANA 注冊表,用于 WebSocket 操作碼。
作為此注冊表的一部分,IANA 包含了一下信息:
操作碼
操作碼表示定義在第 5.2 節(jié)中的 WebSocket 幀的幀類型。操作碼是一個(gè)范圍在 0 到 15(含)的數(shù)字。
含義
操作碼的含義。
關(guān)聯(lián)
請(qǐng)求操作碼的規(guī)范。
WebSocket 操作碼是受到“標(biāo)準(zhǔn)行為”IANA 注冊表政策 RFC5266 限制的。
IANA 已經(jīng)向注冊表中注冊了一下初始值。
操作碼 | 含義 | 關(guān)聯(lián) |
---|---|---|
0 | 連續(xù)幀 | RFC6455 |
1 | 文本幀 | RFC6455 |
2 | 二進(jìn)制幀 | RFC6455 |
8 | 連接關(guān)閉幀 | RFC6455 |
9 | 心跳 Ping 幀 | RFC6455 |
10 | 心跳 Pong 幀 | RFC6455 |
該規(guī)范根據(jù) RFC5226 中規(guī)定的原則為 WebSocket 協(xié)議創(chuàng)建了一個(gè)新的 IANA 注冊表,用于 WebSocket 幀頭 bit 字段。這個(gè)注冊表控制分配的 bit 位為第 5.2 節(jié)中的 RSV1、RSV2 和 RSV3。
這些 bit 位是保留給將來的版本或者文檔中的擴(kuò)展。
WebSocket 幀頭 bit 字段是受到“標(biāo)準(zhǔn)行為”IANA 注冊表政策 RFC5266 限制的。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/101891.html
摘要:概述經(jīng)過半年的搗鼓,終于將協(xié)議全篇翻譯完成?,F(xiàn)在將所有章節(jié)全部整理到一篇文章中,方便大家閱讀。如果大家想看具體的翻譯文檔,可以去我的中查看。大家有相關(guān)類型的需要,建議大家可以嘗試下。 概述 經(jīng)過半年的搗鼓,終于將 WebSocket 協(xié)議(RFC6455)全篇翻譯完成?,F(xiàn)在將所有章節(jié)全部整理到一篇文章中,方便大家閱讀。如果大家想看具體的翻譯文檔,可以去我的GitHub中查看。 具體章節(jié)...
摘要:狀態(tài)碼當(dāng)關(guān)閉一個(gè)連接時(shí)如在開始握手已經(jīng)完成后,發(fā)送一個(gè)關(guān)閉幀,終端可能會(huì)說明關(guān)閉的原因。表示終端由于協(xié)議錯(cuò)誤中止了連接。這個(gè)狀態(tài)碼是為了給上層應(yīng)用表示連接被異常關(guān)閉如沒有發(fā)送或者接受一個(gè)關(guān)閉幀這種場景的使用而設(shè)計(jì)的。 概述 本文為 WebSocket 協(xié)議的第七章,本文翻譯的主要內(nèi)容為 WebSocket 連接關(guān)閉相關(guān)內(nèi)容。 關(guān)閉連接(協(xié)議正文) 7.1 定義 7.1.1 關(guān)閉 Web...
摘要:概述本文為協(xié)議的第十二章,本文翻譯的主要內(nèi)容為如何使用其他規(guī)范中的協(xié)議。使用其他規(guī)范中的協(xié)議協(xié)議正文協(xié)議旨在由另一規(guī)范使用,以提供動(dòng)態(tài)作者定義內(nèi)容的通用機(jī)制。當(dāng)連接打開時(shí),文檔需要處理收到一條消息第節(jié)的場景。 概述 本文為 WebSocket 協(xié)議的第十二章,本文翻譯的主要內(nèi)容為如何使用其他規(guī)范中的 WebSocket 協(xié)議。 使用其他規(guī)范中的WebSocket協(xié)議(協(xié)議正文) Web...
摘要:閱讀原文把錯(cuò)誤打印出來斷開的原因有很多,最好在斷開時(shí),將錯(cuò)誤打印出來。的字段表示了斷開的原因。有三個(gè)字段需要注意通過分析這三個(gè)字段,一般就可以找到斷開原因是錯(cuò)誤碼,是整數(shù)類型是斷開原因,是字符串表示是否正常斷開,是布爾值。 閱讀原文:https://wdd.js.org/websocket-... 1. 把錯(cuò)誤打印出來 WebSocket斷開的原因有很多,最好在WebSocket斷開時(shí)...
閱讀 2356·2021-11-10 11:35
閱讀 1065·2021-09-26 09:55
閱讀 2491·2021-09-22 15:22
閱讀 2381·2021-09-22 15:17
閱讀 3805·2021-09-09 09:33
閱讀 1887·2019-08-30 11:22
閱讀 1047·2019-08-30 10:57
閱讀 717·2019-08-29 16:10