相关疑难解决方法(0)

使用https $ http请求状态0

情况:

我正在开发一个从API接收数据的Ionic应用程序.

之前,API在http://地址上,一切正常.

然后我们将API移动到https://并且它不再起作用了.或者,它仍然可以在浏览器中访问它,但不能在手机(或模拟器)中访问它.

我不确定可能是什么问题.在控制台日志中,我看到请求的状态为0.

它可能与白名单,标题或CORS有关.我尝试了几种方法但没有效果.

白名单:

在config.xml之前有这个白名单:

<allow-navigation href="http://*/*" /> 
Run Code Online (Sandbox Code Playgroud)

我曾尝试以多种方式修改它,但这并没有解决问题.例如,我尝试过:

<allow-navigation href="https://*/*" /> 
Run Code Online (Sandbox Code Playgroud)

<allow-navigation href="*" />
Run Code Online (Sandbox Code Playgroud)

API请求:

这是API请求的一个示例:

$http.get( 'https://MY_DOMAIN.com/mobile/list_mobile_project/' ,{},{"headers" : {"Content-Type" : "application/x-www-form-urlencoded; charset=UTF-8" }})
     .success(function(data, status, headers, config) 
     {
             // code
     }).
     error(function(data, status, headers, config) 
     {
         console.log('Error with the API list_mobile_project');
         console.log(data);
         console.log(status);
         console.log(headers);
         console.log(config);
     });
Run Code Online (Sandbox Code Playgroud)

API响应:

这是API响应的一个例子:

public function list_mobile_project()
{
    header('Access-Control-Allow-Origin: *');
    header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept"); 

    // code

    echo json_encode( $project_list );
}
Run Code Online (Sandbox Code Playgroud)

问题:

如何让API在HTTPS上运行?

如果是与CORS相关的问题,如何在服务器端启用它?

https android ios angularjs ionic-framework

16
推荐指数
1
解决办法
2458
查看次数

AngularJS $ http从失败的CORS请求返回状态码0

好的,我已经为此寻找了.基本上我们使用$ http请求,即跨域请求.我们的服务器允许域,当请求返回200时,一切正常.但是,只要我们的服务器返回错误,500,401,无论如何,Angular认为这是一个CORS问题.

我用Fiddler调试了响应,以验证我的服务器是否返回了500个Angular阻塞.

这是请求:

       var params = {
            url: "fakehost/example",
            method: 'GET',
            headers: {
                "Authorization": "Basic encodedAuthExample"
            }
        };

       $http(params).then(
            function (response) { // success 

            },
            function (error) { // error 
                 // error.status is always 0, never includes data error msg
            });
Run Code Online (Sandbox Code Playgroud)

然后在控制台中,我会看到:

XMLHttpRequest无法加载fakehost/example.请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许原点'mylocalhost:5750'访问.

然而,在提琴手中,真正的反应是:

HTTP/1.1 500 Internal Server Error
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Tue, 26 Aug 2014 12:18:17 GMT
Content-Length: 5683

{"errorId":null,"errorMessage":"Index was outside the bounds of …
Run Code Online (Sandbox Code Playgroud)

javascript xmlhttprequest cors angularjs

10
推荐指数
1
解决办法
1万
查看次数

HAproxy:OPTIONS 和 POST 方法的 503 错误文件不同

我们有一个 Web 应用程序,使用 ajax 调用运行在不同域上的后端(-> 需要 CORS)。后端由HAproxy 1.4.22组成和多个 Wildfly(在 OpenShift PaaS 上运行)组成。如果没有 Wildfly 可用(例如,在“维护”期间),HAproxy 会为每个请求或配置的错误文件提供 503 服务。到目前为止,一切都很好...

对于 Web 应用程序来说,根据被拒绝的后端请求(带有 503)正确可视化“维护模式”是一个问题,因为浏览器首先发送一个 OPTIONS 请求(预检)并已收到 503。这最终导致浏览器不会将此状态代码反映到 JavaScript 中执行的 ajax 调用(我们总是得到状态代码 0 作为响应,因为浏览器将其解释为预检的致命失败并拒绝任何访问)。这个故事并不新鲜,在 stackoverflow 上有很多帖子。

那么如何解决这个问题呢?我的想法是提供两个不同的错误文件(HAproxy 语言中的“错误文件”) - 一个提供内容为“HTTP/1.1 200 OK.... Access-Control-Allow-Origin: *....”的 OPTIONS 请求以传递在浏览器中进行预检,然后一个错误文件为 POST 请求提供内容“HTTP/1.1 503 .....”,让浏览器在 ajax 响应中真正反映状态 503。但是,我无法运行它。

global
    maxconn     256

defaults
    mode                    http
    log                     global
    option                  httplog
    ...

listen express 127.4.184.2:8080
    acl is_options method OPTIONS
    acl is_post method POST

    errorfile 503 /var/lib/openshift/564468c90c1e66c7f2000077/app-root/runtime/repo/503.http if is_post …
Run Code Online (Sandbox Code Playgroud)

javascript ajax haproxy cors

1
推荐指数
1
解决办法
4990
查看次数