J'ai suivi les étapes suivantes:
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
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.
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 ..