web-dev-qa-db-fra.com

Appel ajax jQuery interdomaine avec identifiants

J'ai suivi les étapes suivantes: 

  1. Demandez au serveur d'autoriser les appels entre domaines (avec tous les en-têtes et tout le reste) Cela fonctionne 
  2. Testez le serveur avec des appels interdomaines Cela fonctionne 
  3. Demander au serveur de forcer un certificat Cela fonctionne 
  4. Accédez à un fichier sur le serveur avec un navigateur, choisissez le bon certificat et consultez le fichier Still works
    Nous arrivons maintenant à la partie de Nice  
  5. Combinez les appels entre domaines avec le certificat <- cela ne fonctionne pas  

Problème  

Je reçois la demande de certificat du navigateur, mais lorsque je sélectionne le même certificat que lorsque j'utilise le navigateur, l'appel est effectué, mais je reçois un message 403 Forbidden. 

Code  

$.ajax({
     type: "POST",
     xhrFields: {withCredentials: true},
     dataType: "xml",
     contentType: "text/xml; charset=\"utf-8\"",
     url: "https://www.myOtherServer.com/testfile.asp",
});

Des idées?

Modifier  

Le Access-Control-Allow-Credentials: true et le Access-Control-Allow-Origin sont correctement configurés. 

Information additionnelle  

Je commence à penser que cela a quelque chose à voir avec le type de contenu. Lorsque je le modifie en "text/html", je reçois une erreur 415, mais j’ai vraiment besoin d’envoyer du xml car c’est un serveur SOAP.

en-têtes de réponse  

Access-Control-Allow-Cred...    true
Access-Control-Allow-Head...    Content-Type, Origin, Man, Messagetype, Soapaction, X-Test-Header
Access-Control-Allow-Meth...    GET,POST,HEAD,DELETE,PUT,OPTIONS
Access-Control-Allow-Orig...    https://www.mywebsite.com
Access-Control-Max-Age  1800
Cache-Control   private
Content-Length  5561
Content-Type    text/html; charset=utf-8
Date    Wed, 19 Dec 2012 15:06:46 GMT
Server  Microsoft-IIS/7.5
X-Powered-By    ASP.NET

En-têtes de demande

Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language nl,en-us;q=0.7,en;q=0.3
Access-Control-Request-He...    content-type
Access-Control-Request-Me...    POST
Cache-Control   no-cache
Connection  keep-alive
Host    myhoast.com
Origin  https://www.mywebsite.com
Pragma  no-cache
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0
16
Rick Hoving

Ma meilleure hypothèse est qu'il s'agit d'un problème non pas avec votre Javascript mais avec votre configuration CORS. Avez-vous configuré votre serveur avec l'en-tête Access-Control-Allow-Credentials: true? http://www.w3.org/TR/cors/#access-control-allow-credentials-response-header

Notez également que, même lorsque l'en-tête allow-credentials est défini, le navigateur n'autorise pas les réponses aux demandes authentifiées si Access-Control-Allow-Origin est *, selon ces documents: https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS? Redirectlocale = fr-US & redirectlug = HTTP_access_control # Requests_with_credentials .

Edit: étant donné que les en-têtes CORS sont configurés correctement dans le terminal opérateur, le problème semble être que le serveur rejette les demandes OPTIONS avec un code d'état 403. Les requêtes OPTIONS (appelées "requête de contrôle en amont") sont envoyées avant certaines requêtes interdomaines (telles que les POST avec types de contenu application/xml), afin de permettre au serveur de notifier au navigateur les types de requêtes autorisés. Etant donné que le navigateur ne voit pas la réponse 200 qu'il attend de la demande OPTIONS, il ne déclenche pas la demande réelle POST.

10
Emily

fondamentalement, nous devons simplement écrire sur htaccess 

Header set Access-Control-Allow-Origin “*”

mais quand nous avons besoin de cookie, etc., nous avons dû ajouter un script sur votre code ajax et htaccess

j'écris à propos du cross domain XHR sur mon blog, http://blog.imammubin.com/cross-domain-xhr/2014/05/28/

espérons que cette aide ..

1
Mubin