websocket 跨域问题

1.前端页

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
     <script src="/webjars/jquery/jquery.min.js"></script>
    <script src="/webjars/sockjs-client/sockjs.min.js"></script>
    <script src="/webjars/stomp-websocket/stomp.min.js"></script>
</head>
<body>
<div>
    <label for="username">请输入用户名:</label>
    <input type="text" id="username" placeholder="用户名">
</div>

<div>
    <input type="button" value="连接" id="connect">
    <input type="button" value="断开连接" id="disconnet" disabled="disabled">
</div>
<div id="chat"></div>

<div>
    <label for="content">请输入聊天内容</label>
    <input type="text" id="content" placeholder="聊天内容">
</div>
<input value="发送" type="button" id="send" disabled="disabled"></input>
<script>
    var stompClient;
    $(function () {
        $("#connect").click(function () {
            connect();
            $("#send").click(function () {
                stompClient.send("/app/hello",{},JSON.stringify({'name':$("#username").val(),'content':$("#content").val()}))
            })
            $("#disconnet").click(function () {
                stompClient.disconnect();
                setConnect(false);
            })
        })
    })
    function connect() {
        if (!$("#username").val()) {
            return;
        }
        var socketjs = new SockJS("http://localhost:8080/chat");
        stompClient = Stomp.over(socketjs);
        stompClient.connect({},function (frame) {
            setConnect(true);
            stompClient.subscribe("/topic/greetings", function (greeting) {
                var msgContent = JSON.parse(greeting.body);
                console.log(msgContent);
                $("#chat").append("<div>"+msgContent.name+":"+msgContent.content+"</div>");
            });
        })
    }

    function setConnect(connected) {
        $("#connect").prop("disabled", connected);
        $("#disconnet").prop("disabled", !connected);
        $("#send").prop("disabled", !connected);
    }
</script>
</body>
</html>

后端配置原来的:

 项目自己可以自己访问,前后端分离后除了配置nginx的upgrate外还是会有跨域问题,

后面根据提示:

When allowCredentials is true, allowedOrigins cannot contain the special value "*" since that cannot be set on the "Access-Control-Allow-Origin" response header. To allow credentials to a set of origins, list them explicitly or consider using "allowedOriginPatterns" instead.


