Java 404尝试访问服务器上WildFly上的websocket URL时出错,在本地主机上运行良好

Java 404尝试访问服务器上WildFly上的websocket URL时出错,在本地主机上运行良好,java,ubuntu,websocket,wildfly,Java,Ubuntu,Websocket,Wildfly,我创建并测试了一个Java EE 7应用程序,该应用程序在本地PC上使用WebSockets。当我在本地计算机上部署到WildFly 8,并使用localhost访问该应用程序时,一切正常 当我使用完全相同的WildFly配置在云服务器(Ubuntu 14.04)上部署相同的应用程序时,当应用程序尝试连接时,我会收到以下消息: "NetworkError: 404 Not Found - http://178.11.11.11:8080/pss/ws/notification" Firefox

我创建并测试了一个Java EE 7应用程序,该应用程序在本地PC上使用WebSockets。当我在本地计算机上部署到WildFly 8,并使用localhost访问该应用程序时,一切正常

当我使用完全相同的WildFly配置在云服务器(Ubuntu 14.04)上部署相同的应用程序时,当应用程序尝试连接时,我会收到以下消息:

"NetworkError: 404 Not Found - http://178.11.11.11:8080/pss/ws/notification"
Firefox can't establish a connection to the server at ws://178.11.11.11:8080/pss/ws/notification.
我可以访问应用程序,只是websocket连接失败了

pss是我的上下文根,websocket端点用@ServerEndpoint(“/ws/notification”)注释,因此URL是正确的,并且在使用localhost的本地计算机上100%工作

部署应用程序时,我可以看到websocket端点已被WildFly拾取,因此这不是问题所在

2015-02-14 14:18:21,200 INFO  [io.undertow.websockets.jsr] (MSC service thread 1-2) UT026003: Adding annotated server endpoint class za.co.ssms.interfaces.websocket.NotificationWebSocket for path /ws/notification
请求头是正确的:

Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Cache-Control   no-cache
Connection  keep-alive, Upgrade
Cookie  JSESSIONID=mgFhI1MAZwT2NwULXDXgEaXt.app
Host    178.11.11.11:8080
Origin  http://178.11.11.11:8080
Pragma  no-cache
Sec-WebSocket-Key   LD55xYAKjJoXgLXQpUS7fA==
Sec-WebSocket-Version   13
Upgrade websocket
User-Agent  Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:35.0) Gecko/20100101 Firefox/35.0
我使用以下URL(IP修改)访问应用程序,并且端口匹配:

http://178.11.11.11:8080/pss/
如果我在我的云服务器上运行netstat-an | grep“LISTEN”,我会得到以下结果,这表明0.0.0.0:8080已绑定并正在侦听:

tcp        0      0 127.0.0.1:9990          0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:3528            0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:8787            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
unix  2      [ ACC ]     STREAM     LISTENING     9227     /var/run/acpid.socket
unix  2      [ ACC ]     STREAM     LISTENING     7014     @/com/ubuntu/upstart
unix  2      [ ACC ]     STREAM     LISTENING     8907     /var/run/dbus/system_bus_socket
unix  2      [ ACC ]     STREAM     LISTENING     9448     /var/run/mysqld/mysqld.sock
unix  2      [ ACC ]     SEQPACKET  LISTENING     7666     /run/udev/control
我的公共界面配置如下:

<interface name="public">
    <inet-address value="${jboss.bind.address:0.0.0.0}"/>
</interface>

未安装Apache,因此这是到Wildfly服务器的直接连接

几天后,我很难理解为什么这会失败

以前有没有人经历过这种情况并找到了解决办法,或者你有没有办法进一步解决这个问题

谢谢

我也有类似的问题

但任何http升级请求都会以404失败。当WildFly和浏览器在同一台机器上时,相同的调用也会起作用

工作的原因不一定是因为在同一台机器上,通过连接到同一网络上同事的机器进行测试,连接工作

我如何解决我的问题:

GET /websocket/api/alert HTTP/1.0   
Host: www.example.co.za
Pragma: no-cache
Origin: http://www.example.co.za
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Cookie: JSESSIONID=biPOHuOQGRlw59eDqH4nevzt.mpilotech2
Sec-WebSocket-Key: U7f+gZQLqFLX18x6vB+i1Q==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Via: 1.1 localhost (squid/3.0.STABLE19)
X-Forwarded-For: 10.1.1.148
Cache-Control: no-cache, max-age=259200
Connection: keep-alive

HTTP/1.1 404 Not Found
Server: nginx/1.8.0
Date: Wed, 06 May 2015 08:29:05 GMT
Content-Length: 0
Connection: keep-alive
Access-Control-Allow-Origin: http://www.example.co.za
Vary: Origin
X-Powered-By: Undertow/1
Access-Control-Allow-Credentials: true
GET /websocket/api/alert HTTP/1.1
Host: www.example.co.za
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: http://www.example.co.za
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Cookie: JSESSIONID=biPOHuOQGRlw59eDqH4nevzt.mpilotech2
Sec-WebSocket-Key: xY36TVE76RzHujuFljtq/w==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits

