【发布时间】:2019-07-24 16:54:42
【问题描述】:
我正在尝试从 vue Web 应用程序向 ESP32 https 服务器发出 POST 请求。 由于自签名证书,该请求始终被 CORS 阻止。
- ESP32 以 AP 模式启动,生成自己的 Wifi 网络。
- 带有我生成的 SSL 证书的 https 服务器开始运行(使用此库:https://github.com/fhessel/esp32_https_server)
- 在本地运行 VUE 应用程序的 PC 中,我向 ESP32 服务器发出 POST 请求(参见下面的代码) (我正在使用 axios 发出请求)
我试过了:
- 使用
rejectUnauthorized:添加自定义 https 代理 - 在 ESP32 服务器使用的 POST 请求中添加相同的证书
- 添加 CORS 标头
- 添加
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" - 在 https 模式下使用 ESP32 相同的证书启动 vue 开发服务器
- 尝试在 ESP32 服务器中获取 OPTIONS 请求以允许 POST 请求
使用 curl 或 postman 发出请求可以正常工作!这就像浏览器或 vue 的问题。
const httpsAgent = new https.Agent({
rejectUnauthorized: false,
});
axios.post(`https://192.168.4.1/config?ssid=${this.ssid}&ssidkey=${this.password}`, { httpsAgent })
.then((res) => {
...
});
目标是首先在 AP 模式下通过直接连接到 ESP32 来配置我的 WiFi 凭据。 如果我使用 curl 或 Postman 来使请求正常工作,ESP32 会接收 WiFi 凭据并连接到我的路由器,但我无法使用 vue Web 应用程序进行相同的操作...
【问题讨论】:
-
对我来说这听起来像是一个 CORS 问题。 CORS 由浏览器强制执行,因此 curl 和 Postman 不会受到影响。你遇到了什么错误?
-
完全是的.. 它被 CORS 阻止了。在 ESP32 端:
19179719 HTTPSServer->debug: [-->] New connection. Socket fid is: 0x3C 19180629 HTTPSServer->debug: [ERR] SSL_accept failed. Aborting handshake. 19180630 HTTPSServer->debug: [<--] Connection has been closed. fid = 0x3C 19180631 HTTPSServer->debug: [ ] Free headers -
在 firefox 上:(从西班牙语翻译)交叉请求被阻止,相同的策略不允许在 192.168.4.1 上读取远程资源 ... [错误:网络错误]
-
添加 CORS 标头或
rejectUnauthorized: false应该解决这个问题...但没有任何效果
标签: javascript node.js ssl vue.js esp32