Uncaught SecurityError: Failed to construct 'WebSocket': An insecure WebSocket connection may not be initiated from a page loaded over HTTPS
Uncaught SecurityError: Failed to construct 'WebSocket': An insecure WebSocket connection may not be initiated from a page loaded over HTTPS
我正在使用 GlassFish Server 4.1/Java EE 7。在我的 web.xml 文件中,我提到了以下安全限制。
<security-constraint>
<display-name>UserConstraint</display-name>
<web-resource-collection>
<web-resource-name>Provide a Name</web-resource-name>
<description/>
<url-pattern>/admin_side/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>ROLE_ADMIN</role-name>
</auth-constraint>
<user-data-constraint>
<description/>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
其他机构也一样。
由于 transport-guarantee
设置为 CONFIDENTIAL
,与指定 URL 模式匹配的网页 /admin_side/*
运行 通过安全通道(HTTPS
).
同时使用 WebSockets 如下(Java脚本),
var ws = new WebSocket("ws://localhost:8181/Context/Push");
它无法建立初始握手。浏览器在浏览器控制台上显示以下警告。
[blocked] The page at 'https://localhost:8181/Context/admin_side/Category' was loaded over HTTPS, but ran insecure content from 'ws://localhost:8080/Context/Push': this content should also be loaded over HTTPS.
Uncaught SecurityError: Failed to construct 'WebSocket': An insecure WebSocket connection may not be initiated from a page loaded over HTTPS.
当 web.xml 中的 <user-data-constraint>
部分被完全删除时,HTTP
上的网页 运行。之后,改变,
var ws = new WebSocket("ws://localhost:8181/Context/Push");
到
var ws = new WebSocket("ws://localhost:8080/Context/Push");
工作正常。
如何使 WebSockets 在安全通道上工作?
尝试 wss://
,这表明您需要安全的 websocket 连接。浏览器会阻止您从安全页面创建不安全的连接,因为它知道由于您使用 https://
请求页面,因此存在传输安全要求。
如果您有 WebSocket 服务器 运行 您的 Web 服务器,它可能会使用相同的安全证书,您无需执行任何操作。如果它不起作用,请检查您的 WebSocket 服务器文档,了解如何添加证书和启用 wss://
.
我正在使用 GlassFish Server 4.1/Java EE 7。在我的 web.xml 文件中,我提到了以下安全限制。
<security-constraint>
<display-name>UserConstraint</display-name>
<web-resource-collection>
<web-resource-name>Provide a Name</web-resource-name>
<description/>
<url-pattern>/admin_side/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>ROLE_ADMIN</role-name>
</auth-constraint>
<user-data-constraint>
<description/>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
其他机构也一样。
由于 transport-guarantee
设置为 CONFIDENTIAL
,与指定 URL 模式匹配的网页 /admin_side/*
运行 通过安全通道(HTTPS
).
同时使用 WebSockets 如下(Java脚本),
var ws = new WebSocket("ws://localhost:8181/Context/Push");
它无法建立初始握手。浏览器在浏览器控制台上显示以下警告。
[blocked] The page at 'https://localhost:8181/Context/admin_side/Category' was loaded over HTTPS, but ran insecure content from 'ws://localhost:8080/Context/Push': this content should also be loaded over HTTPS.
Uncaught SecurityError: Failed to construct 'WebSocket': An insecure WebSocket connection may not be initiated from a page loaded over HTTPS.
当 web.xml 中的 <user-data-constraint>
部分被完全删除时,HTTP
上的网页 运行。之后,改变,
var ws = new WebSocket("ws://localhost:8181/Context/Push");
到
var ws = new WebSocket("ws://localhost:8080/Context/Push");
工作正常。
如何使 WebSockets 在安全通道上工作?
尝试 wss://
,这表明您需要安全的 websocket 连接。浏览器会阻止您从安全页面创建不安全的连接,因为它知道由于您使用 https://
请求页面,因此存在传输安全要求。
如果您有 WebSocket 服务器 运行 您的 Web 服务器,它可能会使用相同的安全证书,您无需执行任何操作。如果它不起作用,请检查您的 WebSocket 服务器文档,了解如何添加证书和启用 wss://
.