Maison > Article > interface Web > Comment éviter de définir des en-têtes personnalisés dans l'en-tête « Access-Control-Request-Headers » dans les requêtes jQuery AJAX POST ?
Contexte :
Dans les requêtes AJAX POST utilisant jQuery, en-têtes personnalisés peuvent être ajoutés pour améliorer la communication avec le serveur. Le défi réside dans l'observation que des en-têtes personnalisés sont ajoutés à l'en-tête "Access-Control-Request-Headers" moins couramment observé au lieu des en-têtes prévus.
Explication :
Lorsqu'un navigateur envoie une requête AJAX à un domaine différent de celui d'où il provient, le navigateur envoie d'abord une requête de « contrôle en amont » (méthode OPTIONS) pour vérifier si le serveur autorise les en-têtes personnalisés. Ceci est fait pour empêcher les attaques de scripts intersites (XSS).
Dans le cadre de cette demande de contrôle en amont, le navigateur ajoute l'en-tête "Access-Control-Request-Headers", qui répertorie les en-têtes personnalisés qui seront envoyé dans la demande réelle. Le serveur répond avec un code d'état "204 No Content" et un en-tête "Access-Control-Allow-Headers" spécifiant quels en-têtes personnalisés sont autorisés.
Solution :
Pour éviter ce comportement et définir des en-têtes personnalisés directement dans la requête POST, vous pouvez définir explicitement les en-têtes dans la fonction "beforeSend" de l'appel jQuery Ajax. Cela garantit que les en-têtes sont ajoutés à la demande avant son envoi, en contournant le processus de demande de contrôle en amont.
Voici un exemple de la façon de définir un en-tête dans un appel jQuery Ajax :
$.ajax({ type: "POST", beforeSend: function(request) { request.setRequestHeader("Authority", authorizationToken); }, url: "entities", data: "json=" + escape(JSON.stringify(createRequestObject)), processData: false, success: function(msg) { $("#results").append("The result =" + StringifyPretty(msg)); } });
En définissant l'en-tête dans la fonction "beforeSend", jQuery ajoutera l'en-tête "Authority" à la requête POST réelle, vous permettant de transmettre des requêtes personnalisées en-têtes et recevez la réponse attendue du serveur.
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!