HTTP/1.1 101 Switching Protocols
Server: nginx/1.8.0
Date: Wed, 06 May 2015 08:31:19 GMT
Content-Length: 0
Connection: upgrade
X-Powered-By: Undertow/1
Origin: http://www.example.co.za
Upgrade: WebSocket
Sec-WebSocket-Accept: sxwgjN1BONLj5U5Kjh80fjQWBo4=
Access-Control-Allow-Origin: http://www.example.co.za
Vary: Origin
Sec-WebSocket-Location: ws://127.0.0.1:8180/websocket/api/alert
Access-Control-Allow-Credentials: true
我在服务器上做了一个tcpdump,注意到流量缺少升级http头,但当我通过另一个网络(手机热点连接)连接时,情况并非如此

坏连接转储:

GET /websocket/api/alert HTTP/1.0   
Host: www.example.co.za
Pragma: no-cache
Origin: http://www.example.co.za
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Cookie: JSESSIONID=biPOHuOQGRlw59eDqH4nevzt.mpilotech2
Sec-WebSocket-Key: U7f+gZQLqFLX18x6vB+i1Q==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Via: 1.1 localhost (squid/3.0.STABLE19)
X-Forwarded-For: 10.1.1.148
Cache-Control: no-cache, max-age=259200
Connection: keep-alive

HTTP/1.1 404 Not Found
Server: nginx/1.8.0
Date: Wed, 06 May 2015 08:29:05 GMT
Content-Length: 0
Connection: keep-alive
Access-Control-Allow-Origin: http://www.example.co.za
Vary: Origin
X-Powered-By: Undertow/1
Access-Control-Allow-Credentials: true
GET /websocket/api/alert HTTP/1.1
Host: www.example.co.za
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: http://www.example.co.za
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Cookie: JSESSIONID=biPOHuOQGRlw59eDqH4nevzt.mpilotech2
Sec-WebSocket-Key: xY36TVE76RzHujuFljtq/w==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits

HTTP/1.1 101 Switching Protocols
Server: nginx/1.8.0
Date: Wed, 06 May 2015 08:31:19 GMT
Content-Length: 0
Connection: upgrade
X-Powered-By: Undertow/1
Origin: http://www.example.co.za
Upgrade: WebSocket
Sec-WebSocket-Accept: sxwgjN1BONLj5U5Kjh80fjQWBo4=
Access-Control-Allow-Origin: http://www.example.co.za
Vary: Origin
Sec-WebSocket-Location: ws://127.0.0.1:8180/websocket/api/alert
Access-Control-Allow-Credentials: true
良好的连接转储:

GET /websocket/api/alert HTTP/1.0   
Host: www.example.co.za
Pragma: no-cache
Origin: http://www.example.co.za
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Cookie: JSESSIONID=biPOHuOQGRlw59eDqH4nevzt.mpilotech2
Sec-WebSocket-Key: U7f+gZQLqFLX18x6vB+i1Q==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Via: 1.1 localhost (squid/3.0.STABLE19)
X-Forwarded-For: 10.1.1.148
Cache-Control: no-cache, max-age=259200
Connection: keep-alive

HTTP/1.1 404 Not Found
Server: nginx/1.8.0
Date: Wed, 06 May 2015 08:29:05 GMT
Content-Length: 0
Connection: keep-alive
Access-Control-Allow-Origin: http://www.example.co.za
Vary: Origin
X-Powered-By: Undertow/1
Access-Control-Allow-Credentials: true
GET /websocket/api/alert HTTP/1.1
Host: www.example.co.za
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: http://www.example.co.za
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Cookie: JSESSIONID=biPOHuOQGRlw59eDqH4nevzt.mpilotech2
Sec-WebSocket-Key: xY36TVE76RzHujuFljtq/w==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits

HTTP/1.1 101 Switching Protocols
Server: nginx/1.8.0
Date: Wed, 06 May 2015 08:31:19 GMT
Content-Length: 0
Connection: upgrade
X-Powered-By: Undertow/1
Origin: http://www.example.co.za
Upgrade: WebSocket
Sec-WebSocket-Accept: sxwgjN1BONLj5U5Kjh80fjQWBo4=
Access-Control-Allow-Origin: http://www.example.co.za
Vary: Origin
Sec-WebSocket-Location: ws://127.0.0.1:8180/websocket/api/alert
Access-Control-Allow-Credentials: true
然后我注意到失败的连接是通过squid 3代理服务器进行的,在web上阅读发现代理服务器不支持websocket

我的临时解决方案是创建一个自签名证书并切换到使用wss,我在反向代理上终止wss,而不是使用ws进行连接

创建证书的说明:

你不必使用ubuntu,我使用的是CentOS,大多数指令都是一样的


希望这样可以节省一些时间

您是否将Wildfly绑定到该IP地址?@Francesco我的公共接口声明如下:@Francesco正常http请求完成良好,但任何http升级请求都会以404失败。当WildFly和浏览器位于同一台机器上时,相同的调用也会起作用。