Comment faire XMLHttpRequest inter-domaine withCredentials, HTTP Autorisation (SCRO)?
Je suis incapable de faire une demande de domaines avec une Autorisation de l'en-tête (teste avec Firefox). J'ai des demandes de travail, sans authentification, mais une fois que j'ai mis withCredentials
de vrai, je ne suis plus capable de lire la réponse du serveur.
Sur le serveur j'ai renvoyer ces en-têtes (à l'aide d'un after_request
méthode en Flacon):
resp.headers['Access-Control-Allow-Origin'] = '*'
resp.headers['Access-Control-Allow-Credentials'] = 'true'
resp.headers['Access-Control-Allow-Methods'] = 'POST, OPTIONS'
resp.headers['Access-Control-Allow-Headers'] = 'Authorization'
Pas d'OPTIONS d'appel n'est jamais réellement fait par Firefox. Sur le client, je fais un XMLHttpRequest appel:
var xhr = new XMLHttpRequest()
xhr.open( 'POST', 'http://test.local:8002/test/upload', true)
xhr.withCredentials = true
xhr.onreadystatechange = function() {
console.log( xhr.status, xhr.statusText )
}
xhr.send(fd)
Sans withCredentials
définir le journal instruction journal l'attend informations à la console. Une fois que j'ai mis la valeur, cependant, le xhr ne permettent pas l'accès et la je viens d'écrire une valeur de 0 et une chaîne vide. Je n'ai pas donné l'autorisation d'en-tête ici, mais cela ne devrait pas affecter ma capacité à lire le résultat.
Si je tente d'ajouter un nom d'utilisateur/mot de passe pour la commande "ouvrir" - je obtenir un NS_ERROR_DOM_BAD_URI: Access to restricted URI denied
erreur.
Ce que je fais mal?
Vous devez vous connecter pour publier un commentaire.
J'ai écrit un article avec un complet de la SCRO le programme d'installation.
J'ai trouvé plusieurs questions qui peuvent causer ce problème:
Access-Control-Allow-Origin
ne peut pas être un générique si les informations d'identification sont utilisées. Il est plus facile qu'à copier leOrigin
en-tête de la demande dans ce domaine. Il est tout à fait difficile de comprendre pourquoi le standard serait de refuser le générique.OPTIONS
demande. Pour faciliter le débogage, j'ai ajouté l'en-têteAccess-Control-Max-Age: 1
open
commande est apparemment pas utilisable en tant que les informations d'identification. Vous devez ajouter unAuthorization
- tête vous-même.xhr.setRequestHeader( 'Authorization', 'Basic ' + btoa( user + ':' + pass ) )
Dans l'ensemble, le
withCredentials
système est plutôt braindead. Il est plus facile d'écrire tout simplement un serveur qui accepte de l'autorisation en tant que partie du corps de la requête.