@legolas4444

Как работает CORS в Laravel 5?

Всем привет! Разрабатываю публичное API и клиент к нему на AngularJS. Столкнулся с проблемой связаной с CORS.
Сделал такой миделвар:
<?php

namespace App\Http\Middleware;

use Closure;

class CorsMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request)->header('Access-Control-Allow-Origin' , '*')
            ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS, PATCH, HEAD')
            ->header('Access-Control-Allow-Headers', 'Authorization');
    }
}

Но я получаю ошибку:
XMLHttpRequest cannot load http://api.v1.example.local/signup. Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed. Origin 'http://german-front.local' is therefore not allowed access.

А если дописать в .htaccess
<IfModule mod_headers.c>
   Header set Access-Control-Allow-Origin "*"
   Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS, PATCH, HEAD"
</IfModule>

то все работает. Казалось бы, работает - пусть работает. Но интересно выяснить почему так только всё происходит? Кто что думает?

P.s Заметил странную особенность. Когда посылается OPTIONS - то заголовки возвращаются, а вот последующий POST запрос нужных заголовков не получает..
  • Вопрос задан
  • 6300 просмотров
Пригласить эксперта
Ответы на вопрос 2
Denormalization
@Denormalization
Посмотрите как реализованно тут https://github.com/barryvdh/laravel-cors (а конкретно тут https://github.com/asm89/stack-cors/blob/master/sr... методы isPreflightRequest, handlePreflightRequest)
Советую этот пакет, с ним не было проблем.
Ответ написан
OnYourLips
@OnYourLips
Может остальные middleware как-то модифицируют его?
Советую пройтись отладчиком и выяснить, в чем дело. Этот метод всегда помогает найти ошибку.
У меня установка таких заголовков в нужном контроллере работает.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы