Nuestros programadores estrellas agotaron sus provisiones de café, por su búsqueda todo el tiempo por la resolución, hasta que Fabián encontró la solución en Beanstalk y en este momento la compartimos con nosotros.
Solución:
Intenta agregar OPTIONS
a los métodos permitidos.
header("Access-Control-Allow-Methods: GET, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Content-Length, Accept-Encoding");
y regrese inmediatamente cuando la solicitud sea el método ‘OPCIONES’ una vez que haya configurado los encabezados.
if ( "OPTIONS" === $_SERVER['REQUEST_METHOD'] )
die();
Véase también esta respuesta.
Angular envía una solicitud de verificación previa compatible con la especificación W3C CORS que verificará los métodos permitidos correctos antes de intentarlo.
Personalmente, creo que la página CORS de Mozilla Developer Network es un poco más fácil de leer sobre el tema para ayudar a comprender el flujo de CORS.
Si alguien más enfrenta el problema, me funcionó habilitar CORS en el archivo rest.php de Codeigniter REST Controller. Esto también está claramente documentado en los comentarios aquí https://github.com/chriskacerguis/codeigniter-restserver/blob/master/application/config/rest.php
//Change this to TRUE
$config['check_cors'] = TRUE;
//No change here
$config['allowed_cors_headers'] = [
'Origin',
'X-Requested-With',
'Content-Type',
'Accept',
'Access-Control-Request-Method',
'Authorization',
];
//No change here
$config['allowed_cors_methods'] = [
'GET',
'POST',
'OPTIONS',
'PUT',
'PATCH',
'DELETE'
];
//Set to TRUE to enable Cross-Origin Resource Sharing (CORS) from any source domain
$config['allow_any_cors_domain'] = TRUE;
//Used if $config['check_cors'] is set to TRUE and $config['allow_any_cors_domain'] is set to FALSE.
//Set all the allowable domains within the array
//e.g. $config['allowed_origins'] =['http://www.example.com','https://spa.example.com']
$config['allowed_cors_origins'] = [];
He agregado el siguiente constructor en mi clase de controlador
public function __construct($config = 'rest')
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
parent::__construct();
Te invitamos a corroborar nuestro trabajo escribiendo un comentario o dejando una puntuación te damos las gracias.