Je fais un appel ajax à un domaine différent. Mon membre de l'équipe a ajouté l'en-tête Access-Control-Allow-Origin à http://localhost:3000
.Pourquoi y a-t-il un problème de cors après l'ajout de l'en-tête Access-Control-Allow-Origin à l'arrière-plan?
$.ajax({
type: 'GET',
url: myurl,
beforeSend: function(xhr) {
xhr.setRequestHeader('Authorization', 'Bearer '+authorization);
},
crossDomain: true,
// xhrFields: {
// withCredentials: true
// },
contentType: 'application/json',
dataType: 'JSON',
success: function (response) {
if(time_one === 0){
main_result = response;
time_one++;
}
if(response.length==0){
alert("NO Data; Try a valid search")
$('.row3, #paging').hide();
$('.loading-gif').show();
$('#table').html('');
myCallBack(main_result);
}
else{
$('#table').html('')
myCallBack(response);
}
},
error: function(err) {
$('.loading-gif').hide();
$(".pageblocker").hide();
alert('Error: '+JSON.stringify(err));
myCallBack(main_result)
}
});
Si j'essaie de cette façon, je reçois 'Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.'
Je ne comprends pas pourquoi je reçois ce type d'erreur, même après avoir ajouté l'en-tête ACAO.
Et j'ai également remarqué une autre erreur si j'ajoute l'attribut 'withCredentials'. 'Response to preflight request doesn't pass access control check: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. Origin 'http://localhost:3000' is therefore not allowed access. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.
' Je ne comprends pas la différence entre ces deux erreurs.
Hmm, un peu confus, mais je vais passer au travers. Quelle était l'autre erreur, quand j'ajoutais l'attribut 'withCredentials'? Dans le mdn dev ntk, il est indiqué d'exposer l'en-tête. Je pense qu'exposer l'en-tête signifie que l'en-tête est visible pour tous, y compris le jeton d'authentification. –
"exposer un en-tête" signifie que * le navigateur * exposera un en-tête de réponse à votre code JavaScript. Le serveur envoie un ensemble complet d'en-têtes dans la réponse, et le navigateur obtient la réponse complète, y compris tous les en-têtes envoyés par le serveur. Mais le navigateur n'expose pas certains en-têtes à votre code JavaScript si le serveur n'a pas inclus dans la réponse un en-tête de réponse Access-Control-Expose-Headers qui inclut les noms d'en-tête particuliers auxquels votre code JavaScript frontend veut accéder – sideshowbarker
la réponse! Pour être honnête, c'était trop sur ma tête. Pourriez-vous me suggérer où regarder les bases de ceci pour que je puisse comprendre votre réponse? –