POST CORS请求到运行sailsjs的HTTPS域

时间:2015-01-22 11:49:35

标签: javascript angularjs nginx cors sails.js

我遇到了CORS,HTTPS和POST请求的问题而且无法摆脱它。

我的设置:

  • 我有一个使用HTTPS协议运行的网络应用
  • 我需要在不同的域(启用了CORS的sailsjs)上向API发出POST请求
  • API设置为接受HTTP和HTTPS请求(nginx)

问题:

  • 在桌面上,如果我使用HTTPS协议,一切正常。如果我打电话给HTTP,我会收到错误:“阻止加载混合活动内容”
  • 在移动设备上我花了好几天时间尝试拨打HTTPS电话,我尝试了很多方法,但没有成功。 HTTP调用工作正常,但再次无法使用HTTPS到HTTP。

所以基本上,在桌面上一切都很棒,而一切都在https上。在移动设备上它不起作用。当切换到http目标时,由于混合原点,所有制动器都会制动。

更多详情

webapp正在使用Angular,它在所有平台上都没有任何问题地进行CORS POST HTTPS请求。

我正在努力工作的一小部分是使用vanilla xhr请求:

submit: function(data){
        var request = this.createCORSRequest("POST",'https://heregoesthedomain.com');

        if (request){
            request.onload = function() {
                // Success code goes here.
                console.log('success');
            };

            request.onerror = function() {
                // Error code goes here.
                console.log('error');
            };

            request.send(JSON.stringify(data));
        }
    },

    createCORSRequest: function(method, url){
        var xhr = new XMLHttpRequest();
        if ("withCredentials" in xhr) {
            // Most browsers.
            xhr.open(method, url, true);
        } else if (typeof XDomainRequest != "undefined") {
            // IE8 & IE9
            xhr = new XDomainRequest();
            xhr.open(method, url);
        } else {
            // CORS not supported.
            xhr = null;
        }
        return xhr;
    }

Angular似乎正在从域到域发布从HTTPS到HTTPS的请求,而不会在所有平台上出现问题,而我似乎无法让它在干净的JS中运行。我不能使用Angular脚本,因为我需要在Angular初始化之前进行这些调用。

更新1

为了说清楚,我在尝试5分钟后没有发布这个问题。我已经做过各种调试,我已经使用远程控制台进行移动浏览器调试等。

如果您要求提供错误消息,则根本就没有。请求返回状态:0,所有其他XMLHttp值都为空。我已经在其中一个规范中读到,当请求从不再存在活动/不存在的原点创建时会被阻止,但这不是我的情况。只需停留在同一个静态页面上。

2 个答案:

答案 0 :(得分:-2)

由于API适用于两种类型的方案,因此您可以使请求URL与页面方案匹配(使用架构更少URL

this.createCORSRequest("POST",'//heregoesthedomain.com')

这应解决

  

阻止加载混合活动内容

问题。

答案 1 :(得分:-2)

同样在IE8 / IE9上你无法正常执行任何CORS请求。您可以使用XDomain

对其进行排序

从来没有那么少我会说对于网络浏览器你会遇到混合内容的问题。只有解决方案是创建特殊路由,因此您将在https上进行http和其他呼叫。 如果你有Netflix看起来他们通过在http上播放电影来解决它,因为电影块是通过http获取的,会话是通过https完成的