2 heymanandgirl heymanandgirl 于 2016.03.23 15:52 提问

java websocket报错302

WebSocket connection to 'ws://127.0.0.1:3333/buguback/websocket' failed: Error during WebSocket handshake: Unexpected response code: 302

8个回答

u013892790
u013892790   2016.04.05 15:32

亲 你解决没有 我也遇到了 死活进不去

OoFriday55
OoFriday55 回复wobushifeiren: 亲,请问下这个问题解决么有,我也没弄晕了
大约一年之前 回复
wobushifeiren
wobushifeiren 大哥,解决了没?我也遇到这个问题了~
大约 2 年之前 回复
caozhy
caozhy   Ds   Rxr 2016.03.23 15:55

你的服务器看上去有问题,它怎么产生跳转了,调试下。

caozhy
caozhy   Ds   Rxr 2016.03.23 15:55

或者你的地址写的不对。

heymanandgirl
heymanandgirl http://127.0.0.13333/buguback项目是可以访问的。然后我也把所有拦截器去掉了,访问了还是不行
2 年多之前 回复
heymanandgirl
heymanandgirl   2016.03.23 16:05

后端的代码:
@ServerEndpoint("/websocket")
public class Socket {

private Logger logger = Logger.getLogger(this.getClass().getName());

//该注解用来指定一个URI,客户端可以通过这个URI来连接到WebSocket。类似Servlet的注解mapping。无需在web.xml中配置。

    //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。

    //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识
    //与某个客户端的连接会话,需要通过它来给客户端发送数据
    private Session session;

    /**
     * 连接建立成功调用的方法
     * @param session  可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据
     */
    @OnOpen
    public void onOpen(Session session){
        this.session = session;
        System.out.println("有新连接加入!当前在线人数为");
    }

    /**
     * 连接关闭调用的方法
     */
    @OnClose
    public void onClose(){

        System.out.println("有一连接关闭!当前在线人数为");
    }

    /**
     * 收到客户端消息后调用的方法
     * @param message 客户端发送过来的消息
     * @param session 可选的参数
     */
    @OnMessage
    public void onMessage(String message, Session session) {
        System.out.println("来自客户端的消息:" + message);

    }

    /**
     * 发生错误时调用
     * @param session
     * @param error
     */
    @OnError
    public void onError(Session session, Throwable error){
        System.out.println("发生错误");
        error.printStackTrace();
    }

    /**
     * 这个方法与上面几个方法不一样。没有用注解,是根据自己需要添加的方法。
     * @param message
     * @throws IOException
     */
    public void sendMessage(String message) throws IOException{
        this.session.getBasicRemote().sendText(message);
        //this.session.getAsyncRemote().sendText(message);
    }
baidu_36521148
baidu_36521148   2016.11.01 10:37

你解决好了没,我也遇到了,头疼了俩天了对这个问题。。。。。。。。。。遇到了给咱说一声我的QQ2276922659

OoFriday55
OoFriday55   2017.05.09 17:03

亲,请问下这个问题解决么有,我也没弄晕了

hzw2312
hzw2312   2017.07.27 20:02

我也碰到啦302的问题。不知道为什么,我在hosts文件中配置啦一个域名本地解析,
如:127.0.0.1 www.tms.com
然后js连接里写到:

 websocket = new WebSocket("ws://www.tms.com/sct/websocket/socketServer.do");

这样,在浏览器中输入localhost访问项目,WebSocket连接就会报302!
访问项目时,必须输入www.tms.com访问WebSocket时才会正常。我想可能是因为我使用SpringWebSocket里面有一个拦截器,父类名是

 HttpSessionHandshakeInterceptor

这个拦截器,专门拦截请求,将WebSocket请求转换为Http请求:

 public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
            Map<String, Object> attributes) throws Exception {
        // TODO Auto-generated method stub
        System.out.println("Before Handshake");
        if (request instanceof ServletServerHttpRequest) {
            ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
            HttpSession session = servletRequest.getServletRequest().getSession(false);
            if (session != null) {
                //使用userName区分WebSocketHandler,以便定向发送消息
                User user = (User)session.getAttribute(Constants.USER_SESSION);
                attributes.put(Constants.WEBSOCKET_USERNAME,user.getId());
            }
        }
        return super.beforeHandshake(request, response, wsHandler, attributes);

    }

