XHR请求随机出现ERR_SSL_PROTOCOL_ERROR,如何获取错误详情?
随机出现ERR_SSL_PROTOCOL_ERROR的排查与解决建议
我们有一个基于JSP、原生JS和Java 8运行在JBOSS服务器上的老旧Web应用,在获取资源或发起XHR POST请求时,会随机出现ERR_SSL_PROTOCOL_ERROR错误。该错误无规律,同一请求可能前一秒正常,下一秒就报错。若为证书或SSL配置问题,错误应该持续出现,但实际并非如此。
目前仅能看到ERR_SSL_PROTOCOL_ERROR错误标识,无法查看详细错误信息。应用使用了iframe,CORS策略设置为同源,这方面无问题。出现错误时,XHR请求的status为0,statusText为空,且服务器端无该请求的日志,仿佛请求被浏览器拦截。用户使用Chrome访问应用。
XHR请求核心代码
thisRequestObject.onreadystatechange = processRequest; function processRequest() { if (thisRequestObject.readyState == 4) { if (thisRequestObject.status == 200) { if (callbackFunction) callbackFunction(thisRequestObject); } else { alert("There was an error: (" + thisRequestObject.status + ") " + thisRequestObject.statusText); } } } this.sendPostData = function() { if (theURL) { thisRequestObject.open("POST", theURL, true); thisRequestObject.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); thisRequestObject.send(sendString); } };
排查方向与解决建议
- Chrome浏览器SSL缓存/会话问题:Chrome有时会出现SSL会话复用异常,可尝试在Chrome地址栏输入
chrome://net-internals/#ssl,点击「清除SSL缓存」,同时在chrome://net-internals/#sockets点击「Flush socket pools」,测试是否还出现随机错误。 - JBOSS服务器SSL配置的会话超时/复用设置:检查JBOSS的SSL连接器配置,比如
sslProtocol、sessionTimeout、enableSessionCreation等参数,老旧版本的JBOSS可能存在SSL会话复用的bug,尝试调整会话超时时间,或者禁用SSL会话复用(设置enableSessionCreation="false")测试。 - Java 8的SSL协议兼容性:Java 8默认支持的SSL协议可能与Chrome新版本存在兼容性问题,尝试在JBOSS启动参数中强制指定SSL协议版本,比如添加
-Dhttps.protocols=TLSv1.2(确保服务器端也配置支持TLSv1.2),避免协议协商过程中出现随机失败。 - 请求资源的加载时机问题:如果请求是在iframe加载过程中发起的,可能存在页面资源竞争导致的请求被中断,尝试调整XHR请求的触发时机,确保iframe完全加载后再发起请求,或者给请求添加防抖/重试逻辑。
- Chrome扩展干扰:部分Chrome扩展(比如广告拦截、安全类插件)可能会随机拦截请求,建议用户在无痕模式下访问应用,排除扩展干扰。
- 网络层不稳定:虽然错误标识是SSL协议错误,但也可能是底层网络波动导致的SSL握手中断,可尝试在服务器端开启SSL调试日志(JBOSS中调整
org.apache.tomcat.util.net.jsse.JSSESocketFactory的日志级别为DEBUG),捕捉握手过程中的异常信息。
内容的提问来源于stack exchange,提问作者elif erdil
相关产品推荐
相关产品推荐

