在Chrome中访问本地API时出现错误 net::ERR_INSECURE_RESPONSE。

3

我试图使用angular $resourses访问在本地主机上运行的api,但chrome控制台显示错误ERR_INSECURE_RESPONSE。

我尝试在chrome中禁用Web安全性,但仍然出现同样的错误。以下是我使用的angular工厂。如何绕过此错误并测试我的应用程序。

    ImpactPortal.factory('apiFactory', function ($resource) {
    return $resource('https://localhost:8443/mifosng-provider/api/v1/client_impact_portal', {}, {
        query: {
            method: 'GET',
            params: {},
            isArray: true
        }
    })
});

你想要接收什么样的响应? - haimlit
您是否使用由CA签署的有效SSL证书? - Rob W
你需要在你的Web服务器上为你的项目URL实现SSL证书。 - Ashwin Parmar
您可以尝试使用 ://localhost:8443/mifosng-provider/api/v1/client_impact_portal - Ashwin Parmar
4个回答

6

在Angular.js中启用CORS

var myApp = angular.module('myApp', [
    'myAppApiService']);

myApp.config(['$httpProvider', function($httpProvider) {
        $httpProvider.defaults.useXDomain = true;
        delete $httpProvider.defaults.headers.common['X-Requested-With'];
    }
]);

支持CORS的服务器必须使用多个访问控制头来响应请求:

Access-Control-Allow-Origin: "*"

默认情况下,CORS请求不会使用cookie。如果服务器包含此标头,则可以通过将withCredentials选项设置为true,随请求发送cookie。

Access-Control-Allow-Credentials (optional)

如果我们在请求中将withCredentials选项设置为true,但服务器未响应此标头,则请求将失败,反之亦然。

2

仅尝试此方法:

进入https://[your-domain].com,然后Chrome会阻止您,并显示以下页面:

您的连接不是私密连接

因此,向下滚动到高级,然后选择继续前往(不安全)

您的证书可能是自签名的。

请记住,在每个Chrome会话中都要执行此操作。


1

首先,您需要进行身份验证,然后在每个请求中发送身份验证令牌。

我正在使用RestAngular,因此我的设置可能与您的略有不同。

这将放置在您的应用程序配置中:

RestangularProvider.setDefaultHeaders({ 'X-Mifos-Platform-TenantId': 'default' });

类似这样的内容将会放在您的控制器/服务中

var login = Restangular.all('authentication?username=mifos&password=password').post().then(function(user) {
   console.log(user);
 }, function() {
  console.log("There was an error saving");
 });

不要像那样在每个请求中传递用户名和密码,使用JWT或其他方式。 - chesscov77

-2

错误501(net :: ERR_INSECURE_RESPONSE)- 501未实现

服务器无法识别请求方法或缺乏满足请求的能力。通常这意味着将来可用性(例如,Web服务API的新功能)。

您能确认curl请求是否正常工作吗?

curl -k --user damien@email.com:password https://localhost:8443/mifosng-provider/api/v1/client_impact_portal

如果它正常运作:
ImpactPortal.factory('apiFactory', function ($resource) {
    return $resource('https://localhost:8443/mifosng-provider/api/v1/client_impact_portal', {}, {
        query: {
            method: 'JSONP',
            params: {},
            isArray: true
        }
    })
});

尝试按照这个教程来使用外部API:http://www.toptal.com/angular-js/a-step-by-step-guide-to-your-first-angularjs-app


感谢您详细的回复。但我的问题是仅在使用本地主机API时出现。它可以正常工作,只要使用教程中提到的URL。Firefox会显示一个错误,指出“跨域请求被阻止:这可以通过将资源移动到相同的域或启用CORS来解决。” - Channa
CORS在浏览器端被阻止,不允许AJAX从另一个域请求数据。您可以像这样添加crossdomain.xml:https://dev59.com/vWIj5IYBdhLWcg3wRTL3或https://dev59.com/DnVC5IYBdhLWcg3wsTVi或者AJAX跨域的解决方法是JSONP:https://dev59.com/F3A75IYBdhLWcg3wB0ZP,但API应支持此类请求。 - v2solutions.com

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接