Сначала я задал этот вопрос в stackoverflow, но это больше похоже на проблему с сервером, чем на проблему с кодированием. Я разрабатываю проект на Java EE, и у меня есть доступ к серверу в университетской локальной сети. Чтобы уточнить детали, я также добавляю свои коды ниже.
Я пытаюсь подключиться к серверу через WebSockets только на одной странице.
Мой клиентский веб-сокет:
var socket = new WebSocket("wss://serverName:8181/projectName/actions");
Конечная точка Java-сервера:
/actions
URL-адрес, в котором используется веб-сокет, имеет следующую структуру:
https: //serverName/projectName/pageName.xhtml
Мой корень контекста совпадает с именем проекта. Ограничения безопасности в файле web.xml:
<security-constraint>
<web-resource-collection>
<web-resource-name>SecureResource</web-resource-name>
<url-pattern>/projectName/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
Я использую Glassfish Application Server 4.1. На сервере есть два прослушивателя http. О слушателях:
Http-Listener-1: слушает порт 8080, безопасность не включена, поддержка веб-сокетов не включена
Http-Listener-2: слушает порт 8181, безопасность включена, веб-сокет включен
SSL3 и TLS включены в обоих из них. Я даю сведения о сервере, потому что я действительно новичок в вопросах, связанных с сервером, поэтому я не знаю, важны ли эти сведения. Я также запускаю следующие команды, пытаясь найти исправление. Но эти команды могут не быть связаны:
asadmin set server.network-config.protocols.protocol.http-listener-1.http.scheme-mapping=X-Forwarded-Proto
asadmin set server.network-config.protocols.protocol.http-listener-2.http.scheme-mapping=X-Forwarded-Proto
Все мои подключения работают по HTTPS без проблем. Однако на странице, где я использую веб-сокет, я получаю эту ошибку:
Соединение WebSocket с 'wss: // serverName: 8181 / projectName / actions' не удалось: ошибка при установлении соединения: net :: ERR_CONNECTION_REFUSED
Я пробовал много разных подходов. Я также пробовал использовать URI веб-сокета без номера порта. Все работало нормально до того, как у нас появился цифровой сертификат на сервере. Тогда я просто использовал ws вместо wss, и у меня не было ограничений безопасности в файле web.xml. Однако после долгого чтения и попыток я не могу обеспечить соединение через веб-сокет по протоколу HTTPS.