加载资源失败:net::ERR_INSECURE_RESPONSE
Posted
技术标签:
【中文标题】加载资源失败:net::ERR_INSECURE_RESPONSE【英文标题】:Failed to load resource: net::ERR_INSECURE_RESPONSE 【发布时间】:2014-07-04 12:14:49 【问题描述】:有没有办法欺骗服务器,所以我不会收到此错误:
内容被阻止,因为它没有由有效的安全证书签名。
我正在将一个 html 网站的 iframe 拉入另一个网站,但我在这个问题的标题中不断收到控制台 (chrome) 错误,并且在 Internet Explorer 中显示:
内容被阻止,因为它没有由有效的安全证书签名。
【问题讨论】:
听起来您正试图从安全资源中访问不安全的资源。我相信他们也有类似的问题here。 【参考方案1】:您的资源可能使用通过 HTTPS 协议的自签名 SSL 证书。 Chromium,因此谷歌浏览器默认阻止这种被认为不安全的资源。
你可以这样绕过:
假设您的框架的 URL 是https://www.domain.com
,请在 chrome 中打开一个新选项卡并转到 https://www.domain.com
。
Chrome 会要求您接受 SSL 证书。接受它。
然后,如果您使用框架重新加载页面,您会看到它现在可以工作了
您可以猜到的问题是,您网站的每个访问者都必须执行此任务才能访问您的框架。
您会注意到,chrome 会在每个导航会话中阻止您的 URL,而 chrome 可以永远记住您信任此域。
如果你的框架可以通过HTTP而不是HTTPS访问,我建议你使用它,这样就可以解决这个问题了。
【讨论】:
我认为当您打开另一个选项卡时,您需要转到https://domain.com
并接受 SSL 证书。
@RémiBecheras,有没有办法让 Chrome 记住在多个导航会话中信任证书?
为了添加这样的规则,您必须获得证书。如果它是你的,你已经拥有了。如果没有,请单击地址栏上的 https 左侧图标 > 证书信息 > 详细信息 > 导出。然后,使用这个文件
这也适用于奇怪的情况,即网站向同一个域(本身)发送请求,我刚刚批准继续通过自签名证书,但随后 Chrome 抛出此错误。
有没有办法通过客户端代码进行这种绕过?意思是,我可以在客户端中编程“嘿,您尝试访问的这个服务器看起来很粗略,但没关系,相信我。我写给你们两个,从技术上讲,你们是代码兄弟/姐妹/性别中立的兄弟姐妹”?【参考方案2】:
有时谷歌浏览器会抛出这个错误,即使它不应该。 我在 Chrome 有新版本时遇到过,需要重新启动。 重新启动同一页面后,没有任何错误。 控制台中的错误是:
net::ERR_INSECURE_RESPONSE
【讨论】:
确认,重新启动 Chrome(并杀死所有后台 Chrome 进程)为我修复了它。 不起作用..它是一个自签名证书..重新启动它不会起作用 也和我确认了! @Balazs,重启浏览器是唯一的方法吗?假设我们无法重启,有没有办法通过chrome://net-internals
来做到这一点?
Chrome 的重启(没有后台进程)也为我修复了它。谢谢!【参考方案3】:
我在华硕 T100 Windows 10 测试设备上仍然遇到了上述问题(最新的)Edge 和 Chrome 浏览器。
解决方案在设备的日期/时间设置中;不知何故,日期设置不正确(过去的日期)。通过设置正确的日期(并重新启动浏览器)来恢复它为我解决了这个问题。我希望我可以省去调试这个问题的麻烦。
【讨论】:
我在运行 Windows 8 的华硕 zenbook 上遇到了类似的错误。不幸的是,这对我不起作用,但您能更详细地解释一下您是如何重置日期/时间的吗?只需通过windows ui设置时区? @DEls,我在 Windows 配置中切换了时区 - 为我重置了系统时钟。之后你重启浏览器了吗?如果计时没有解决问题,您可能需要查看本主题中描述的其他解决方案。 我不知道为什么,但这对我有用。年份设置为 2048 年,将其更改为当前年份并全部固定。谢谢@SebastiaanOrdelman【参考方案4】:打开您的控制台并点击里面的 URL。它会带您进入 API 页面,然后在页面中接受 SSL 证书,返回您的应用页面并重新加载。 请记住,之前应该已经为您的开发环境颁发了 SSL 证书。
【讨论】:
【参考方案5】:为此错误提供另一种可能的解决方案。
如果您有一个对后端进行 API 调用的前端应用程序,请确保您引用了已颁发证书的域名。
例如
https://example.com/api/etc
而不是
https://123.4.5.6/api/etc
在我的例子中,我使用证书对安全服务器进行 API 调用,但使用的是 IP 而不是域名。这抛出了Failed to load resource: net::ERR_INSECURE_RESPONSE
。
【讨论】:
【参考方案6】:如果您正在开发,并且您正在使用 Windows 机器进行开发,只需添加 localhost
as a Trusted Site。
是的,根据 DarrylGriffiths 的评论,虽然看起来您正在添加 Internet Explorer 设置...
我相信这些是 Windows 而不是 IE 设置。虽然 MS 倾向于假设它们只是 IE(因此“启用保护模式”旁边的警报要求重新启动 IE)...
【讨论】:
我用的是linux ubuntu,不是windows,有什么解决办法吗?【参考方案7】:尝试此代码以观察并报告可能的net::ERR_INSECURE_RESPONSE
我也遇到了这个问题,使用的是自签名证书,我选择不将其保存到 Chrome 设置中。访问 https 域并接受证书后,ajax 调用工作正常。但是一旦接受超时或在首次接受之前,jQuery.ajax()
调用就会静默失败:timeout
参数似乎没有帮助,error()
函数永远不会被调用。
因此,我的代码从未收到 success()
或 error()
调用,因此挂起。我相信这是 jquery 处理这个错误的一个错误。我的解决方案是在指定超时后强制调用error()
。
此代码确实假定了 jQuery.ajax(url: required, success: optional, error: optional, others_ajax_params: optional)
形式的 jquery ajax 调用。
注意:您可能希望更改 setTimeout
中的函数以最好地与您的 UI 集成:而不是调用 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);
【讨论】:
【参考方案8】:这个问题是因为你的 https 意味着 SSL 认证。尝试本地主机。
【讨论】:
以上是关于加载资源失败:net::ERR_INSECURE_RESPONSE的主要内容,如果未能解决你的问题,请参考以下文章