php - index - que es el motor de plantillas blade
laravel manejando la solicitud del método OPTION http (3)
Es un error en Laravel que fue arreglado recientemente. Es posible que desee actualizar a la última revisión.
Además, debe habilitar el soporte CORS para su servidor.
Estoy desarrollando una aplicación angularjs que utiliza laravel como su servidor de fondo. Tengo problemas para acceder a los datos desde laravel, ya que antes de cada solicitud GET, angular primero envía una solicitud OPTION como se muestra a continuación.
OPTIONS /61028/index.php/api/categories HTTP/1.1
Host: localhost
Connection: keep-alive
Cache-Control: max-age=0
Access-Control-Request-Method: GET
Origin: http://localhost:3501
Access-Control-Request-Headers: origin, x-requested-with, accept
Accept: */*
Referer: http://localhost:3501/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: UTF-8,*;q=0.5
Intenté responder esto agregando el siguiente código en el filtro anterior
if (Request::getMethod() == "OPTIONS") {
$headers = array(
''Access-Control-Allow-Origin'' =>'' *'',
''Access-Control-Allow-Methods''=>'' POST, GET, OPTIONS, PUT, DELETE'',
''Access-Control-Allow-Headers''=>''X-Requested-With, content-type'',);
return Response::make('''', 200, $headers);
}
Esto crea una respuesta con los encabezados
Content-Encoding: gzip
X-Powered-By: PHP/5.3.5-1ubuntu7.11
Connection: Keep-Alive
Content-Length: 20
Keep-Alive: timeout=15, max=97
Server: Apache/2.2.17 (Ubuntu)
Vary: Accept-Encoding
access-control-allow-methods: POST, GET, OPTIONS, PUT, DELETE
Content-Type: text/html; charset=UTF-8
access-control-allow-origin: *
cache-control: no-cache
access-control-allow-headers: X-Requested-With, content-type
Aunque los encabezados están configurados, el navegador aún arroja un error
XMLHttpRequest cannot load http://localhost/61028/index.php/api/categories. Origin http://localhost:3501 is not allowed by Access-Control-Allow-Origin.
También he intentado configurar el origen de permiso para el origen presentado en el encabezado de solicitud como se muestra a continuación
$origin=Request::header(''origin'');
//then within the headers
''Access-Control-Allow-Origin'' =>'' ''.$origin[0],
y sigue siendo el mismo error ¿Qué estoy haciendo mal? Cualquier ayuda es muy apreciada.
Editar 1
Actualmente estoy usando un hack muy feo en el que sobrepaso la inicialización de Laravels cuando se recibe una solicitud OPTIONS. Esto lo he hecho en el index.php
<?php
if ($_SERVER[''REQUEST_METHOD'']==''OPTIONS'') {
header(''Access-Control-Allow-Origin : *'');
header(''Access-Control-Allow-Methods : POST, GET, OPTIONS, PUT, DELETE'');
header(''Access-Control-Allow-Headers : X-Requested-With, content-type'');
}else{
/**
* Laravel - A PHP Framework For Web Artisans
*
* @package Laravel
* @version 3.2.13
* @author Taylor Otwell <[email protected]>
* @link http://laravel.com
*/
También tuve que agregar el encabezado allow-origin al filtro before.
Sé que esto no es inteligente, pero es mi única solución por ahora
Esto es con referencia a su pregunta con respecto al problema anterior. No mencionaste la versión de laravel y angularJS. Supongo que estás usando angtest angularJS y Laravel. También asumo que el angular está alojado en http: // localhost: 3501 y laravel está alojado en http: // localhost Simplemente siga los pasos a continuación.
Coloque debajo del bloque de código en el archivo /public/.htaccess de laravel
Header set Access-Control-Allow-Origin "http://localhost:3501" Header set Access-Control-Allow-Methods "GET,POST,PUT,DELETE,OPTIONS" Header set Access-Control-Allow-Credentials "true"
Poner debajo de la línea en configuración de angular
$httpProvider.defaults.withCredentials = true;
Nunca use * como personaje comodín. Larvel no puede identificar el dominio para la administración de la sesión. Así que configure http: // localhost: 3501 como nombre de dominio completo para Access-Control-Allow-Origin . Creo que estos te ayudarán.
agregue esto en su archivo index.php
header(''Access-Control-Allow-Origin: *'');
header(''Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS'');
header(''Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token'');