提问人:user3594437 提问时间:5/16/2014 最后编辑:Philip Kirkbrideuser3594437 更新时间:8/3/2017 访问量:345303
无法加载资源:net::ERR_INSECURE_RESPONSE
Failed to load resource: net::ERR_INSECURE_RESPONSE
问:
有没有办法欺骗服务器,这样我就不会收到这个错误:
内容被阻止,因为它不是由有效的安全证书签名的。
我正在将一个 html 网站的 iframe 拉到另一个网站,但我不断收到这个问题标题中的控制台(chrome)错误,并且在 Internet Explorer 中它说:
内容被阻止,因为它不是由有效的安全证书签名的。
答:
您的资源可能通过 HTTPS 协议使用自签名 SSL 证书。 Chromium,所以谷歌浏览器默认阻止这种资源被认为是不安全的。
您可以通过以下方式绕过此操作:
- 假设框架的 URL 是 ,在 chrome 中打开一个新标签页,然后转到 。
https://www.domain.com
https://www.domain.com
- Chrome 会要求您接受 SSL 证书。接受它。
- 然后,如果你用你的框架重新加载你的页面,你可以看到它现在可以工作了
您可以猜到的问题是,您网站的每个访问者都必须执行此任务才能访问您的框架。
您可以注意到,chrome 会在每次导航会话中阻止您的 URL,而 chrome 可以永远记住您信任此域。
如果你的框架可以通过HTTP而不是HTTPS访问,我建议你使用它,这样这个问题就会得到解决。
评论
https://domain.com
有时 Google Chrome 会抛出此错误,即使它不应该。 当 Chrome 有新版本时,我遇到了它,它需要重新启动。 重新启动后,同一页面工作没有任何错误。 控制台中的错误是:
net::ERR_INSECURE_RESPONSE
评论
chrome://net-internals
如果您正在开发,并且您正在使用 Windows 计算机进行开发,只需添加为受信任的站点即可。localhost
是的,根据 DarrylGriffiths 的评论,尽管看起来您正在添加 Internet Explorer 设置......
我相信这些是 Windows 而不是 IE 设置。尽管 MS 倾向于假设它们只是 IE(因此“启用保护模式”旁边的警报要求重新启动 IE)......
评论
请尝试此代码来观察并报告可能的net::ERR_INSECURE_RESPONSE
我也遇到了这个问题,使用自签名证书,我选择不将其保存到 Chrome 设置中。访问 https 域并接受证书后,ajax 调用工作正常。但是,一旦接受超时或首次接受之前,调用就会以静默方式失败:参数似乎没有帮助,并且函数永远不会被调用。jQuery.ajax()
timeout
error()
因此,我的代码从不收到 or 调用,因此挂起。我相信这是jquery处理此错误时的错误。我的解决方案是在指定的超时后强制调用。success()
error()
error()
此代码假定 jquery ajax 调用的形式为 。jQuery.ajax({url: required, success: optional, error: optional, others_ajax_params: optional})
注意:您可能希望更改 中的函数,以便与您的 UI: 进行最佳集成,而不是调用 .setTimeout
alert()
const MS_FOR_HTTPS_FAILURE = 5000;
$.orig_ajax = $.ajax;
$.ajax = function(params)
{
var complete = false;
var success = params.success;
var error = params.error;
params.success = function() {
if(!complete) {
complete = true;
if(success) success.apply(this,arguments);
}
}
params.error = function() {
if(!complete) {
complete = true;
if(error) error.apply(this,arguments);
}
}
setTimeout(function() {
if(!complete) {
complete = true;
alert("Please ensure your self-signed HTTPS certificate has been accepted. "
+ params.url);
if(params.error)
params.error( {},
"Connection failure",
"Timed out while waiting to connect to remote resource. " +
"Possibly could not authenticate HTTPS certificate." );
}
}, MS_FOR_HTTPS_FAILURE);
$.orig_ajax(params);
}
在华硕 T100 Windows 10 测试设备上,我仍然遇到了上述问题,适用于(最新的)Edge 和 Chrome 浏览器。
解决方案在设备的日期/时间设置中;不知何故,日期设置不正确(过去的日期)。通过设置正确的日期(并重新启动浏览器)来恢复它为我解决了这个问题。我希望我能省去调试这个问题的麻烦。
评论
为此错误提供另一种潜在的解决方案。
如果您的前端应用程序对后端进行 API 调用,请确保引用证书颁发到的域名。
例如:
https://example.com/api/etc
而不是
https://123.4.5.6/api/etc
就我而言,我使用证书对安全服务器进行 API 调用,但使用 IP 而不是域名。这抛出了一个.Failed to load resource: net::ERR_INSECURE_RESPONSE
此问题是因为您的https意味着SSL认证。在 localhost 上尝试。
打开控制台并点击里面的 URL。它会将您带到 API 页面,然后在页面中接受 SSL 证书,返回您的应用程序页面并重新加载。 请记住,之前应该已为您的开发环境颁发了 SSL 证书。
评论