Maison > Article > développement back-end > Pourquoi ma requête CORS échoue-t-elle avec « L'origine n'est pas autorisée par Access-Control-Allow-Origin » ?
Description du problème :
Lors de la tentative de transmission de données de formulaire via CORS (Cross-Origin Partage de ressources) de www.siteone.com à www.sitetwo.com, l'erreur suivante est rencontré :
XMLHttpRequest cannot load http://www.sitetwo.com/cors.php. Origin http://www.siteone.com is not allowed by Access-Control-Allow-Origin.
Malgré la définition des en-têtes suivants dans cors.php sur www.sitetwo.com :
header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
Solution :
Le problème réside dans la façon dont les en-têtes de requête CORS sont gérés. Le code mis à jour suivant pour cors.php fournit une réponse plus complète aux requêtes CORS :
<code class="php"><?php // Allow from any origin if (isset($_SERVER['HTTP_ORIGIN'])) { header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Max-Age: 86400'); // cache for 1 day } // Access-Control headers are received during OPTIONS requests if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); exit(0); } // Respond to the request echo "You have CORS!"; ?></code>
Ce code révisé autorise les requêtes d'origine croisée de n'importe quelle origine, valide les méthodes et les en-têtes de requête, met en cache la réponse CORS pour un jour, et répond de manière appropriée aux demandes OPTIONS.
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!