Ajax Angular SSL CORS

Ajax Angular SSL CORS

本文关键字:CORS SSL Angular Ajax      更新时间:2023-09-26

我其实不明白这个问题。我对SSL和证书不是很感兴趣。

test.kanubox.de上的一个脚本(您可以在那里尝试并查看源代码)使用ajax调用sandbox.api.kehrwasser.com/kanubox/v1上的rest服务器。显然,CORS是必需的,并且在没有SSL的情况下也能很好地工作,因此我假设CORS设置正确。向API发出的OPTIONS-request (preflight)的报头数据确认

Access-Control-Allow-Origin: *
Upgrade: h2,h2c
Pragma: no-cache
Keep-Alive: timeout=5, max=100
Content-Type: application/json
Content-Encoding: gzip
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE, PUT
Server: Apache/2.4
Expires: Fri, 19 Aug 2016 12:15:58 GMT
Access-Control-Max-Age: 500
Access-Control-Allow-Headers: x-requested-with, Content-Type, origin, authorization, accept, client-security-token, Access-Control-Allow-Origin, X-Frame-Options

但是当我切换到https://test.kanubox.de并在https://sandbox.api.kehrwasser.com/kanubox/v1调用API时,我从FireFox获得CORS错误,如"(Cross-Origin blocked)

"。
Reason: CORS-Header 'Access-Control-Allow-Origin' missing

(翻译错误信息)

该证书来自我的主机,并由我的主机自己验证。我不确定,但它是"自签名"吗?所以FF屏蔽它可能是因为它不信任它?

下面是我的代码:
  var test = angular.module("test", []);
  test.constant('apiConfig', {
      apiUrl: "https://sandbox.api.kehrwasser.com/kanubox/v1"
  });
  test.controller("TestController", function($scope, $http, apiConfig) {
      var credentials = { mail: "user@mailserver.com", password: "12345" };
      // POST REQUEST VIA SSL
      $http({
          url: apiConfig.apiUrl + "/users/auth/",
          method: 'POST',
          data: credentials
      }).success(function(data, status, headers, config) {
          $scope.variable = data;
      }).error(function(data, status, headers, config) {
          $scope.variable = data;
      });
  });

如果我浏览到https://test.kanubox.de/,那么在我的firefox浏览器中不知道服务器证书。它确实是一个自签名证书,由"Hostpoint DV SSL CA - G2"本身颁发!

要使SSL证书工作,您需要在浏览器中安装"Hostpoint"根证书。你就是这么做的!因此,这是一个受信任的根证书问题。

SSL问题解决后,您可以查看CORS问题。

在https://sandbox.api.kehrwasser.com/kanubox/v1/中使用的证书是由著名的CA"Let's incrypt"颁发的。