Maison >développement back-end >tutoriel php >Analyse d'instance méthode d'activation de fonction inter-domaines laravel
Pour des raisons de sécurité, les navigateurs limiteront les requêtes cross-origin dans Script. Étant donné que XMLHttpRequest suit la politique de même origine, toutes les applications qui utilisent XMLHttpRequest pour construire des requêtes HTTP ne peuvent accéder qu'à leurs propres noms de domaine. Si elles doivent créer des requêtes inter-domaines, les développeurs doivent coopérer avec le navigateur pour effectuer certaines configurations autorisant le cross-domain. -demandes de domaine.
Cet article vous présente principalement les informations pertinentes sur la façon d'activer les fonctions inter-domaines dans Laravel. L'article le présente en détail à travers un exemple de code. Il a une certaine valeur d'apprentissage de référence pour l'étude ou le travail de chacun. j'espère que cela pourra aider tout le monde.
Le groupe de travail sur les applications du W3C a recommandé un mécanisme de partage entre ressources qui permet aux serveurs d'applications Web de prendre en charge le contrôle d'accès entre sites, permettant ainsi de sécuriser la transmission de données entre sites. Ce mécanisme utilise plusieurs extensions. le mode d'origine :
L'en-tête de réponse doit être ajouté avec Access-Control-Allow-Orign pour indiquer quelles sources de requête sont autorisées à accéder au contenu de la ressource
Le navigateur vérifiera la correspondance entre la source de la requête et la valeur dans la réponse
Pour les requêtes inter-domaines, le navigateur pré-enverra une méthode non simple pour déterminer si une ressource donnée est prête à accepter l'accès aux ressources inter-domaines
L'application serveur détermine si la requête est inter-domaine en vérifiant l'Orign dans l'en-tête de la requête.
Norme de partage de ressources d'origine croisée
La norme de partage de ressources d'origine croisée ajoute une série d'en-têtes HTTP pour permettre au serveur de déclarer quelles sources sont accessibles via le navigateur sur les ressources du serveur. De plus, pour les méthodes de requête HTTP qui provoqueront des réponses destructrices sur les données du serveur (notamment les méthodes HTTP autres que GET, ou les requêtes POST avec certains types MIME), la norme impose fortement que le navigateur envoie au préalable une requête prédéfinie sous forme d'OPTIONS. . requête (requête de contrôle en amont) pour obtenir les méthodes HTTP prises en charge par le serveur pour les requêtes d'origine croisée. Après avoir confirmé que le serveur autorise les requêtes d'origine croisée, envoyez la vraie requête avec la méthode de requête HTTP réelle. Le serveur peut également informer le client si des informations de crédit (y compris les cookies et les données liées à l'authentification HTTP) doivent être envoyées avec la demande.
La norme de partage d'origines croisées nécessite la coopération du navigateur et du serveur pour être complétée. Actuellement, les fabricants de navigateurs peuvent compléter automatiquement la partie demande, de sorte que l'accès aux ressources d'origines croisées est toujours concentré. le côté serveur.
Vous trouverez ci-dessous quelques en-têtes de réponse et en-têtes de requête disponibles dans la norme.
En-tête de réponse
Access-Control-Allow-Origin : indique quelles sources de requête sont autorisées à accéder aux ressources. La valeur peut être "*", "null", ou une seule adresse source.
Access-Control-Allow-Credentials : indique si la réponse est exposée lorsque l'identifiant des informations d'identification est omis de la demande. Pour les pré-demandes, cela indique que les informations d'identification de l'utilisateur peuvent être incluses dans la demande réelle.
Access-Control-Expose-Headers : indique quelles informations d'en-tête peuvent être exposées en toute sécurité à l'API de la spécification API CORS.
Access-Control-Max-Age : Spécifie la durée pendant laquelle les pré-requêtes peuvent être stockées dans le cache de pré-requête.
Access-Control-Allow-Methods : pour les pré-requêtes, quelles méthodes de requête peuvent être utilisées pour les requêtes réelles.
Access-Control-Allow-Headers : pour les pré-requêtes, indique quelles informations d'en-tête peuvent être utilisées dans la demande réelle.
Origine : Indique la source de la pré-demande ou de la demande cross-domain.
Access-Control-Request-Method : Pour les pré-requêtes, indiquez quelles méthodes de requête dans les pré-requêtes peuvent être utilisées dans les requêtes réelles.
Access-Control-Request-Headers : indique quelles informations d'en-tête dans la pré-requête peuvent être utilisées dans la demande réelle.
En-tête de demande
Origine : Indique la source de la demande ou de la pré-demande.
Access-Control-Request-Method : Apportez cet en-tête de requête lors de l'envoi de la pré-requête, en indiquant la méthode de requête qui sera utilisée dans la requête réelle.
Access-Control-Request-Headers : Cet en-tête de requête est inclus lors de l'envoi de la pré-requête, indiquant les en-têtes de requête que la requête réelle portera.
Middleware
Pour autoriser les requêtes inter-domaines dans Laravel, nous pouvons créer un middleware qui ajoute des réponses pour ajouter des en-têtes de réponse qui gèrent spécifiquement les requêtes inter-domaines :
<?php namespace App\Http\Middleware; use Closure; use Response; 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); $response->header('Access-Control-Allow-Origin', config('app.allow')); $response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Cookie, Accept'); $response->header('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, OPTIONS'); $response->header('Access-Control-Allow-Credentials', 'true'); return $response; } }
Il y a les éléments suivants à noter :
Pour cross Pour domaine Pour les demandes d'accès qui doivent être accompagnées d'informations d'authentification, vous devez spécifier withCredentials comme true dans l'instance XMLHttpRequest.
Vous pouvez créer ce middleware en fonction de vos propres besoins. Si vous devez inclure des informations d'authentification (y compris le cookie, la session) dans la demande, vous devez alors spécifier Access-Control-Allow. -Credentials Est vrai, car pour les pré-requêtes, si vous ne précisez pas cet en-tête de réponse, le navigateur ignorera directement la réponse.
Lorsque Access-Control-Allow-Credentials est spécifié comme vrai dans la réponse, Access-Control-Allow-Origin ne peut pas être spécifié comme *
Le post-middleware n'ajoutera des en-têtes de réponse que lorsqu'il répond normalement, et si une exception se produit, la réponse ne passera pas par le middleware.
Recommandations associées :
Trois façons dont jQuery utilise JSONP pour obtenir des données inter-domaines
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!