使用 AngularJS 的 POST 请求失败,预检选项状态代码 = 404,带有 CodeIgniter ResetServer

POST request with AngularJS fails with preflight OPTION status code = 404 with CodeIgniter ResetServer

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

当我向 http://dev.site.dev/api/gist 发送带有一些 JSON 数据的 POST 请求时,我在预检 OPTIONS 请求中收到错误 404

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

1
2
3
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"

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

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


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

应用广泛

我从 Phil Sturgeon 的 Codeigniter Restserver 和 Backbone.js 中的 HTTP OPTIONS 错误中找到了解决方案,即从 $allowed_http_methods:

的值列表中删除 otpions

1
2
// 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:

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

现在预检 OPTION 请求总是正确的,所以 POST 请求被发送并且一切正常:)


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

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


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

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

这是我放在routes.php中的:

1
$route['404_override'] = 'auth/options';