La meilleure stratégie et implémentation inter-domaines dans le développement d'API PHP
Avec l'essor de l'API RESTful, PHP en tant que langage de développement back-end a également été largement utilisé dans de nombreuses applications Web. Lors du développement d'API RESTful, les problèmes d'accès entre domaines doivent souvent être pris en compte. Cet article discutera des meilleures stratégies inter-domaines dans le développement d'API PHP et de la manière de les mettre en œuvre.
Le partage de ressources d'origine croisée fait référence au moment où un document ou un script dans un domaine tente de demander des ressources dans un autre domaine. Lors d'une requête inter-domaine, le navigateur enverra une requête « OPTIONS » au serveur cible pour indiquer la situation inter-domaine de la requête et demandera au serveur s'il doit autoriser la requête inter-domaine. Par conséquent, les développeurs doivent répondre à la requête « OPTIONS » dans l'API PHP pour indiquer au navigateur si la requête est autorisée.
Examinons maintenant la meilleure stratégie pour implémenter des requêtes inter-domaines dans l'API PHP :
C'est le moyen le plus simple d'implémenter des requêtes inter-domaines, mais ce n'est pas recommandé. Le code suivant peut être implémenté dans le fichier PHP correspondant :
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: OPTIONS, GET, POST, PUT, DELETE ' );
header('Access-Control-Allow-Headers: Content-Type');
Cela permet les requêtes inter-domaines pour toutes les méthodes HTTP.
Nous pouvons également accorder des autorisations d'accès inter-domaines spécifiques en fonction du nom de domaine requis. Le code suivant peut être implémenté dans le fichier PHP correspondant :
if ($_SERVER['HTTP_ORIGIN'] == "http://adomain.com"){
header('Access-Control-Allow-Origin: http://adomain.com'); header('Access-Control-Allow-Methods: OPTIONS, GET, POST, PUT, DELETE'); header('Access-Control-Allow-Headers: Content-Type');
}
Le code ci-dessus autorise le nom de domaine spécifié (http://adomain.com) requêtes inter-domaines, les autres noms de domaine n'autorisent pas les requêtes inter-domaines.
Si la méthode du demandeur (méthode http) est une requête non simple, le navigateur enverra d'abord une requête "OPTIONS" pour demander au serveur s'il autorise la requête . Si le serveur ne peut pas répondre à cette demande de contrôle en amont, la demande sera terminée. Afin de répondre à la requête de contrôle en amont, l'API doit implémenter la requête « OPTIONS » côté serveur et renvoyer les informations d'en-tête correctes dans la réponse pour indiquer au navigateur s'il doit autoriser des requêtes inter-domaines spécifiques. Nous pouvons utiliser le code suivant pour y parvenir :
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS'){
header('Access-Control-Allow-Origin: http://adomain.com'); header('Access-Control-Allow-Methods: OPTIONS, GET, POST, PUT, DELETE'); header('Access-Control-Allow-Headers: Content-Type'); header('Access-Control-Allow-Credentials: true'); // 是否允许共享 Cookie exit(0);
}
Par défaut, les requêtes inter-domaines ne seront pas envoyer des cookies et des informations d'authentification HTTP. Si vous avez besoin de partager des cookies, vous devez le configurer en conséquence sur le serveur, par exemple :
header('Access-Control-Allow-Credentials: true'); // S'il faut autoriser le partage de cookies
Enfin, quand En développant l'API RESTful, nous donnons la priorité aux politiques d'accès inter-domaines basées sur les noms de domaine. Répondez à la requête « OPTIONS » pour indiquer au navigateur si la requête est autorisée. Et activez la fonction de partage de cookies.
En bref, comprendre les problèmes inter-domaines dans le développement d'API PHP est un aspect important. La maîtrise des stratégies inter-domaines correspondantes peut non seulement améliorer l'efficacité du développement, mais également garantir efficacement la sécurité des applications Web.
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!