301重定向防止在Openshift上发出CORS选项请求

时间:2014-07-15 20:51:40

标签: javascript backbone.js cors openshift

我正在用Laravel 4编写一个RESTful api,它将被Backbone.js应用程序使用。

当我使用GIT部署代码时,收到一条消息:

  

应用程序目录“public /”被选为DocumentRoot

使用Backbone.js应用程序时,PUT,GET和DELETE请求会得到适当处理,但是当我尝试发出POST请求时,由于重定向,预检请求(OPTIONS)失败:

  

请求方法:选项
  状态代码: 301永久移动

在控制台上出现此错误:

  

XMLHttpRequest无法加载http://MY-DOMAIN.rhcloud.com/projetos/。请求被重定向到'http://MY-DOMAIN.rhcloud.com/projetos',对于需要预检的跨域请求,我们不允许这样做。

这是因为CORS政策:

  

如果响应的HTTP状态代码为301,302,303,307或308
  应用缓存和网络错误步骤。

我该如何克服这个问题?有没有办法绕过或配置Openshift重定向?

>>>编辑

我在Chrome javascript控制台上收到此错误,因为我的Backbone App仍处于开发阶段。这里是复制问题的步骤:

我有一个全局命名空间“App”,我的项目以这种形式组织:App.Models,App.Collections等。

模型

App.Models.Projeto = Backbone.Model.extend({

    defaults : {
        codigo      : '',
        titulo      : '',
        url         : '',
        status      : ''
    }

});

收藏

App.Collections.Projetos = Backbone.Collection.extend({

    model : App.Models.Projeto,

    url : 'http://MY-DOMAIN.rhcloud.com/projetos'

});

在控制台上

var projetos = new App.Collections.Projetos;

projetos.create({
    titulo : "blablabla",
    codigo : "12jk4h3",
    url    : "example.com",
    status : 0
});

我可以在集合中获取,编辑和删除模型。我唯一不能做的就是创建一个新的。

最后一件事,我被重定向到的URL是相同的URL,但最后没有“/”。

因此,即使集合中的“url”属性设置为http://MY-DOMAIN.rhcloud.com/projetos,似乎Backbone会添加“/”,然后在服务器中,它会被重定向。

0 个答案:

没有答案