簡體   English   中英

Spring,SockJS - WebSocket 握手期間出錯:意外響應代碼 400

[英]Spring, SockJS - error during WebSocket handshake: Unexpected response code 400

我已經使用 Spring Boot 實現了具有 WebSockets 支持的 BE 應用程序。 我使用 SockJS 來連接到我的 WebSocket 端點,在連接過程中我收到以下錯誤:

error during WebSocket handshake: Unexpected response code: 400

在此處輸入圖片說明

但是隨后(如您在上圖中所見)一切正常並且 websocket 已打開。

現在我不明白這個問題的原因是什么以及如何解決它。 請幫忙。

更新

感謝paweln1986幫助我修復了 SockJS lib 的版本問題,但意外響應代碼 400 的問題仍然存在:

在此處輸入圖片說明

我也在 Tomcat 8 前面使用了 nginx。這是我的 nginx 配置:

server {
    listen          443 ssl;        
    server_name  myserver.com;
    ssl on;

    location /api/ {                                                                                                                                                                                                                                             
        proxy_pass_header X-XSRF-TOKEN;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
        proxy_pass        http://localhost:8081/api/;                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
        proxy_set_header Origin "http://localhost:8081/api/";                                                                                                                                                                                                    

        proxy_set_header Host $host;                                                                                                                                                                                                                             
        proxy_set_header X-Real-IP $remote_addr;                                                                                                                                                                                                                 
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                                                                                                                                                                                             
        proxy_http_version 1.1;                                                                                                                                                                                                                                  
    }                                                                                                                                                                                                                                                            

    location /dashboard/ {
        proxy_pass        http://localhost:8081/dashboard/;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /manager {
        proxy_pass        http://localhost:8081/manager/;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }        

    location / {
        root   /srv/www/htdocs/myserver/;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /srv/www/htdocs/;
    }        

} 

你有錯誤的 SockJS 版本。

在瀏覽器端,應用程序可以使用模擬 W3C WebSocket API 的 sockjs-client(版本 1.0.x)

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html

您在/api/部分中缺少兩件事proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; https://www.nginx.com/blog/websocket-nginx/

如果您將 SSL 與 Amazon 負載均衡器一起使用,也會出現這種復雜情況。 elb 的偵聽器應該有一個 SSL(而不是 HTTPS)條目,負載均衡器端口為 443,實例協議為 TCP,實例端口為 80(不要忘記添加證書)這將使 WebSocket 流量通過。

詳細參考: https : //blog.jverkamp.com/2015/07/20/configuring-websockets-behind-an-aws-elb/

暫無
暫無

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

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