Jump to content

Edit History

Nouhail AL FIDI

Nouhail AL FIDI

Bonjour, 

En JS, quand l'API Fetch ou Axios sont utilisés, ils envoient toujours une requête avec la méthode "OPTIONS" qui correspond à une sorte d'ACK (Acknowledgement) pour voir s'ils ont le droit d'effectuer des requêtes en utilisant d'autres méthodes comme GET ou POST

En plus de la modification des headers dans le fichier /webservice/dispatcher.php il faudra également retourner une réponse en 200 quand une requête de preflight avec la méthode "OPTIONS" est envoyée, ceci n'est pas géré par défaut par Prestashop. 

Voici une proposition d'un bout de code (avec modification des headers inclus) à ajouter dans le fichier /webservice/dispatcher.php pour que ça marche 

// Modification des headers pour les méthodes
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, Content-Type, Authorization');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Methods: GET,HEAD,OPTIONS,POST,PUT');
// Retour OK si la méthode est en preflight
if ($_SERVER['REQUEST_METHOD'] === "OPTIONS") {
    return http_response_code(200);
}

Attention, la valeur * pour le paramètre "Access-Control-Allow-Origin" doit absolument être changé avant le déploiement en production vu ce n'est pas une pratique sécurisée.

Réponse inspirée de ce thread : https://stackoverflow.com/questions/53298478/has-been-blocked-by-cors-policy-response-to-preflight-request-doesn-t-pass-acce

Nouhail AL FIDI

Nouhail AL FIDI

Bonjour, 

En JS, quand l'API Fetch ou Axios sont utilisés, ils envoient toujours une requête avec la méthode "OPTIONS" qui correspond à une sorte d'ACK (Acknowledgement) pour voir s'ils ont le droit d'effectuer des requêtes en utilisant d'autres méthodes comme GET ou POST

En plus de la modification des headers dans le fichier /webservice/dispatcher.php il faudra également retourner une réponse en 200 quand une requête de preflight avec la méthode "OPTIONS" est envoyée, ceci n'est pas géré par défaut par Prestashop. 

Voici une proposition d'un bout de code (avec modification des headers inclus) à ajouter dans le fichier /webservice/dispatcher.php pour que ça marche 

// Modification des headers pour les méthodes
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, Content-Type, Authorization');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Methods: GET,HEAD,OPTIONS,POST,PUT');
// Retour OK si la méthode est en preflight
if ($_SERVER['REQUEST_METHOD'] === "OPTIONS") {
    return http_response_code(200);
}

Attention, la valeur * pour le paramètre "Access-Control-Allow-Origin" doit absolument être changé avant le déploiement en production vu ce n'est pas une pratique sécurisée.

×
×
  • Create New...