我有一个curl调用,看起来像这样:
curl \
-v \
-X POST \
-k \
-H 'Content-Type: application/json' \
-d '{
"mydata": "XXXXX"
}' \
"https://localhost:11000/myEndpoint"
字符串
它工作了。我得到了一个200的响应。但是当我删除-k
标志时,它失败了,并出现以下错误:
curl:(60)SSL证书问题:自签名证书
所以我知道-k
标志是必需的。
现在我尝试将这个curl转换为JavaScript/React。但是当我在React中这样做时,它失败了:
const response = await fetch(
'https://localhost:11000/myEndpoint',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ mydata: 'XXXXX' })
},
)
型
下面是浏览器控制台中的错误:
POST https://localhost:11000/myEndpointnet::ERR_CERT_错误_无效
我相信这个错误是因为JavaScript/React没有做相当于-k
的事情。我如何让它模仿Curl的-k
行为?
2条答案
按热度按时间xdnvmnnf1#
没有办法让
fetch()
(或XHR或任何其他)调用直接执行-k
(也称为**--insecure
**)所做的事情。您需要告诉您的浏览器信任该自签名证书。
一般来说,你可以通过导航到https://localhost:11000/并接受可能出现的“是的,我知道我在做什么,我知道这是不安全的”提示来为单个会话做到这一点。
对于更持久的解决方案,您可以在网络上搜索,例如“信任自签名证书您的浏览器在这里”.
csbfibhn2#
AKX的React是正确的。有一个类似的问题,我相信所描述的方式是有效的Chrome。对于火狐你必须trust the certificate through the browser。
也就是说,你基本上可以使用axios而不是fetch和pass作为选项:
字符串
但是,如果你使用的是webpack > 5,这将不起作用(将在控制台中打印为错误)。要使其在dev环境中工作,你应该执行以下操作:
型
关于为什么在prod中应该始终避免这种方法的原因(有时可能在dev中也是如此),请在这里查看第一个答案:How to configure axios to use SSL certificate?