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 ?
As I described in my answer on the CodeIgniter
bug tracker for this "issue" #313, there is several solutions.
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');
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 :)