Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 服务器[200]的HTTP响应不允许HTTP升级到WebSocket_Java_Spring_Websocket_Stomp_Sockjs - Fatal编程技术网

Java 服务器[200]的HTTP响应不允许HTTP升级到WebSocket

Java 服务器[200]的HTTP响应不允许HTTP升级到WebSocket,java,spring,websocket,stomp,sockjs,Java,Spring,Websocket,Stomp,Sockjs,我的websocket客户端是在StompJava客户端(Spring项目)中开发的,服务器是在SpringBoot中实现的 当客户端/服务器握手发生时,我遇到了连接升级问题 Java客户端代码 List<Transport> transports = new ArrayList<>(1); transports.add(new WebSocketTransport(new StandardWebSocketClient())); SockJsClient

我的websocket客户端是在StompJava客户端(Spring项目)中开发的,服务器是在SpringBoot中实现的

当客户端/服务器握手发生时,我遇到了连接升级问题

Java客户端代码

List<Transport> transports = new ArrayList<>(1);
transports.add(new WebSocketTransport(new StandardWebSocketClient()));      

SockJsClient sockjsClient = new SockJsClient(transports);   

WebSocketStompClient stompClient = new WebSocketStompClient(sockjsClient);

stompClient.setMessageConverter(new MappingJackson2MessageConverter());

stompClient.setTaskScheduler(new ConcurrentTaskScheduler());

StompSessionHandler sessionHandler = new SessionHandler();
stompClient.connect("ws://localhost:9090/health", sessionHandler);
@Override
public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {       
    stompEndpointRegistry.addEndpoint("/health")
            .setAllowedOrigins("*")
            .withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
    registry.enableSimpleBroker("/topic");
    registry.setApplicationDestinationPrefixes("/app");
}
连接到服务器时在客户端生成异常

16:18:50.955/3771 [SimpleAsyncTaskExecutor-1] ERROR o.s.w.s.s.c.DefaultTransportRequest - No more fallback transports after TransportRequest[url=ws://localhost:9090/health/29/344d627baac949f5bab5506f05f1a7eb/websocket] javax.websocket.DeploymentException: The HTTP response from the server [200] did not permit the HTTP upgrade to WebSocket at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServerRecursive(WsWebSocketContainer.java:434) at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServerRecursive(WsWebSocketContainer.java:392) at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:194) at org.springframework.web.socket.client.standard.StandardWebSocketClient.lambda$doHandshakeInternal$0(StandardWebSocketClient.java:150) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.lang.Thread.run(Thread.java:745) 16:18:50.955/3771[SimpleAsynctaskeExecutor-1]错误o.s.w.s.s.c.DefaultTransportRequest-TransportRequest之后不再有回退传输[url=ws://localhost:9090/health/29/344d627baac949f5bab5506f05f1a7eb/websocket] javax.websocket.DeploymentException:服务器[200]的HTTP响应不允许HTTP升级到websocket 位于org.apache.tomcat.websocket.WsWebSocketContainer.connectToServerRecursive(WsWebSocketContainer.java:434) 位于org.apache.tomcat.websocket.WsWebSocketContainer.connectToServerRecursive(WsWebSocketContainer.java:392) 位于org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:194) 位于org.springframework.web.socket.client.standard.StandardWebSocketClient.lambda$doHandshakeInternal$0(StandardWebSocketClient.java:150) 在java.util.concurrent.FutureTask.run(FutureTask.java:266)处 运行(Thread.java:745) 在tomcat localhost\u access\u日志中,我看到以下请求信息

127.0.0.1 - - [01/Nov/2018:22:09:41 +0530] "GET /health/info HTTP/1.1" 302 - 0 127.0.0.1 - - [01/Nov/2018:22:09:41 +0530] "GET /login.jsp HTTP/1.1" 200 7649 16 127.0.0.1 - - [01/Nov/2018:22:09:41 +0530] "GET /health/191/6828a1fdefee40cf8dc74e825d8d2b0c/websocket HTTP/1.1" 302 - 0 127.0.0.1 - - [01/Nov/2018:22:09:41 +0530] "GET /login.jsp HTTP/1.1" 200 7649 0 127.0.0.1--[01/Nov/2018:22:09:41+0530]“GET/health/info HTTP/1.1”302-0 127.0.0.1---[01/Nov/2018:22:09:41+0530]“GET/login.jsp HTTP/1.1”200 7649 16 127.0.0.1---[01/Nov/2018:22:09:41+0530]“GET/health/191/6828a1fdefee40cf8dc74e825d8d2b0c/websocket HTTP/1.1”302-0 127.0.0.1---[01/Nov/2018:22:09:41+0530]“GET/login.jsp HTTP/1.1”200 7649 0 我没有找到有关如何解决此问题以及导致此问题的原因的任何信息


请帮助我解决此问题。

太晚了,无法为您的问题提供有用的解决方案。今天,我面临的问题和你们已经经历过的一样。不幸的是,Spring框架示例和官方资源并没有完全引用。因此,我想写下我是如何制作和运行的。首先,原来的答案不属于我。我在家里找到的

据我所知,为了能够从HTTP升级WebSocket协议,我们应该使用所需的功能稍微扩展“WebSocket配置”部分

RequestUpgradeStrategy-upgradeStrategy=new-TomcatRequestUpgradeStrategy();
registry.addEndpoint(“/hello”)
.withSockJS();
registry.addEndpoint(“/hello”)
.setHandshakeHandler(新的DefaultHandshakeHandler(升级策略))
.setAllowedOrigins(“*”);
在进行了上述调整之后,您可以通过嗅探WireShark了解协议之间的切换


我希望这对那些正在寻找摆脱错误的方法的人会有所帮助。

发生的事情是显而易见的。您发送的每个HTTP请求都被重定向到
login.jsp
页面。当请求登录页面时,200来自。很明显,您没有访问WebSocket资源的正确凭据,或者发送的凭据不正确。您好,谢谢您的回复。我不熟悉WebSocket。如何向websocket客户端请求添加凭据。