javascript openclassroom - En-tête 'Autorisation' d'origine croisée avec jquery.ajax ()




1 Answers

Voici un exemple de requête CORS. Si vous avez accès au serveur (ce que je suppose que vous faites puisque c'est une demande à localhost), vous devrez ajouter des en-têtes de réponse spécifiques à CORS. La chose la plus simple à faire est d'ajouter les en-têtes de réponse suivants:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Authorization

Votre serveur doit également être configuré pour répondre aux requêtes HTTP OPTIONS. Vous pouvez en apprendre plus sur les demandes de CORS ici: http://www.html5rocks.com/en/tutorials/cors/

selectionner element

J'essaie d'envoyer un domaine d'origine croisée et d'ajouter un en-tête 'Authorization' personnalisé. Veuillez consulter le code ci-dessous.

Erreur:

XMLHttpRequest ne peut pas charger {url}. Champ d'en-tête de demande L'autorisation n'est pas autorisée par Access-Control-Allow-Headers.

function loadJson(from, to) {
    $.ajax({
        //this is a 'cross-origin' domain
        url : "http://localhost:2180/api/index.php",
        dataType : 'json',
        data : { handler : "statistic", from : from, to : to
        },
        beforeSend : setHeader,
        success : function(data) {
            alert("success");
        },
        error : function(jqXHR, textStatus, errorThrown) {
            alert("error");
        }
    });
}

function getToken() {
    var cookie = Cookie.getCookie(cookieName);
    var auth = jQuery.parseJSON(cookie);
    var token = "Token " + auth.id + ":" + auth.key;
}

function setHeader(xhr) {
    xhr.setRequestHeader('Authorization', getToken());
}

J'ai aussi essayé:

headers : { 'Authorization' : getToken() },

dans la requête ajax.

Se pourrait-il que le framework jquery-ajax bloque l'Authentification d'origine croisée? Comment puis-je réparer cela?

Mettre à jour:

En passant: y a-t-il une méthode plus sûre pour stocker le auth.key sur le client puis dans un cookie? getToken () sera remplacé par une méthode plus complexe, hachage du corps, date, etc.




Related

javascript jquery ajax cross-domain