简体   繁体   English

WebSocket握手期间出错(意外的响应代码:400)

[英]Error during WebSocket handshake (Unexpected response code: 400)

My code perfectly working in localhost but when I put my application to sever this error happens. 我的代码可以在localhost正常运行,但是当我将应用程序切断时,会发生此错误。

WebSocket connection to 'wss://url.com/webSocket/193/uj4s3xue/websocket' failed: Error during WebSocket handshake: Unexpected response code: 400 WebSocket与'wss://url.com/webSocket/193/uj4s3xue/websocket'的连接失败:WebSocket握手期间出错:意外的响应代码:400

sockjs.min.js:2 POST https://url.com/webSocket/193/e1vwalij/xhr_streaming?t=1495418202369 403 (Forbidden) sockjs.min.js:2 POST https://url.com/webSocket/193/e1vwalij/xhr_streaming?t=1495418202369 403(禁止)

Js code : js代码:

   function connect() {
        var socket = new SockJS('/webSocket');
        stompClient = Stomp.over(socket);
        stompClient.connect({}, function (frame) {
            stompClient.debug = null;
            stompClient.subscribe('/topic/messages/' + vm.id, function (greeting) {
                refreshMessages(JSON.parse(greeting.body));
            });
        });
    } 

Java code : Java代码:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.ChannelRegistration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic");
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/webSocket").setAllowedOrigins("*").withSockJS();
    }

    @Bean
    public PresenceChannelInterceptor presenceChannelInterceptor() {
        return new PresenceChannelInterceptor();
    }

    @Override
    public void configureClientInboundChannel(ChannelRegistration registration) {
        registration.setInterceptors(presenceChannelInterceptor());
    }

    @Override
    public void configureClientOutboundChannel(ChannelRegistration registration) {
        registration.taskExecutor().corePoolSize(8);
        registration.setInterceptors(presenceChannelInterceptor());
    }
}

In spring sever following exception happens : 在春季切断以下异常:

2017-05-27 11:14:57.101 ERROR 51230 --- [ XNIO-2 task-11] oswsssDefaultHandshakeHandler : Handshake failed due to invalid Upgrade header: null 2017-05-27 11:14:57.101错误51230 --- [XNIO-2 task-11] oswsssDefaultHandshakeHandler:由于无效的升级标头,握手失败:null

2017-05-27 11:16:10.020 ERROR 51230 --- [MessageBroker-1] osssTaskUtils$LoggingErrorHandler : Unexpected error occurred in scheduled task. 2017-05-27 11:16:10.020错误51230 --- [MessageBroker-1] osssTaskUtils $ LoggingErrorHandler:计划任务发生意外错误。

