收藏
回答

小程序登录请求报 ERR_CONNECTION_RESET 错误?

【问题描述】

小程序登录请求报 ERR_CONNECTION_RESET 错误,服务器日志显示请求已到达并返回200状态码,但小程序客户端仍然报错。


【环境信息】

- 小程序AppID:wx78879edfd566e8a7

- 小程序版本:体验版/正式版

- 基础库版本:3.x.x

- 服务器域名:https://api.zdvxsryedhtgvnmvbhgdrtysrydr.icu

- 服务器环境:Linux + Nginx + PHP 8.2


【服务器端配置】

- SSL证书:Let's Encrypt R13,证书链完整(已验证)

- 域名:api.zdvxsryedhtgvnmvbhgdrtysrydr.icu

- 服务器防火墙:443端口已开放

- Nginx配置:已正确配置超时和缓冲区

- API接口:curl测试完全正常,手机浏览器可以正常访问


【小程序配置】

- 域名已在小程序后台配置:https://api.zdvxsryedhtgvnmvbhgdrtysrydr.icu

- 格式完全正确,无多余字符


【测试结果】

1. ✅ curl命令可以正常访问API接口

2. ✅ 手机浏览器可以正常访问API接口(返回200)

3. ✅ 服务器日志显示请求已到达并返回200状态码

   - POST /api/auth/login HTTP/2.0" 200

   - OPTIONS /api/auth/login HTTP/2.0" 204

   - User-Agent包含 MicroMessenger/8.0.0

4. ✅ openssl s_client验证:SSL握手成功,证书链完整,TLS 1.3

5. ❌ 小程序报错:request:fail errcode:-101 cronet_error_code:-101 error_msg:net::ERR_CONNECTION_RESET



【问题分析】

所有服务器端配置都正确,服务器日志显示请求已到达并返回200状态码,

但小程序的请求在客户端被重置了。这很可能是微信客户端网络层面的问题。


【已尝试的解决方案】

1. ✅ 检查SSL证书链完整性

2. ✅ 检查Nginx配置(超时、缓冲区)

3. ✅ 检查CORS响应头

4. ✅ 检查域名配置

5. ✅ 清除小程序缓存

6. ✅ 检查基础库版本

7. ✅ 检查手机网络环境


【期望结果】

希望微信技术支持能够帮助排查为什么服务器返回200但小程序客户端仍然报ERR_CONNECTION_RESET错误。

回答关注问题邀请回答
收藏

