簡體   English   中英

Java Websocket 客戶端不包括響應中的密鑰

[英]Java Websocket Client Not Including Key in Response

我正在嘗試在 Java 中創建一個 websocket 服務器。當我啟動服務器並將 go 發送到 Chrome 或 Edge 中的 IP 地址時,瀏覽器會將此發送到服務器:

GET / HTTP/1.1
Host: 127.0.0.1:5801
Connection: keep-alive
sec-ch-ua: "Not_A Brand";v="99", "Microsoft Edge";v="109", "Chromium";v="109"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
DNT: 1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.70
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

它不包括Sec-Websocket-Key ,我需要升級連接。 有沒有辦法從服務器請求 websocket 連接?

除了您的 Java WebSocket 服務器,您還需要一個 HTML 頁面,它通過JavaScript WebSocket API連接到您的服務器,如下所示:

<!-- ... -->
<script>
try {
    socket = new WebSocket(host);
    socket.onopen = function(openEvent) {
        // ...
    };

    socket.onmessage = function (messageEvent) {
        if (messageEvent.data instanceof Blob) {
            // ...
        } else {
            alert(messageEvent.data);
        }
    };

    socket.onerror = function (errorEvent) {
        // ...
    };

    socket.onclose = function (errorEvent) {
        // ...
    };
} catch (exception) {
    if (window.console) console.log(exception);
}
</script>
<!-- ... -->

然后,您在瀏覽器中打開 HTML 頁面,它會連接到您的 WebSocket 服務器。

資料來源:此處或在此對另一個問題的回答中更進一步。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM