Maison > Questions et réponses > le corps du texte
P粉5026087992023-08-25 17:38:47
Dans mon cas similaire, le frontend Angular et le backend Php m'ont aidé avec le code ci-dessous. J'envoie d'abord un en-tête :
header("Access-Control-Allow-Origin: http://localhost:4200"); header("Content-Type: application/json; charset=UTF-8"); header("Access-Control-Allow-Methods: POST, DELETE, OPTIONS"); header("Access-Control-Max-Age: 3600"); header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
Après eux, je peux ignorer les demandes d'options :
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { return 0; }
Cette approche m'a aidé à gérer les méthodes de requête intégrées « publier » et « supprimer » dans Angular.
P粉3168908842023-08-25 16:25:07
D'accord, j'ai eu un problème similaire récemment et j'ai tout résolu uniquement sur le backend, sans les éléments .htaccess.
Lorsque le navigateur envoie une requête inter-serveur, il envoie d'abord une requête OPTIONS pour s'assurer qu'elle est valide et qu'une "vraie" requête peut être envoyée. La "vraie" requête est envoyée lorsqu'elle obtient une réponse correcte et valide d'OPTIONS.
Maintenant, pour les deux requêtes sur le backend, vous devez vous assurer que les en-têtes corrects sont renvoyés : content-type,allow-origin,allow-headers, etc...
Assurez-vous que dans les requêtes OPTIONS sur le backend, l'application renvoie l'en-tête et renvoie une réponse au lieu de continuer le flux complet de l'application.
Dans une "vraie" requête, vous devez renvoyer les en-têtes corrects et le corps de réponse régulier.
Exemple :
//The Response object $res = $app->response; $res->headers->set('Content-Type', 'application/json'); $res->headers->set('Access-Control-Allow-Origin', 'http://example.com'); $res->headers->set('Access-Control-Allow-Credentials', 'true'); $res->headers->set('Access-Control-Max-Age', '60'); $res->headers->set('Access-Control-Allow-Headers', 'AccountKey,x-requested-with, Content-Type, origin, authorization, accept, client-security-token, host, date, cookie, cookie2'); $res->headers->set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); if ( ! $req->isOptions()) { // this continues the normal flow of the app, and will return the proper body $this->next->call(); } else { //stops the app, and sends the response return $res; }
Ce qu'il faut retenir :
Si vous utilisez : "Access-Control-Allow-Credentials" = true Assurez-vous que « Access-Control-Allow-Origin » n'est pas « * », il doit être défini sur le bon domaine ! (Beaucoup de sang a coulé ici :/)
Définissez les en-têtes autorisés que vous obtiendrez dans "Access-Control-Allow-Headers" Si vous ne les définissez pas, la requête échouera