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

3

1

My front-end application is running on a grunt live server on port 9100, while my PHP server is on the port 80. The host is the same, just the port differ.

When I send a POST request to http://dev.site.dev/api/gist with some JSON data, I got an error 404 on the preflight OPTIONS request.

I already added the CORS headers in apache configuration:

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"

``` and restart the server but still got the issue.

Should I add an index_option() method in my gist controller ? Or the problem is somewhere else ?

Perren answered 30/5, 2014 at 12:17 Comment(0)
P
8

As I described in my answer on the CodeIgniter bug tracker for this "issue" #313, there is several solutions.

Application wide

I found a solution from HTTP OPTIONS error in Phil Sturgeon's Codeigniter Restserver and Backbone.js, which is to remove otpions from the list of value in $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');

Resource's focused

Another solution is to simply implement the index_options().

It didn't work for me the first time due to a typo (it's OPTIONS is plural ). And with this solution no more need to temper with applications/libraries/REST_Controller.php:

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

Now the preflight OPTION request is always true so the POST request is sent and everything works :)

Perren answered 2/6, 2014 at 5:20 Comment(0)
E
1

Yes you have to add the index_options() method.

I had the same problem and it only worked when i added the OPTIONS method with the same arguments as my POST method.

Efficacy answered 31/5, 2014 at 12:55 Comment(0)
P
0

in my case it was a routing problem.

What I did is overide the 404 routing. After that, the request got through the routing and the rest server did all the rest.

This is what I put in my routes.php:

$route['404_override'] = 'auth/options';
Perspire answered 30/11, 2017 at 11:32 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.