修改如下后解决:

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
WebSocket跨域问题可以通过在服务端进行配置来解决。具体方法如下: 1.在服务端配置允许跨域访问的信息,例如在Spring Boot中可以使用@CrossOrigin注解或者配置CorsFilter来实现。 2.在客户端建立WebSocket连接时,需要在请求头中添加Origin字段,指定允许跨域的源地址。 3.在服务端接收到WebSocket连接请求时,需要在响应头中添加Access-Control-Allow-Origin字段,指定允许跨域的源地址。 下面是一个使用Spring Boot解决WebSocket跨域问题的例子: ```java // 1.在WebSocket配置类中添加@CrossOrigin注解 @Configuration @EnableWebSocket @CrossOrigin(origins = "http://localhost:8080") public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(myHandler(), "/myHandler").setAllowedOrigins("*"); } @Bean public WebSocketHandler myHandler() { return new MyHandler(); } } // 2.在客户端建立WebSocket连接时添加Origin字段 var socket = new WebSocket("ws://localhost:8080/myHandler"); socket.onopen = function(event) { socket.send("Hello, Server!"); }; // 3.在服务端响应头中添加Access-Control-Allow-Origin字段 public class MyHandler implements WebSocketHandler { @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { session.sendMessage(new TextMessage("Hello, Client!")); session.getAttributes().put("username", "guest"); session.getAttributes().put("uid", "123456"); session.getAttributes().put("timestamp", System.currentTimeMillis()); session.getAttributes().put("ip", session.getRemoteAddress().getHostName()); session.getAttributes().put("port", session.getRemoteAddress().getPort()); session.getAttributes().put("protocol", session.getHandshakeHeaders().get("Sec-WebSocket-Protocol").get(0)); session.getAttributes().put("origin", session.getHandshakeHeaders().get("Origin").get(0)); session.getAttributes().put("user-agent", session.getHandshakeHeaders().get("User-Agent").get(0)); session.getAttributes().put("referer", session.getHandshakeHeaders().get("Referer").get(0)); session.getAttributes().put("cookie", session.getHandshakeHeaders().get("Cookie").get(0)); session.getAttributes().put("path", session.getUri().getPath()); session.getAttributes().put("query", session.getUri().getQuery()); session.getAttributes().put("params", session.getUri().getQueryParams()); session.getAttributes().put("headers", session.getHandshakeHeaders()); session.getAttributes().put("attributes", session.getAttributes()); session.getAttributes().put("principal", session.getPrincipal()); session.getAttributes().put("remote-address", session.getRemoteAddress()); session.getAttributes().put("local-address", session.getLocalAddress()); session.getAttributes().put("binary-message-size-limit", session.getBinaryMessageSizeLimit()); session.getAttributes().put("text-message-size-limit", session.getTextMessageSizeLimit()); session.getAttributes().put("idle-timeout", session.getIdleTimeout()); session.getAttributes().put("uri-variables", session.getUriVariables()); session.getAttributes().put("handshake-timeout", session.getHandshakeTimeout()); session.getAttributes().put("heartbeat-interval", session.getHeartbeatInterval()); session.getAttributes().put("send-timeout", session.getSendTimeout()); session.getAttributes().put("message-size-limit", session.getMessageSizeLimit()); session.getAttributes().put("extensions", session.getExtensions()); session.getAttributes().put("subprotocols", session.getAcceptedProtocol()); session.getAttributes().put("ssl-session", session.getSslSession()); session.getAttributes().put("local-name", session.getLocalAddress().getHostName()); session.getAttributes().put("local-port", session.getLocalAddress().getPort()); session.getAttributes().put("remote-name", session.getRemoteAddress().getHostName()); session.getAttributes().put("remote-port", session.getRemoteAddress().getPort()); session.getAttributes().put("remote-user", session.getPrincipal().getName()); session.getAttributes().put("remote-ip", session.getRemoteAddress().getAddress().getHostAddress()); session.getAttributes().put("remote-host", session.getRemoteAddress().getHostName()); session.getAttributes().put("remote-uri", session.getUri().toString()); session.getAttributes().put("remote-headers", session.getHandshakeHeaders()); session.getAttributes().put("remote-attributes", session.getAttributes()); session.getAttributes().put("remote-protocol", session.getHandshakeHeaders().get("Sec-WebSocket-Protocol").get(0)); session.getAttributes().put("remote-origin", session.getHandshakeHeaders().get("Origin").get(0)); session.getAttributes().put("remote-user-agent", session.getHandshakeHeaders().get("User-Agent").get(0)); session.getAttributes().put("remote-referer", session.getHandshakeHeaders().get("Referer").get(0)); session.getAttributes().put("remote-cookie", session.getHandshakeHeaders().get("Cookie").get(0)); session.getAttributes().put("remote-path", session.getUri().getPath()); session.getAttributes().put("remote-query", session.getUri().getQuery()); session.getAttributes().put("remote-params", session.getUri().getQueryParams()); session.getAttributes().put("remote-extensions", session.getExtensions()); session.getAttributes().put("remote-subprotocols", session.getAcceptedProtocol()); session.getAttributes().put("remote-ssl-session", session.getSslSession()); session.getAttributes().put("remote-local-name", session.getLocalAddress().getHostName()); session.getAttributes().put("remote-local-port", session.getLocalAddress().getPort()); session.getAttributes().put("remote-remote-name", session.getRemoteAddress().getHostName()); session.getAttributes().put("remote-remote-port", session.getRemoteAddress().getPort()); session.getAttributes().put("remote-remote-user", session.getPrincipal().getName()); session.getAttributes().put("remote-remote-ip", session.getRemoteAddress().getAddress().getHostAddress()); session.getAttributes().put("remote-remote-host", session.getRemoteAddress().getHostName()); session.getAttributes().put("remote-remote-uri", session.getUri().toString()); session.getAttributes().put("remote-remote-headers", session.getHandshakeHeaders()); session.getAttributes().put("remote-remote-attributes", session.getAttributes()); session.sendMessage(new TextMessage("Hello, Client!")); } @Override public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception { session.sendMessage(new TextMessage("Hello, Client!")); } @Override public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { session.sendMessage(new TextMessage("Hello, Client!")); } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception { session.sendMessage(new TextMessage("Hello, Client!")); } @Override public boolean supportsPartialMessages() { return false; } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

焱童鞋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值