这样当我们访问浏览器的HTTP地址跟WebSocket地址域名不一样时,它会认为请求被转移啦,也就是302!
反正我的是都改成localhost或者都改成www.tms.com访问就好啦!
当然上面的分析都是个人的猜测,做不得准,希望有人能做详细的解释!

m0_37487032
m0_37487032   2017.09.18 16:19

报302的原因是链接被重定向了,检查一下是否是后台访问机制的问题。比如,必须登录过后才能进行访问。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
websocket 链接服务器报 302 错误解决方法
将 websocket 的定义放到 JS 脚本的开头
Java WebSocket连接302错误 或者 握手失败错误
Java端 /** * @ServerEndpoint 注解是一个类层次的注解,他的功能主要是将目前的类定义成一个websocket的服务器端 * 注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocker服务器端 * */ @ServerEndpoint("/websocket") public class WebSocketTest { /
Spring Websocket一个错误
这是第一次自己写出工程中遇到的一个问题,使用Spring Websocket时,出现**Firefox 无法建立到 ws://localhost:8080/Xxx//ws?xxx=x**错误,找了好久,最后发现是自己一个属性英语拼写错误。 问题最后是解决了,但是过程中发现一些东西,通过这些大概可以判断问题是从哪儿出的 1、在public class XxxShake implements Hands
WebSocket使用中碰到的问题以及解决方法
最近因为项目原因,需要做服务器往前端的数据推送功能,开始使用了comet4j,不过使用时碰到一个问题,就是jsp页面的路径不再根目录下就无法获取到服务器端推送过来的数据,而我们也不能因为这个原因把页面全部搬到根目录下,所以就想着换个技术使用WebSocket来做这个数据的推送。       开始使用并没有遇到什么技术上的难处,消息推送也可以实现,可测试时发现要是有页面是从系统中新开的页面,也就是
SSM集成WebSocket时出现302错误
错误如下:connection to ‘ws://localhost:8080/hello’ failed: Error during WebSocket handshake: Unexpected response code: 302 原因:302表示重定向,一般是由于项目使用了拦截器之类的。我的项目使用了shiro,需要将设置/hello=anon。...
ajax请求之后,后台代码没有处理,浏览器控制台都没有报错,状态码变成302的原因
ajax请求之后,后台代码没有处理,浏览器控制台都没有报错,状态码变成302的原因
HTML5 WebSocket 详解
WebSocket 前世今生 众所周知,Web 应用的交互过程通常是客户端通过浏览器发出一个请求,服务器端接收请求后进行处理并返回结果给客户端,客户端浏览器将信息呈现,这种机制对于信息变化不是特别频繁的应用尚可,但对于实时要求高、海量并发的应用来说显得捉襟见肘,尤其在当前业界移动互联网蓬勃发展的趋势下,高并发与用户实时响应是 Web 应用经常面临的问题,比如金融证券的实时信息,Web 导航应用中
java网络socket编程(五)之Socket扩展2--实现重定向服务器
重定向服务器,能将用户从一个web网站重定向到另一个网站,使用302 Found编码将接受的所有请求重定向到新url表示的网站上。 package com.hq.socket; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.Inpu
webSocket连接错误原因
1、在SSM架构中正常使用的代码,迁移到Spring Boot中出现错误 我是@ServerEndpoint注解方式实现 报错: 这绝对是个坑!!! 错误原因:要注入ServerEndpointExporter,这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint。要注意,如果使用独立的servlet容器,而不是直接使...
websocket技术分享
websocket进阶 开发环境: spring3+tomcat7+spring-websocket4 + spring security3 运行环境: windows、Linux   一、背景: 产品将要发布的消息或其他需要让客户提前知道的消息,在客户端和服务端建立连接后推送 给客户端。   二、WebSocket是什么 WebSocket协议是基于TCP的一种新的网络协议