![](/img/trans.png)
[英]Error during WebSocket handshake: Unexpected response code: 400 with CoinIMP keys
[英]Error during WebSocket handshake (Unexpected response code: 400)
我的代碼可以在localhost正常運行,但是當我將應用程序切斷時,會發生此錯誤。
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(禁止)
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代碼:
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());
}
}
在春季切斷以下異常:
2017-05-27 11:14:57.101錯誤51230 --- [XNIO-2 task-11] oswsssDefaultHandshakeHandler:由於無效的升級標頭,握手失敗:null
2017-05-27 11:16:10.020錯誤51230 --- [MessageBroker-1] osssTaskUtils $ LoggingErrorHandler:計划任務發生意外錯誤。
org.springframework.web.socket.sockjs.SockJsTransportFailureException:無法編寫SockJsFrame content ='h'; 嵌套異常是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),位於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 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) org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession.writeFrame(AbstractSockJsSession.java:322)上的AbstractHttpSockJsSession.java:350)...省略了10個常見框架
服務器是apache2網絡服務器。 如何解決此問題?
我通過激活ws_tunnel來解決這個問題
須藤a2enmod proxy_wstunnel
並在位於以下位置的apache 000-default-le-ssl.conf
文件上制作RewriteEngine
/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.