uni-app中vue3内置浏览器及小程序https报错net::ERR_CONNECTION_RESET,而谷歌浏览器可正常请求,原因是什么?

发布于 1周前 作者 sinazl 来自 uni-app

uni-app中vue3内置浏览器及小程序https报错net::ERR_CONNECTION_RESET,而谷歌浏览器可正常请求,原因是什么?
vue3内置浏览器以及小程序https报错:net::ERR_CONNECTION_RESET
相反运行到谷歌浏览器可以请求,这是为什么?

image image image image image


2 回复

应该是不支持 https 非 443 接口,试试标准的 443 端口


在uni-app中,遇到Vue 3内置浏览器及小程序环境下HTTPS请求报错net::ERR_CONNECTION_RESET,而谷歌浏览器中可以正常请求的情况,通常是由于几个特定的环境差异或配置问题导致的。以下是一些可能的原因及相应的代码案例,用于排查和定位问题。

1. 证书问题

小程序和某些内置浏览器对HTTPS证书的校验更为严格。如果服务器使用的是自签名证书或证书链不完整,可能会导致连接重置。

解决方案: 确保服务器使用的是由受信任的CA签发的证书,并且证书链完整。

2. 服务器配置

服务器可能配置了某些特定的HTTP头或TLS设置,这些设置在标准浏览器中可以被接受,但在小程序或内置浏览器中不被支持。

检查服务器配置

  • 确保没有设置不兼容的HTTP头。
  • 检查TLS版本和加密套件是否支持当前环境。

3. 请求超时或代理问题

内置浏览器或小程序环境下的网络请求可能由于超时设置过短或代理服务器配置不当而导致连接重置。

调整请求超时

import axios from 'axios';

const instance = axios.create({
  baseURL: 'https://your-api-endpoint.com',
  timeout: 10000, // 增加超时时间
});

instance.get('/some-endpoint')
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    if (error.code === 'ECONNABORTED') {
      console.error('Request timed out');
    } else {
      console.error('Error:', error.message);
    }
  });

4. CORS(跨源资源共享)问题

虽然这通常不会导致ERR_CONNECTION_RESET错误,但在处理跨域请求时,错误的CORS配置可能导致请求被静默阻止。

服务器CORS配置示例(Node.js Express):

const express = require('express');
const cors = require('cors');
const app = express();

app.use(cors({
  origin: 'https://your-frontend-origin.com', // 允许的前端源
  credentials: true, // 允许发送Cookie
}));

app.get('/some-endpoint', (req, res) => {
  res.json({ message: 'Hello World!' });
});

app.listen(3000, () => {
  console.log('Server running on port 3000');
});

结论

由于uni-app内置浏览器及小程序环境与标准浏览器在网络请求处理上存在差异,因此遇到HTTPS请求问题时,应重点检查证书有效性、服务器配置、请求超时设置以及CORS策略。通过逐一排查这些方面,通常可以定位并解决net::ERR_CONNECTION_RESET错误。

回到顶部