在使用Netty 4构建WebSocket服务器时,如果身份验证失败,需要正确地向浏览器发送401 (Unauthorized) 响应。 直接关闭连接可能导致浏览器无法识别错误原因。以下改进后的代码确保浏览器能够接收并处理401响应:
问题:在WebSocket握手阶段,如果身份验证失败,服务器直接关闭连接,浏览器无法接收到预期的401响应。
解决方案:在关闭连接前,必须确保401响应已完全发送到客户端。
改进后的代码:
private void httpResponse401(ChannelHandlerContext ctx, FullHttpRequest request) { FullHttpResponse response = new DefaultFullHttpResponse( request.protocolVersion(), HttpResponseStatus.UNAUTHORIZED); response.headers().set(HttpHeaderNames.CONTENT_LENGTH, 0); ctx.writeAndFlush(response).addListener(future -> { if (future.isSuccess()) { // 响应成功发送后关闭连接 ctx.close(); } else { // 响应发送失败,也关闭连接 ctx.close(); // 可选:记录错误日志 logger.error("Failed to send 401 response: {}", future.cause()); } }); ReferenceCountUtil.release(request); }
关键改进:
通过此改进,浏览器将接收401响应,并能够根据该状态码进行相应的处理,例如显示错误信息或重定向到登录页面。 记住添加必要的日志记录,以便在出现问题时能够快速诊断。
以上就是在Netty4 WebSocket服务器中,如何确保浏览器正确接收到401响应?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号