storage_path que plantillas motor index for entre diferencias descargar content ciclo php cors laravel

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'');