在菲尔鲟鱼的笨Restserver和Backbone.js的HTTP OPTIONS错误(HTTP

2019-07-23 02:23发布

backbone.js应用程序抛出未找到HTTP OPTIONS错误,当我尝试将模型保存到位于第另一台主机/ URL我的RESTful Web服务。

根据我的研究,我从这个收集后认为:

一个请求将不断发送OPTIONS HTTP请求头,而不是在所有触发POST请求。

与要求,将“上的用户数据产生副作用的”将让你的浏览器“预检”的与OPTIONS请求头请求检查审批,实际上是发送了您的预期HTTP请求方法之前显然CORS。

我试图让这个由各地:

  • 在骨干Settting emulateHTTP为true。

Backbone.emulateHTTP = TRUE;

  • 我也允许允许标题所有CORS和CSRF选项。

    头(“访问控制允许来源:*”);
    标题( “接入控制允许接头:原产地,X-请求-随着,内容类型,接受”); 报头( “访问控制允许的方法:GET,POST,OPTIONS”);

在当应用程序崩溃Backbone.emulateHTTP介绍的代码行。

是否有办法应对选项笨RESTServer要求以及是否有任何其他的替代品,以允许或者禁用自说自话的地方申请?


我发现这个在Github溶为一体。 我不知道,因为它似乎有点过时,我应该使用它。

Answer 1:

我遇到过一模一样的问题。 为了解决这个问题我有一个MY_REST_Controller.php核心和我所有的REST API的控制器使用它作为一个基类。 我只是增加了一个构造函数这样来处理OPTIONS请求。

function __construct() {

    header('Access-Control-Allow-Origin: *');
    header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method");
    header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
    $method = $_SERVER['REQUEST_METHOD'];
    if($method == "OPTIONS") {
        die();
    }
    parent::__construct();
}

这只是检查该请求类型是OPTIONS并且如果是这样只是模具外面返回代码200的请求。



Answer 2:

您还可以修改$allowed_http_methods在子类中排除的选项方法属性。 REST_controller以前的版本没有做任何与选项 ,并添加这一行似乎模仿行为:

protected $allowed_http_methods = array('get', 'delete', 'post', 'put');


文章来源: HTTP OPTIONS error in Phil Sturgeon's Codeigniter Restserver and Backbone.js