有没有办法欺骗服务器,所以我不会得到这个错误:
内容被阻止,因为它没有由有效的安全证书签名。
我拉一个html网站的iframe到另一个网站,但我一直在这个问题的标题中得到控制台(chrome)错误,在ie中它说:
您的资源可能使用HTTPS协议上的自签名SSL证书。 铬,所以谷歌铬块默认认为这类资源是不安全的
你可以这样绕过这个问题:
https://www.domain.com
正如你可以猜到的,问题是你网站的每个访问者都必须执行这个任务来访问你的框架。
你可以注意到,chrome将阻止你的URL为每个导航会话,而chrome可以记住,你信任这个域。
如果你的帧可以通过HTTP访问,而不是HTTPS,我建议你使用它,这样这个问题就解决了。
net::ERR_INSECURE_RESPONSE
如果你正在开发,并且你在Windows机器上开发,只需添加localhost 受信任网站。
localhost
是的,根据DarrylGriffiths的评论,虽然看起来像是你在添加ie设置……
我认为这些是Windows而不是IE设置。尽管MS倾向于假设它们只是IE(因此在“启用保护模式”旁边的警报要求重新启动IE)…
尝试这段代码来观察并报告可能的net::ERR_INSECURE_RESPONSE
我也有这个问题,使用自签名证书,我选择不保存到Chrome设置。在访问https域并接受证书之后,ajax调用可以正常工作。但是一旦接受超时或在它第一次被接受之前,jQuery.ajax()调用就会无声地失败:timeout参数似乎没有帮助,error()函数永远不会被调用。
jQuery.ajax()
timeout
error()
因此,我的代码从未接收到success()或error()调用,因此挂起。我相信这是jquery处理此错误的错误。我的解决方案是在指定的超时后强制调用error()。
success()
这段代码确实假设了一个jQuery.ajax({url: required, success: optional, error: optional, others_ajax_params: optional})形式的jquery ajax调用。
jQuery.ajax({url: required, success: optional, error: optional, others_ajax_params: optional})
注意:你可能想要在setTimeout中更改函数以与你的UI:最好地集成,而不是调用alert()。
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。
Failed to load resource: net::ERR_INSECURE_RESPONSE
这个问题是因为你的https意味着SSL认证。试试Localhost。
打开控制台,点击里面的URL。它会把你带到API页面,然后在页面中接受SSL证书,回到你的应用页面并重新加载。 请记住,之前应该已经为您的Dev环境颁发了SSL证书。< / p >