Maison  >  Article  >  cadre php  >  solution inter-domaines Laravel

solution inter-domaines Laravel

藏色散人
藏色散人avant
2019-10-22 13:26:393436parcourir

Lorsque nous utilisons Laravel pour le développement, en particulier lorsque le front-end et le back-end sont complètement séparés, car le projet front-end s'exécute sur le port désigné de notre propre machine (il peut aussi s'agir des machines d'autres personnes), par exemple comme localhost:8000, et le programme laravel exécuté sur un autre port le rend inter-domaines, et en raison de la politique de même origine du navigateur, les requêtes inter-domaines sont illégales. En fait, ce problème est facile à résoudre, il suffit d’ajouter un middleware.

1. Créez un nouveau middleware

php artisan make:middleware EnableCrossRequestMiddleware

2. Écrivez le contenu du middleware

<?php
namespace App\Http\Middleware;
use Closure;
class EnableCrossRequestMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $response = $next($request);
        $origin = $request->server(&#39;HTTP_ORIGIN&#39;) ? $request->server(&#39;HTTP_ORIGIN&#39;) : &#39;&#39;;
        $allow_origin = [
            &#39;http://localhost:8000&#39;,
        ];
        if (in_array($origin, $allow_origin)) {
            $response->header(&#39;Access-Control-Allow-Origin&#39;, $origin);
            $response->header(&#39;Access-Control-Allow-Headers&#39;, &#39;Origin, Content-Type, Cookie, X-CSRF-TOKEN, Accept, Authorization, X-XSRF-TOKEN&#39;);
            $response->header(&#39;Access-Control-Expose-Headers&#39;, &#39;Authorization, authenticated&#39;);
            $response->header(&#39;Access-Control-Allow-Methods&#39;, &#39;GET, POST, PATCH, PUT, OPTIONS&#39;);
            $response->header(&#39;Access-Control-Allow-Credentials&#39;, &#39;true&#39;);
        }
        return $response;
    }
}

$allow_origin variable de tableau, c'est vous. La liste des cross-domaines autorisés peut être modifiée par vous-même.

3. Enregistrez ensuite le middleware dans le fichier du noyau

    protected $middleware = [
        // more
        App\Http\Middleware\EnableCrossRequestMiddleware::class,
    ];

Ajoutez-le dans l'attribut $middleware de la classe AppHttpKernel. Le middleware enregistré ici appartient au middleware global. .

Ensuite, vous constaterez que la page frontale peut déjà envoyer des requêtes inter-domaines.

Il est normal qu'il y ait une requête supplémentaire avec la méthode définie sur les options, car le navigateur doit d'abord déterminer si le serveur autorise la requête inter-domaines.

Pour plus d'articles techniques liés à Laravel, veuillez visiter la colonne Tutoriel d'introduction au framework Laravel pour apprendre !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer