使用jQuery .ajax发起GET请求遇net::ERR_ABORTED及SSL证书信任问题求助
解决你的jQuery AJAX请求错误:NET::ERR_ABORTED和SSL证书信任警告
看来你遇到了两个关联的问题——SSL证书信任警告和请求中止错误,我来一步步帮你排查解决:
一、先处理SSL证书信任警告(这很可能是请求中止的根源)
浏览器提示“M70版本后将不信任该证书”,说明你的目标服务器使用的SSL证书不符合现代浏览器的信任标准,具体原因和解决办法如下:
- 检查证书有效性与颁发机构:
- 如果是生产环境:确保证书由公共可信的CA(比如Let's Encrypt、DigiCert等)颁发,且未过期、域名完全匹配。自签名证书或私有CA颁发的证书在Chrome M70+会被默认拒绝,必须替换为公共CA证书。
- 如果是测试环境:可以手动在浏览器中添加证书信任(Chrome中访问目标URL,点击地址栏的锁图标 → 证书 → 详细信息 → 复制到文件,然后在系统证书管理器中导入并设置为信任),但注意这只适合测试场景,绝对不能用于生产环境。
- 验证证书链完整性:
有时候证书本身没问题,但缺失中间证书,导致浏览器无法完成信任链验证。你可以通过浏览器的证书详情查看:点击地址栏锁图标 → 查看证书 → 证书路径,检查是否有“无法验证”的提示。如果有,需要在服务器上配置完整的证书链(将中间证书和主证书合并后部署)。
二、解决NET::ERR_ABORTED请求中止错误
这个错误通常是SSL问题导致的,但也可能和你的AJAX配置有关,结合你的代码来看,有几个关键问题需要修正:
1. JSONP不支持自定义请求头,你的beforeSend配置无效!
JSONP的原理是动态创建<script>标签加载资源,根本不使用XMLHttpRequest对象,所以beforeSend里设置X-SOMETHING-Key头的操作完全无效。如果目标API必须要这个自定义头,你不能用JSONP,必须改用CORS跨域方案。
2. 调整AJAX配置(改用CORS)
如果目标服务器支持CORS,修改代码如下(注意dataType改为json,并使用headers配置自定义头):
<script> $(document).ready(function(){ $.ajax({ url:'你的实际API地址', type: 'GET', dataType: 'json', // 替换jsonp为json,依赖服务器CORS配置 processData: true, crossDomain: true, headers: { 'X-SOMETHING-Key': '你的密钥' }, success: function(data){ console.log(data); }, error: function(xhr, status, error){ // 添加错误日志,方便排查 console.error('请求失败:', status, error); console.error('响应状态:', xhr.status); console.error('响应内容:', xhr.responseText); } }); }); </script>
3. 确认服务器CORS配置
如果改用CORS,服务器必须配置以下响应头:
Access-Control-Allow-Origin: 设置为你的前端域名(或*,但生产环境不建议用*,存在安全风险)Access-Control-Allow-Headers: 必须包含X-SOMETHING-Key,否则浏览器会阻止带自定义头的请求
4. 用Network面板排查细节
打开浏览器开发者工具的Network面板,查看这个GET请求的详细信息:
- 检查请求是否真的发送出去,还是在浏览器层面被拦截
- 查看响应状态码、响应头,是否有CORS相关的错误提示
- 确认请求头中是否正确携带了
X-SOMETHING-Key
总结解决步骤
- 先修复SSL证书信任问题,确保浏览器能正常信任目标服务器的证书
- 确认目标API是否支持CORS,若需要自定义头则放弃JSONP,改用CORS方案
- 修正AJAX配置中的无效部分,添加错误回调方便排查
- 用Network面板验证请求的发送和响应细节
内容的提问来源于stack exchange,提问作者Wojciech Jakubek




