Heim  >  Artikel  >  PHP-Framework  >  domänenübergreifende Laravel-Lösung

domänenübergreifende Laravel-Lösung

藏色散人
藏色散人nach vorne
2019-10-22 13:26:393432Durchsuche

Wenn wir Laravel für die Entwicklung verwenden, insbesondere wenn Front-End und Back-End vollständig getrennt sind, da das Front-End-Projekt auf dem angegebenen Port unserer eigenen Maschine läuft (es können auch Maschinen anderer Leute sein), z als localhost:8000, und das Laravel-Programm, das auf einem anderen Port ausgeführt wird, macht es domänenübergreifend, und aufgrund der Same-Origin-Richtlinie des Browsers sind domänenübergreifende Anforderungen illegal. Tatsächlich ist dieses Problem leicht zu lösen, indem Sie einfach eine Middleware hinzufügen.

1. Erstellen Sie eine neue Middleware

php artisan make:middleware EnableCrossRequestMiddleware

2. Schreiben Sie den Middleware-Inhalt

<?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-Array-Variable Die Liste der erlaubten Cross-Domains können Sie selbst ändern.

3. Registrieren Sie dann die Middleware in der Kerneldatei

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

Fügen Sie sie im Attribut $middleware der AppHttpKernel-Klasse hinzu. Die hier registrierte Middleware gehört zur globalen Middleware .

Dann werden Sie feststellen, dass die Frontend-Seite bereits domänenübergreifende Anfragen senden kann.

Es ist normal, dass es eine weitere Anfrage gibt, bei der die Methode auf „Optionen“ gesetzt ist, da der Browser zunächst feststellen muss, ob der Server die domänenübergreifende Anfrage zulässt.

Weitere technische Artikel zu Laravel finden Sie in der Spalte Einführungs-Tutorial zum Laravel-Framework, um mehr darüber zu erfahren!

Das obige ist der detaillierte Inhalt vondomänenübergreifende Laravel-Lösung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen