Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Phil Sturgeon中的HTTP选项错误';s Codeigniter Restserver和Backbone.js_Codeigniter_Rest_Backbone.js_Http Options Method_Codeigniter Restserver - Fatal编程技术网

Phil Sturgeon中的HTTP选项错误';s Codeigniter Restserver和Backbone.js

Phil Sturgeon中的HTTP选项错误';s Codeigniter Restserver和Backbone.js,codeigniter,rest,backbone.js,http-options-method,codeigniter-restserver,Codeigniter,Rest,Backbone.js,Http Options Method,Codeigniter Restserver,当我试图将模型保存到位于另一个主机/URL上的restful web服务时,我的backbone.js应用程序抛出HTTP OPTIONS not found错误 根据我的研究,我得出以下结论: 一个请求会不断地发送一个选项http请求头,而根本不会触发POST请求 显然,带有“对用户数据造成副作用”的请求的CORS会在实际发送预期的HTTP请求方法之前,让您的浏览器“预飞”带有选项请求头的请求,以检查批准情况 我试图通过以下方式解决这个问题: 将主干中的EmulatoreHttp设置为tru

当我试图将模型保存到位于另一个主机/URL上的restful web服务时,我的
backbone.js
应用程序抛出HTTP OPTIONS not found错误

根据我的研究,我得出以下结论:

一个请求会不断地发送一个选项http请求头,而根本不会触发POST请求

显然,带有“对用户数据造成副作用”的请求的CORS会在实际发送预期的HTTP请求方法之前,让您的浏览器“预飞”带有选项请求头的请求,以检查批准情况

我试图通过以下方式解决这个问题:

  • 将主干中的EmulatoreHttp设置为true
Backbone.emulateHTTP=true

  • 我还允许在标题中使用所有CORS和CSRF选项

    标题('Access-Control-Allow-Origin:')
    标题(“访问控制允许标题:来源、X请求、内容类型、接受”); 标题(“访问控制允许方法:GET、POST、OPTIONS”)

当引入
主干.emulateHTTP
代码行时,应用程序崩溃

在CodeIgniter RESTServer中是否有一种响应选项请求的方法,以及是否有其他替代方法来允许禁用该请求



我找到了一个解决办法。我不确定是否应该使用它,因为它似乎有点过时。

我遇到了完全相同的问题。为了解决这个问题,我在内核中有一个MY_REST_Controller.php,我的所有restapi控制器都使用它作为基类。我只是添加了一个这样的构造函数来处理选项请求

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,如果为OPTIONS,则返回请求的代码200。

您还可以修改子类中的
$allowed\u http\u methods
属性以排除OPTIONS方法。早期版本的REST_控制器对选项没有任何作用,添加这一行似乎模仿了这种行为:

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

解决这一问题比排名更高的答案要干净得多+1搜索数小时后;这就是解决办法。谢谢:)在此基础上,我们可以添加“访问控制允许源代码”,如下标题('Access-Control-Allow-Origin:'。$\u SERVER['HTTP\u Origin']);因此,在这里您可以检查允许哪个域访问您的api。发送204响应可能更好:因此代码应该是:parent::\uu construct();如果($\u SERVER['REQUEST\u METHOD']==“OPTIONS”){$this->response(NULL,HTTP\u NO\u CONTENT);return;}我可以知道为什么需要拒绝所有'OPTIONS'请求方法吗?它在本地工作,否则我们需要直播并上传到服务器。我使用codeigniter并在前端反应js。我们必须把这个放在哪里。?