При разработке REST API часто приходится добавлять заголовки Access-Control-Allow-Origin для Cross-origin resource sharing.
Если Вы имеете дело с Laravel, не зависимо от версии, то скорее всего уже знаете что такое middleware.
Посредники (англ. middleware) предоставляют удобный механизм для фильтрации HTTP-запросов вашего приложения. Например, в Laravel есть посредник для проверки аутентификации пользователя.
Источник: https://laravel.ru/docs/v5/middleware
Посредники вызываются до того как запрос будет обработан controller's. При помощи посредников можно к примеру, проверить авторизацию пользователя и перенаправить его на страницу авторизации.
При помощи midlleware мы модифицируем заголовки ответа сервера, добавив несколько строк для Cross-origin resource sharing. Давайте разберем каждый заголовок.
Access-Control-Allow-Origin * - разрешить запросы с любого домена. Вы можете указать один домен или перечислить несколько доменов через запятую, в этом случае запросы будут выполняться только с указаных доменных имен.
Access-Control-Allow-Methods GET, POST, PUT, DELETE, OPTIONS - разрешенные методы запросов. Важно всегда указывать метод OPTIONS. В ответ на запрос страницы методом OPTIONS обычно ничего не возвращает. Он служит для получения заголовков ответа от сервера перед отправкой запроса, к примеру POST или PUT методом.
Access-Control-Allow-Headers - разрешенные заголовки. К примеру, для middleware "auth:api" пользователь должен передать в заголовках токен для авторизации на сервере. Токен передается в заголовке Authorization.
Создаем Middleware CrossAll. Для этого выполните artisian-команду: php artisian make:middleware CrossAll.
После создания откройте файл app/Http/Middleware/CrossAll.php на редактирование и измените метод handle в соответствии с кодом:
public function handle($request, Closure $next) { return $next($request) ->header('Access-Control-Allow-Origin', '*') ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS') ->header('Access-Control-Allow-Headers', 'Authorization,Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers'); }
Теперь нам необходимо добавить middleware на запросы. Вы можете добавить middleware на определенные routes или на группы routes. Подробнее о middleware вы можете почитать здесь.
Я добавил middleware на все запросы к api через файл app/Http/Kernel.php.
protected $middlewareGroups = [ 'web' => [ ... ], 'api' => [ \App\Http\Middleware\CrossAll, ... ], ];