我是jQuery / AJAX的新手。我有一个小应用程序来测试pupose,它上面有一个按钮。单击该按钮时,将连接到位于同一域中的服务器以获取某些数据并发出警报。
问题:我的应用程序无法与服务器建立任何连接。以下屏幕截图来自Google Chrome中的开发人员工具。
服务器有自己的自签名证书。如果我通过Web浏览器连接到服务器,我会收到SSL证书警告,如下所示。
如果我点击继续,然后登录到服务器,此后我的应用程序也能够从服务器中提取数据。(如果我点击我的网络应用程序上的按钮,它会提醒从服务器获取的数据。)
问题:有没有解决方法,我可以绕过此错误吗?一旦我通过网络浏览器登录服务器,为什么它可以正常工作?我的应用将在本地使用,并且不是公共应用。
jQuery代码:我有这段代码:
$('#mybutton').click(function(){
$.ajax({
type: "GET",
url: "https://192.168.150.33/Api/loc?jsonpCallback=myCallback",
dataType:"jsonp",
async: false,
beforeSend: function (request){
request.withCredentials = true;
request.setRequestHeader("Authorization", "Basic " + btoa('admin' + ":" + 'password'));
},
success: function(response){
alert('hi');
},
});
});
function myCallback(response){
data= JSON.stringify(response)
alert(data)
Here是一个解决同一问题的帖子。据我所知,根据它的帖子,没有解决方案。任何建议都会有所帮助。感谢
答案 0 :(得分:17)
您无法以编程方式绕过浏览器实施的SSL错误/警告行为,如果可能的话,它将完全使该安全层失效。
如果您在本地/在 Windows 域环境中执行此操作,只需将自签名证书添加到trusted store。
此外,证书(通常)发布到域名而不是IP地址,因此您需要在Ajax调用中执行相同的操作。
答案 1 :(得分:1)
我可以解决这个问题,将它添加到我的 ajax 调用中:
beforeSend: function (request) {
request.withCredentials = false;
}
不是推荐的做法...