1

我的前端应用程序grunt在端口上的实时服务器上运行9100,而我的 PHP 服务器在端口上80。主机是一样的,只是端口不同。

当我向某些数据发送POST请求时,预检请求出现错误。http://dev.site.dev/api/gistJSON404OPTIONS

我已经CORS在 apache 配置中添加了标题:

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "X-Requested-With, accept, content-type"
Header set Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

``` 并重新启动服务器,但仍然有问题。

我应该在我的控制器中添加一个index_option()方法吗?gist还是问题出在其他地方?

4

3 回答 3

8

正如我在关于这个“问题”#313 的错误跟踪器的回答中CodeIgniter所描述的,有几种解决方案。

应用广泛

在 Phil Sturgeon 的 Codeigniter Restserver 和 Backbone.js 中找到了 HTTP OPTIONS 错误otpions的解决方案,该解决方案是从以下值列表中删除$allowed_http_methods

// protected $allowed_http_methods = array('get', 'delete', 'post', 'put', 'options', 'patch', 'head');
   protected $allowed_http_methods = array('get', 'delete', 'post', 'put', 'patch', 'head');

资源集中

另一种解决方案是简单地实现index_options().

由于错字(它OPTIONS是复数) ,它第一次对我不起作用。有了这个解决方案,不再需要调整applications/libraries/REST_Controller.php

public function index_options() {
    return $this->response(NULL, 200);
}

现在预检OPTION请求始终为真,因此POST请求已发送并且一切正常:)

于 2014-06-02T05:20:03.740 回答
1

是的,您必须添加index_options()方法。

我遇到了同样的问题,只有当我添加了与我的 POST 方法具有相同参数的 OPTIONS 方法时它才有效。

于 2014-05-31T12:55:14.720 回答
0

就我而言,这是一个路由问题。

我所做的是覆盖 404 路由。之后,请求通过路由,其余的服务器完成所有的工作。

这就是我在 routes.php 中的内容:

$route['404_override'] = 'auth/options';
于 2017-11-30T11:32:27.853 回答