Error during WebSocket handshake 403

3695 단어

악수 중 오류 403


브라우저 콘솔 오류 프롬프트
Error during WebSocket handshake: Unexpected response code: 403

구성 예

  • 웹소켓 등록
  • @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(socketHandler, "/test").addInterceptors(new SystemInfoSocketHandshakeInterceptor());
        registry.addHandler(socketHandler, "/sockjs/test").addInterceptors(new SystemInfoSocketHandshakeInterceptor())
                .withSockJS();
    }
  • 악수 차단기
  • @Configuration
    public class SystemInfoSocketHandshakeInterceptor implements HandshakeInterceptor {
    
        @Override
        public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map attributes) {
            log.info("socket beforeHandshake..");
            if (request instanceof ServletServerHttpRequest) {
                ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
                HttpSession session = servletRequest.getServletRequest().getSession(false);
                //  
            }
            return true;
        }
    
        @Override
        public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {
            log.info("socket beforeHandshake..");
        }
    }
  • 클라이언트 연결
  • var wsServer = "ws://127.0.0.1:8080";
    var webSocket;
    if ('WebSocket' in window || 'MozWebSocket' in window) {
        webSocket = new WebSocket(wsServer + "/test");
    } else {
        webSocket = new SockJS(wsServer + "/sockjs/test");
    }
    
    webSocket.onerror = function (event) {
        console.log("websockt ")
    };

    분석

  • 접속 실패
  • 액세스 차단
  • nginx 에이전트
  • 도메인 간
  • 해결하다


    연결 문제


    연결 위의 문제라면, 일반적으로 설정이 정확한지 확인하십시오
    버전 문제 주의

    액세스 차단


    차단기에서 차단을 해제하다
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**").allowedOrigins("*");
            }
        };
    }

    nginx 에이전트


    nginx에서 설정proxy_set_header Upgrade $http_upgradeproxy_set_header Connection "upgrade"proxy_set_header Host $host 세 가지 설정
    전체 구성은 다음과 같습니다.
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    도메인 간


    추가 setAllowedOrigins("*") 도메인 간 문제 해결
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(socketHandler, "/test")
                .addInterceptors(new SystemInfoSocketHandshakeInterceptor())
                .setAllowedOrigins("*");
        registry.addHandler(socketHandler, "/sockjs/test")
                .addInterceptors(new SystemInfoSocketHandshakeInterceptor())
                .setAllowedOrigins("*")
                .withSockJS();
    }

    자료 관련

  • Spring WebSockets

  • 수록시간: 2021/02/03

    좋은 웹페이지 즐겨찾기