为什么 sockJS 会在给定的 websocket url 路径中添加 '/info'

Why does sockJS add a '/info' to a given websocket url path

我想用 "webapp/socket.do" 路径打开一个 websocket 端口。当我使用 SockJS 并尝试通过代码

发起调用时
    var socket = new SockJS('/webapp/socket.do');
    stompClient = Stomp.over(socket);

    stompClient.connect({}, ...

SockJS 默认会在给定路径的末尾添加一个“/info”。我想知道为什么?这可以改变或阻止吗?

将其与 Spring MVC 一起使用并具有 url 到 DispatcherServlet 的模式映射(如 < url-pattern >*.do</url-pattern>)时,这将 return 出现 404 错误。它被阻止是因为 sockJS 添加到给定 url.

的“/info”字符串

Spring web.xml servlet映射代码:

<servlet-mapping>
    <servlet-name>dispatch-servlet</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

有人知道 sockJS 在那里尝试什么吗?为什么?

这是 SockJS 协议的一部分,并且是强制性的。 此端点由服务器实现并传达服务器功能,例如支持的协议。见 relevant part of the SockJS protocol.

在那种情况下,我想您不仅需要为这个端点调整您的 servlet 映射,还需要为可能进入的其他请求调整您的 servlet 映射:对 websocket 的 HTTP 升级请求,对 HTTP-based transports supported by SockJS 的所有其他请求。