org.springframework.web.socket.sockjs.SockJsTransportFailureException: Failed to write SockJsFrame content='h'; org.springframework.web.socket.sockjs.SockJsTransportFailureException:无法编写SockJsFrame content ='h'; nested exception is java.io.IOException: Broken pipe at org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession.writeFrame(AbstractSockJsSession.java:339) at org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession.sendHeartbeat(AbstractSockJsSession.java:255) at org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession$HeartbeatTask.run(AbstractSockJsSession.java:451) at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java 嵌套异常是java.io.IOException:org.springframework.web.socket.sockjs.transport.session上的org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession.writeFrame(AbstractSockJsSession.java:339)处的管道损坏org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession $ HeartbeatTask.run(AbstractSockJsSession.java:451)上的。 (java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511)的java.util.concurrent.FutureTask.run(FutureTask.java:266)的(DelegatingErrorHandlingRunnable.java:54)。在java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)处的ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 201(ScheduledThreadPoolExecutor.java:180)在java.util.concurrent.ThreadPoolExecutor.runWorker( :1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748) Caused by: java.io.IOException: Broken pipe at sun.nio.ch.FileDispatcherImpl.writev0(Native Method) at sun.nio.ch.SocketDispatcher.writev(SocketDispatcher.java:51) at sun.nio.ch.IOUtil.write(IOUtil.java:148) at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:504) at org.xnio.nio.NioSocketConduit.write(NioSocketConduit.java:161) at io.undertow.server.protocol.http.HttpResponseConduit.write(HttpResponseConduit.java:645) at io.undertow.conduits.ChunkedStreamSinkConduit.doWrite(ChunkedStreamSinkConduit.java:163) at io.undertow.conduits.ChunkedStreamSinkConduit.write(ChunkedStreamSinkConduit.java:127) at org.xnio.conduits.ConduitStreamSinkChannel.write(ConduitStreamSinkChannel.java:150) at io.undertow.channels.DetachableStreamSinkChannel.write(DetachableStreamSinkChannel.java:240) at io.undertow.server.HttpServerExchange$WriteDispatchChannel.write(Http :1142),位于java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617),位于java.lang.Thread.run(Thread.java:748),原因:java.io.IOException:日晒时管道破裂sun.nio.ch.IOUtil.write(IOUtil.java:148)上的sun.nio.ch.SocketDispatcher.writev(SocketDispatcher.java:51)上的.nio.ch.FileDispatcherImpl.writev0(本机方法) org.xnio.nio.NioSocketConduit.write(NioSocketConduit.java:161)的io.undertow.server.protocol.http.HttpResponseConduit.write(HttpResponseConduit.java:645的.ch.SocketChannelImpl.write(SocketChannelImpl.java:504) )在io.undertow.conduits.ChunkedStreamSinkConduit.java(163)在io.undertow.conduits.ChunkedStreamSinkConduit.java:163)在org.xnio.conduits。 150)在io.undertow.channels.DetachableStreamSinkChannel.write(DetachableStreamSinkChannel.java:240)在io.undertow.server.HttpServerExchange $ WriteDispatchChannel.write(Http ServerExchange.java:2049) at io.undertow.servlet.spec.ServletOutputStreamImpl.writeBufferBlocking(ServletOutputStreamImpl.java:570) at io.undertow.servlet.spec.ServletOutputStreamImpl.flushInternal(ServletOutputStreamImpl.java:485) at io.undertow.servlet.spec.ServletOutputStreamImpl.flush(ServletOutputStreamImpl.java:472) at io.undertow.servlet.spec.HttpServletResponseImpl.flushBuffer(HttpServletResponseImpl.java:461) at javax.servlet.ServletResponseWrapper.flushBuffer(ServletResponseWrapper.java:215) at javax.servlet.ServletResponseWrapper.flushBuffer(ServletResponseWrapper.java:215) at org.springframework.security.web.util.OnCommittedResponseWrapper.flushBuffer(OnCommittedResponseWrapper.java:159) at javax.servlet.ServletResponseWrapper.flushBuffer(ServletResponseWrapper.java:215) at org.springframework.http.server.ServletServerHttpResponse.flush(ServletServerHttpResponse.java:96) at org.springframework.web.socket.sockjs.transport.session.AbstractHttpSockJsSession.writeFrameInternal( io.undertow.servlet.spec.ServletOutputStreamImpl.writeBufferBlocking(ServletOutputStreamImpl.java:570)处的ServerExchange.java:2049)io.undertow.servlet处io.undertow.servlet.spec.ServletOutputStreamImpl.flushInternal(ServletOutputStreamImpl.java:485)处的ServerExchange.java:2049)位于javax的io.undertow.servlet.spec.HttpServletResponseImpl.flushBuffer(HttpServletResponseImpl.java:461)的.spec.ServletOutputStreamImpl.flush(ServletOutputStreamImpl.java:472)在javax的java.servlet.ServletResponseWrapper.flushBuffer(ServletResponseWrapper.java:215) org.springframework.security.web.util.OnCommittedResponseWrapper.flushBuffer(OnCommittedResponseWrapper.java:159)处的servlet.ServletResponseWrapper.flushBuffer(ServletResponseWrapper.java:215)at javax.servlet.ServletResponseWrapper.flushBuffer(Servlet) org.springframework.web.socket.sockjs.transport.session.AbstractHttpSockJsSession.writeFrameInternal(.springframework.http.server.ServletServerHttpResponse.flush(ServletServerHttpResponse.java:96) AbstractHttpSockJsSession.java:350) at org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession.writeFrame(AbstractSockJsSession.java:322) ... 10 common frames omitted org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession.writeFrame(AbstractSockJsSession.java:322)上的AbstractHttpSockJsSession.java:350)...省略了10个常见框架

Sever is apache2 web sever. 服务器是apache2网络服务器。 How do I fix this issue?. 如何解决此问题?

I slove this problem by activating ws_tunnel with 我通过激活ws_tunnel来解决这个问题

sudo a2enmod proxy_wstunnel 须藤a2enmod proxy_wstunnel

and making RewriteEngine On apache 000-default-le-ssl.conf file located in 并在位于以下位置的apache 000-default-le-ssl.conf文件上制作RewriteEngine

/etc/apache2/sites-enabled/000-default-le-ssl.conf /etc/apache2/sites-enabled/000-default-le-ssl.conf

  RewriteEngine On
    RewriteCond %{HTTP:Upgrade} =websocket [NC]
    RewriteRule /webSocket(.*)           ws://127.0.0.1:8080/webSocket/$1 [P,L]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 WebSocket握手期间发生错误:意外的响应代码:带CoinIMP密钥的400 - Error during WebSocket handshake: Unexpected response code: 400 with CoinIMP keys Spring,SockJS - WebSocket 握手期间出错:意外响应代码 400 - Spring, SockJS - error during WebSocket handshake: Unexpected response code 400 WebSocket 握手期间出错:意外响应代码:400 Spring 启动 websockets - Error during WebSocket handshake: Unexpected response code: 400 Spring boot websockets 失败:WebSocket握手期间出错:意外的响应代码:404 - failed: Error during WebSocket handshake: Unexpected response code: 404 WebSocket握手期间出错:意外的响应代码:404 - Error during WebSocket handshake: Unexpected response code: 404 WebSocket握手期间出错:意外的响应代码:302 - Error during WebSocket handshake: Unexpected response code: 302 失败:WebSocket 握手期间出错:意外响应代码:302 - failed: Error during WebSocket handshake: Unexpected response code: 302 WebSocket 握手期间出错:意外响应代码:403 - Error during WebSocket handshake: Unexpected response code: 403 使用Maven,WebSocket连接失败:WebSocket握手期间出错:意外响应代码:404 - Using Maven, WebSocket connection to failed: Error during WebSocket handshake: Unexpected response code: 404 java-server websocket失败:WebSocket握手期间出错:意外的响应代码:404 - java-server websocket failed: Error during WebSocket handshake: Unexpected response code: 404
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM