在使用 Deno 进行前端开发时,我们经常会使用 HTTPS 请求来访问后端 API 或第三方服务。但是,有时候我们会遇到一个问题:HTTPS 请求不受信,导致请求无法正常发送和接收。这个问题在 Deno 中尤为常见,本文将介绍如何解决这个问题。
问题的原因
HTTPS 请求不受信的原因是因为 Deno 不像浏览器那样会自动信任所有的证书,它只信任被操作系统信任的根证书。如果你在开发环境中使用的是自签名的证书或不被系统信任的证书,那么就会遭遇 HTTPS 请求不受信的问题。
解决方案
解决方案分为两类:一类是针对开发环境的解决方案,一类是针对生产环境的解决方案。
解决开发环境问题
在开发环境中,为了方便和快速的开发服务,我们可以使用 --allow-net 标志来打开 Deno 对网络请求的授权,同时加上 --unsecure 标志来关闭不安全证书的验证。
----- --- - ----- ---------------------------- - ------- ------ -------- - --------------- ------------------ -- ------ --- ------------- ------------------- ----- -- ---
上述代码中,我们通过在第二个参数中指定 agent 选项,并将 rejectUnauthorized 参数设置为 false,来强制 Deno 对不安全的证书进行信任。这种方式便于开发,但并不适合生产环境。
解决生产环境问题
在生产环境中,我们应该避免使用自签名证书和不受信任的证书。相反,我们应该使用经过验证的证书。对于这种情况,我们需要在代码中设置一些额外的选项来让 Deno 信任我们所使用的证书。
首先,我们需要准备一份经过验证的证书。可以自己申请花钱购买,也可以使用 Let's Encrypt 这种免费的服务来获取证书。
其次,我们需要将证书的公钥添加到操作系统的信任列表中,以让 Deno 信任该证书。在 Linux 系统中,我们可以使用以下命令将证书添加到系统的信任列表中:
---- -- ----------------- --------------------------------- ---- ----------------------
在 Windows 系统中,可以使用以下命令:
------------ --------- ---- -----------------
最后,在代码中使用如下选项即可:
----- --- - ----- ---------------------------- - ------- ------ -------- - --------------- ------------------ -- ------ --- ------------- --- ------------------- -- ---
在上述代码中,我们使用 https.Agent 类的 ca 选项来指定证书的路径。
总结
HTTPS 请求不受信问题是 Deno 开发中一个常见的问题,但只是因为 Deno 对证书的严格验证而导致。我们可以通过一些方法来解决该问题,如在开发环境中关闭证书验证或者在生产环境中使用经过验证的证书。
对于开发人员来说,了解这些解决方案是非常有用的,可以有效地解决很多网络请求相关的问题。对于初学者来说,这也是一个很好的学习机会,可以通过实践来掌握网络请求的相关知识。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/66470665d3423812e4542d22