5 个回答

  • 神经蛙
    神经蛙
    星期一 17:19

    看看中间挂代理了吗

    星期一 17:19
    有用 1
    回复
  • sun
    sun
    11小时前

    都散了吧,域名没备案被拦截了,不用查这查那的。

    11小时前
    有用
    回复
  • vG-qre
    vG-qre
    星期二 13:54

    【1. SSL/TLS握手检查】

    在服务器上使用openssl测试:

    - ✅ SSL握手成功:`CONNECTED(00000003)`

    - ✅ 验证成功:`Verification: OK`

    - ✅ 验证返回码:`Verify return code: 0 (ok)`

    - ✅ 证书链完整:包含3个证书(ISRG Root X1、R13、服务器证书)

    - ✅ TLS版本:TLSv1.3

    - ✅ 加密套件:TLS_AES_256_GCM_SHA384

    - ✅ **服务器端SSL配置完全正常**



    【2. 请求头验证检查】

    测试不同的请求头组合:

    - 测试1(只带Content-Type):失败(连接重置)

    - 测试2(带Content-Type和Referer):失败(连接重置)

    - 测试3(带完整请求头):失败(连接重置)



    **结论**:无论是否带请求头,curl测试都失败,问题不在请求头验证。



    【4. 网络层面检查】

    服务器防火墙:

    - ✅ 防火墙已启用

    - ✅ 443端口(HTTPS)已放行,允许所有IP入站

    - ✅ 80端口(HTTP)已放行,允许所有IP入站

    - ✅ 所有端口规则都是"放行"状态,没有拦截规则

    - ✅ 防火墙配置正常,应该不是导致连接重置的原因



    Nginx配置:

    - ✅ SSL证书路径:/www/server/panel/vhost/letsencrypt/api.zdvxsryedhtgvnmvbhgdrtysrydr.icu/fullchain.pem

    - ✅ TLS版本:TLSv1.2 TLSv1.3

    - ✅ Nginx配置正常



    CDN/WAF检查:

    - CDN配置:❌ 没有CDN配置

    - 系统防火墙:✅ 已开启,所有端口规则都是"放行"状态,没有拦截规则

    - PHP网站安全:✅ 已开启(监控功能),这是监控功能,不是拦截功能

    - nginx防火墙:❌ 没有安装nginx防火墙(在「安全」菜单下没有「nginx防火墙」选项)

    - WAF配置:❌ 没有WAF配置(在「安全」菜单下没有「WAF」选项)



    【5. 服务器日志确认】

    响应日志中:

    - ✅ 有微信开发者工具的请求记录(返回200)

    - ❌ 没有curl请求的记录



    【关键发现总结】

    1. ✅ 服务器端SSL配置完全正常(openssl测试成功)

    2. ✅ 微信开发者工具的请求可以正常到达服务器(返回200)

    3. ❌ 但curl和小程序的请求无法正常到达服务器(连接重置)

    4. ❌ 响应日志中没有curl请求的记录,说明请求在到达Nginx之前就被重置了

    5. ❌ 无论是否带请求头,curl测试都失败


    【问题分析】

    问题可能是客户端或网络层面的问题,希望微信技术支持能够进一步帮助排查。

    星期二 13:54
    有用
    回复
  • 一笑皆春
    一笑皆春
    星期一 17:26

    看着还是服务端的问题,再仔细检查下吧,看下接口是否通了

    星期一 17:26
    有用
    回复
  • 智能回答 智能回答 本次回答由AI生成
    星期一 17:01
    有用
    回复 3
    • vG-qre
      vG-qre
      星期二 10:36
      【1. 完整的报错信息(包括rid)】
      从真机调试Console获取:curl "https://api.zdvxsryedhtgvnmvbhgdrtysrydr.icu/api/auth/login" ^
        -H "Referer: https://servicewechat.com/wx78879edfd566e8a7/0/page-frame.html" ^
        -H "content-type: application/json" ^
        -H "User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.66(0x1800422c) NetType/4G Language/zh_CN" ^
        --data-binary "^{^\^"phone^\^":^\^"19877124635^\^",^\^"password^\^":^\^"123456^\^"^}" ^
        --compressed


      【2. 网络抓包数据】
      从真机调试Network标签复制的cURL命令:
      curl "https://api.zdvxsryedhtgvnmvbhgdrtysrydr.icu/api/auth/login" \
        -H "Referer: https://servicewechat.com/wx78879edfd566e8a7/0/page-frame.html" \
        -H "content-type: application/json" \
        -H "User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.66(0x1800422c) NetType/4G Language/zh_CN" \
        --data-binary "{\"phone\":\"19877124635\",\"password\":\"123456\"}" \
        --compressed       curl命令测试结果
      所有curl测试都失败,都返回连接重置错误:


      测试1:带完整请求头的POST请求md
      curl "https://api.zdvxsryedhtgvnmvbhgdrtysrydr.icu/api/auth/login" -H "Referer: https://servicewechat.com/wx78879edfd566e8a7/0/page-frame.html" -H "content-type: application/json" -H "User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.66(0x1800422c) NetType/4G Language/zh_CN" --data-binary "{\"phone\":\"19877124635\",\"password\":\"123456\"}" --compressed执行结果:`curl: (35) Recv failure: Connection was reset`


      测试2:GET请求(健康检查)
      curl "https://api.zdvxsryedhtgvnmvbhgdrtysrydr.icu/api/health"执行结果:`curl: (35) Recv failure: Connection was reset`


      测试3:不带请求头的POST请求
      curl "https://api.zdvxsryedhtgvnmvbhgdrtysrydr.icu/api/auth/login" -X POST -H "Content-Type: application/json" -d "{\"phone\":\"19877124635\",\"password\":\"123456\"}"执行结果:`curl: (35) Recv failure: Connection was reset`


      【4. 服务器日志信息(重要发现)】
      Nginx错误日志:
      - 错误日志中有记录,但都是其他错误(目录索引被禁止、文件不存在等)
      - **没有** `/api/auth/login` 的错误记录
      - **没有** `/api/health` 的错误记录
      - **没有** SSL/TLS握手失败的错误记录
      - **没有** 连接重置的错误记录


      Nginx访问日志(响应日志):
      - ✅ **找到了** `/api/auth/login` 的请求记录:
        - 请求时间:`[16/Dec/2025:09:32:00 +0800]`
        - 请求方法:`POST`
        - HTTP版本:`HTTP/2.0`
        - 状态码:`200`(成功)
        - 响应大小:`273` 字节
        - Referer:`https://servicewechat.com/wx78879edfd566e8a7/devtools/page-frame.html`(微信开发者工具)
        - User-Agent:包含 `wechatdevtools`(微信开发者工具)
      - ❌ **没有**找到curl请求的记录(说明curl请求没有到达服务器)


      【5. 可复现的代码片段】
      wx.request({
        url: 'https://api.zdvxsryedhtgvnmvbhgdrtysrydr.icu/api/auth/login',
        method: 'POST',
        header: {
          'Content-Type': 'application/json'
        },
        data: {
          phone: '19877124635',
          password: '123456'
        },
        success: (res) => {
          console.log('登录成功:', res);
        },
        fail: (err) => {
          console.error('登录失败:', err);
        }
      })【6. TLS加密套件检查】
      - 服务器支持TLS 1.2和1.3
      - 加密套件配置:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5
      - openssl验证:SSL握手成功,证书链完整(之前测试)


      【7. 小程序基础库版本】
      - 当前版本:3.12.0(灰度中)
      - 是否为最新稳定版:需要确认


      【8. 不同网络环境测试】
      - WiFi网络:失败(ERR_CONNECTION_RESET)
      - 4G网络:失败(ERR_CONNECTION_RESET)
      - 5G网络:失败(ERR_CONNECTION_RESET)


      【9. 重要补充信息】
      - ✅ 微信开发者工具中(模拟器)登录成功(使用IP地址)
      - ✅ 微信开发者工具的请求可以正常到达服务器(返回200,响应日志中有记录)
      - ❌ 真机调试模式下登录失败(使用域名,ERR_CONNECTION_RESET)
      - ❌ 手机上(体验版/正式版)登录失败(使用域名,ERR_CONNECTION_RESET)
      - ❌ curl命令也遇到连接重置(Connection was reset)
      - ❌ 所有curl测试都失败(GET、POST、带请求头、不带请求头)
      - ✅ 服务器日志显示请求已到达并返回200状态码(微信开发者工具的请求)
      - ✅ 手机浏览器可以正常访问(之前测试)


      【问题分析】
      这进一步证实了问题可能是:
      1. **微信开发者工具的请求可以正常到达服务器**
         - 使用HTTP/2.0
         - 来自微信开发者工具环境
         - 服务器返回200状态码(成功)
         - 响应大小为273字节(有响应内容)


      2. **curl和小程序的请求无法正常到达服务器**
         - curl测试失败(连接重置)
         - 小程序真机调试失败(ERR_CONNECTION_RESET)
         - 响应日志中没有curl请求的记录
         - 错误日志中也没有相关错误记录
         - 可能是SSL/TLS握手问题(在到达Nginx之前)
         - 可能是请求头或User-Agent验证问题
         - 可能是网络层面的问题(防火墙、代理服务器)


      3. **可能的原因**:
         - SSL/TLS握手失败(curl和小程序无法完成SSL握手,但微信开发者工具可以)
         - 请求头验证问题(服务器可能验证某些请求头)
         - User-Agent验证问题(服务器可能验证User-Agent)
         - 网络层面的问题(防火墙、代理服务器)


      【建议】
      希望微信技术支持能够帮助排查为什么:
      - 微信开发者工具的请求可以正常到达服务器(返回200)
      - 但curl和小程序的请求无法正常到达服务器(连接重置)
      - 响应日志中没有curl请求的记录,说明请求在到达Nginx之前就被重置了
      - 这很可能是SSL/TLS握手或网络层面的问题


      希望这些信息能帮助定位问题。
      星期二 10:36
      回复
    • 智能回答 智能回答 本次回答由AI生成
      星期二 10:38回复vG-qre
    • vG-qre
      vG-qre
      星期二 13:10
      【1. SSL/TLS握手检查】
      在服务器上使用openssl测试:
      - ✅ SSL握手成功:`CONNECTED(00000003)`
      - ✅ 验证成功:`Verification: OK`
      - ✅ 验证返回码:`Verify return code: 0 (ok)`
      - ✅ 证书链完整:包含3个证书(ISRG Root X1、R13、服务器证书)
      - ✅ TLS版本:TLSv1.3
      - ✅ 加密套件:TLS_AES_256_GCM_SHA384
      - ✅ **服务器端SSL配置完全正常**


      【2. 请求头验证检查】
      测试不同的请求头组合:
      - 测试1(只带Content-Type):失败(连接重置)
      - 测试2(带Content-Type和Referer):失败(连接重置)
      - 测试3(带完整请求头):失败(连接重置)


      **结论**:无论是否带请求头,curl测试都失败,问题不在请求头验证。


      【4. 网络层面检查】
      服务器防火墙:
      - ✅ 防火墙已启用
      - ✅ 443端口(HTTPS)已放行,允许所有IP入站
      - ✅ 80端口(HTTP)已放行,允许所有IP入站
      - ✅ 所有端口规则都是"放行"状态,没有拦截规则
      - ✅ 防火墙配置正常,应该不是导致连接重置的原因


      Nginx配置:
      - ✅ SSL证书路径:/www/server/panel/vhost/letsencrypt/api.zdvxsryedhtgvnmvbhgdrtysrydr.icu/fullchain.pem
      - ✅ TLS版本:TLSv1.2 TLSv1.3
      - ✅ Nginx配置正常


      CDN/WAF检查:
      - CDN配置:❌ 没有CDN配置
      - 系统防火墙:✅ 已开启,所有端口规则都是"放行"状态,没有拦截规则
      - PHP网站安全:✅ 已开启(监控功能),这是监控功能,不是拦截功能
      - nginx防火墙:❌ 没有安装nginx防火墙(在「安全」菜单下没有「nginx防火墙」选项)
      - WAF配置:❌ 没有WAF配置(在「安全」菜单下没有「WAF」选项)


      【5. 服务器日志确认】
      响应日志中:
      - ✅ 有微信开发者工具的请求记录(返回200)
      - ❌ 没有curl请求的记录


      【关键发现总结】
      1. ✅ 服务器端SSL配置完全正常(openssl测试成功)
      2. ✅ 微信开发者工具的请求可以正常到达服务器(返回200)
      3. ❌ 但curl和小程序的请求无法正常到达服务器(连接重置)
      4. ❌ 响应日志中没有curl请求的记录,说明请求在到达Nginx之前就被重置了
      5. ❌ 无论是否带请求头,curl测试都失败


      【问题分析】
      问题可能是客户端或网络层面的问题,希望微信技术支持能够进一步帮助排查。
      星期二 13:10
      回复
登录 后发表内容