当我尝试代理此http://localhost:9000/rpc
请求时,我会收到:
cannot proxy to https://example.appspot.com:80
(write EPROTO 101057795:error:140770FC:SSL routines:
SSL23_GET_SERVER_HELLO:unknown protocol:openssl\ssl\s23_clnt.c:794:)
webpack-dev-derver config:
devServer: {
contentBase: "./",
hostname: 'localhost',
port: 9000,
proxy: {
'/rpc': {
target: 'https://example.appspot.com',
secure: false,
changeOrigin: true // **Update-2 SOLVED**
}
}
}
我使用fetch:fetch('/rpc' ...
发出请求,使用Windows 10专业版来运行webpack。
没有代理:fetch('https://example.com/rpc' ...
SSL请求正常。
更新。我不得不使用SSL端口443 (参见Steffen的回答) 现在使用:https://example.appspot.com:443
但仍未使用secure: true
。控制台日志显示:
cannot proxy to https://example.appspot.com:443
(Hostname/IP doesn't match certificate's altnames: "Host: localhost.
is not in the cert's altnames: DNS:*.appspot.com, DNS:*.thinkwithgoogle.com,
DNS:*.withgoogle.com, DNS:*.withyoutube.com, DNS:appspot.com,
DNS:thinkwithgoogle.com, DNS:withgoogle.com, DNS:withyoutube.com")
使用secure: false
。控制台报告:404 (Not Found)
changeOrigin: true
更新:已解决。文档here。
答案 0 :(得分:4)
target: 'https://example.com:80',
端口80不太可能用于HTTPS。通常使用端口443
SSL23_GET_SERVER_HELLO:unknown protocol:openssl\ssl\s23_clnt.c:794:)
端口80上的服务器很可能没有用HTTPS回复,但有一些HTTP错误,因为来自客户端的消息是TLS握手的开始,而不是预期的HTTP请求。但客户端期望回复TLS握手而不是HTTP错误。这就是你得到这个错误的原因。
没有代理:抓取(' https://example.com/rpc' ... SSL请求正常。
这是因为您在这种情况下使用https://example.com
而不是https://example.com:80
。因为您没有提供明确的端口,所以它将使用https的默认端口,即443。