码头 Websocket JSR 356 错误 403

Posted

技术标签:

【中文标题】码头 Websocket JSR 356 错误 403【英文标题】:Jetty Websocket JSR 356 Error 403 【发布时间】:2016-07-13 15:36:29 【问题描述】:

让我先说我是 maven 和 jetty 的新手。无论如何,当我在 Windows 上并使用 localhost 作为 websocket 地址时,我的 websocket 工作正常。然后,我将代码复制到我的 AWS 服务器,并将浏览器中的 websocket 地址更改为 AWS DNS。当我尝试运行它时,我得到了一个错误 403(被禁止的权限)并且握手失败。我在网上看到的所有地方都说 403 错误是您手动添加到 websocket 服务器的内容。我在服务器端缺少某种文件权限吗?顺便说一句,Jetty 说它已经在服务器端启动并运行了。

【问题讨论】:

如果您将该 AWS DNS 更改为 127.0.0.1,会发生什么情况?有用吗 好吧,我不再收到 403。现在,我在使用它时遇到了这个错误。 WebSocket 连接失败:连接建立错误:net::ERR_CONNECTION_REFUSED 我不认为这是正确的。我希望码头在服务器而不是本地机器上运行。 127.0.0.1 是浏览器机器的localhost 【参考方案1】:

403 Forbidden 是在 HTTP/1.1 连接升级到 Websocket 期间看到的响应,/origin/ 信息不合理。

有关 websocket 规范的详细信息,请参阅 RFC6455: Origin Considerations。

Jetty 的实现不会自动发出403 Forbidden,在 Jetty 服务器之外您会看到它的唯一方法是您的自定义 WebSocketCreator 选择使用 sendForbidden()

【讨论】:

我没有告诉我的 websocket 服务器检查源,所以这应该不是问题。 任何中间系统也可以执行来源检查。不要假设它是 Jetty 服务器向您返回此响应。 在花了几乎一整天的时间研究这个之后,我认为问题出在 AWS 上,但我无法真正做到这一点。你知道它可能是什么吗?我已经在安全组上打开了 8080 端口。

以上是关于码头 Websocket JSR 356 错误 403的主要内容,如果未能解决你的问题,请参考以下文章

带有 Spring Boot 的 JAVAX JSR 356 Websocket

将 Java WebSockets (JSR-356) 与 SpringBoot 集成

JSR 356 WebSocket 最大消息大小配置失败

使用 JSR-356(websockets)的 Jetty 8 配置

Jetty 中的 JSR-356 javax websockets(嵌入式和非嵌入式)

部署到 tomcat 中的 Web 套接字编程显示错误