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 » ?

Pourquoi ma requête CORS échoue-t-elle avec « L'origine n'est pas autorisée par Access-Control-Allow-Origin » ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-03 09:54:29699parcourir

Why is my CORS Request Failing with

CORS ne fonctionne pas en PHP

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn