J'ai appelé une API tierce en utilisant Jquery AJAX. J'obtiens l'erreur suivante dans la console:
Cross-Origin Read Blocking (CORB) a bloqué la réponse cross-origin MY URL avec application / json de type MIME. Voir https://www.chromestatus.com/feature/5629709824032768 pour plus de détails.
J'ai utilisé le code suivant pour l'appel Ajax:
$.ajax({
type: 'GET',
url: My Url,
contentType: 'application/json',
dataType:'jsonp',
responseType:'application/json',
xhrFields: {
withCredentials: false
},
headers: {
'Access-Control-Allow-Credentials' : true,
'Access-Control-Allow-Origin':'*',
'Access-Control-Allow-Methods':'GET',
'Access-Control-Allow-Headers':'application/json',
},
success: function(data) {
console.log(data);
},
error: function(error) {
console.log("FAIL....=================");
}
});
Lorsque j'ai vérifié Fiddler, j'ai obtenu les données en réponse mais pas dans la méthode de réussite Ajax.
Sil te plait aide moi.
Réponses:
Vous effectuez une requête JSONP, mais le serveur répond avec JSON.
Le navigateur refuse d'essayer de traiter le JSON comme JSONP car ce serait un risque pour la sécurité. (Si le navigateur n'essayer de traiter le JSON comme JSONP il serait alors, au mieux, échec).
Consultez cette question pour plus de détails sur ce qu'est JSONP. Notez que c'est un mauvais hack pour contourner la politique de même origine qui était utilisée avant que CORS ne soit disponible. CORS est une solution beaucoup plus propre, plus sûre et plus puissante au problème.
Il semble que vous essayez de faire une demande d'origine croisée et que vous jetez tout ce à quoi vous pouvez penser dans une pile massive d'instructions contradictoires.
Vous devez comprendre le fonctionnement de la politique de même origine.
Consultez cette question pour un guide détaillé.
Maintenant, quelques notes sur votre code:
Supprimez ça.
Enlève ça. (Vous pouvez faire en sorte que le serveur réponde avec JSONP à la place, mais CORS est meilleur).
Ce n'est pas une option prise en charge par jQuery.ajax. Enlève ça.
C'est la valeur par défaut. À moins que vous ne le définissiez sur true avec ajaxSetup, supprimez-le.
la source
https://www.chromium.org/Home/chromium-security/corb-for-developers
J'ai dû nettoyer le cache de mon navigateur, je lisais dans ce lien, que, si la demande obtient une réponse vide, nous obtenons cette erreur d'avertissement. Je recevais du CORS à ma demande, et donc la réponse à cette demande est devenue vide, tout ce que j'avais à faire était de vider le cache du navigateur, et le CORS s'est enfui. Je recevais CORS parce que le chrome avait enregistré le numéro de PORT sur le cache, le serveur accepterait simplement
localhost:3010
et je le faisaislocalhost:3002
, à cause du cache.la source
Renvoyez la réponse avec l'en-tête 'Access-Control-Allow-Origin: *' Vérifiez le code ci-dessous pour la réponse du serveur Php.
la source
Content-Type: application/json
dedans. Le code de l'OP doit déjà le faire.Vous devez ajouter CORS côté serveur:
Si vous utilisez nodeJS, alors:
Vous devez d'abord installer
cors
en utilisant la commande ci-dessous:Maintenant, ajoutez le code suivant au fichier de démarrage de votre application comme (
app.js or server.js
)la source
Ce n'est pas clair d'après la question, mais en supposant que cela se passe sur un client de développement ou de test, et étant donné que vous utilisez déjà Fiddler, vous pouvez demander à Fiddler de répondre avec une réponse d'autorisation:
AutoResponder
ongletAdd Rule
et modifiez la règle pour:Method:OPTIONS http://localhost
*CORSPreflightAllow
Unmatched requests passthrough
Enable Rules
Quelques remarques:
la source
Si vous travaillez sur localhost, essayez ceci, celui-ci est la seule extension et méthode qui a fonctionné pour moi (Angular, uniquement javascript, pas de php)
https://chrome.google.com/webstore/detail/moesif-orign-cors-changer/digfbfaphojjndkpccljibejjbppifbc/related?hl=fr
la source
avez-vous essayé de changer le
dataType
dans votre demande ajax dejsonp
àjson
? cela l'a corrigé dans mon cas.la source
Dans une extension Chrome, vous pouvez utiliser
pour réécrire les en-têtes de réponse du serveur. Vous pouvez remplacer un en-tête existant ou ajouter un en-tête supplémentaire. C'est l'en-tête que vous voulez:
https://developers.chrome.com/extensions/webRequest#event-onHeadersReceived
J'étais coincé sur les problèmes CORB, et cela m'a résolu.
la source
Les en-têtes de réponse sont généralement définis sur le serveur. Réglez
'Access-Control-Allow-Headers'
à'Content-Type'
côté du serveurla source
Cross-Origin Read Blocking (CORB), un algorithme par lequel les charges de ressources croisées douteuses peuvent être identifiées et bloquées par les navigateurs Web avant qu'ils n'atteignent la page Web. vers une page Web.
Assurez-vous d'abord que ces ressources sont servies avec un "
Content-Type
" correct , c'est-à-dire pour le type JSON MIME - "text/json
", "application/json
", le type HTML MIME - "text/html
".Deuxièmement: réglez le mode sur cors, c'est-à-dire
mode:cors
La récupération ressemblerait à quelque chose comme ça
références: https://chromium.googlesource.com/chromium/src/+/master/services/network/cross_origin_read_blocking_explainer.md
https://www.chromium.org/Home/chromium-security/corb-for-developers
la source
Il y a un cas particulier qui mérite d'être mentionné dans ce contexte: Chrome (au moins certaines versions) vérifie les pré-éclairages CORS en utilisant l'algorithme mis en place pour CORB . OMI, c'est un peu idiot car les pré-éclairages ne semblent pas affecter le modèle de menace CORB, et CORB semble conçu pour être orthogonal à CORS. De plus, le corps d'un contrôle en amont CORS n'est pas accessible, il n'y a donc pas de conséquence négative juste un avertissement irritant.
Quoi qu'il en soit, vérifiez que vos réponses de contrôle en amont CORS (réponses de la méthode OPTIONS) n'ont pas de corps (204) . Un 200 vide avec le type de contenu application / octet-stream et la longueur zéro fonctionnait bien ici aussi.
Vous pouvez confirmer si c'est le cas que vous frappez en comptant les avertissements CORB par rapport aux réponses OPTIONS avec un corps de message.
la source
Il semble que cet avertissement se soit produit lors de l'envoi d'une réponse vide avec un 200.
Cette configuration dans mon
.htaccess
affichage de l'avertissement sur Chrome:Mais en changeant la dernière ligne en
résoudre le problème!
la source
J'ai eu le même problème avec mon extension Chrome. Lorsque j'ai essayé d'ajouter à mon option manifeste "content_scripts" cette partie:
Et j'enlève l'autre partie de mes "permis" manifestes:
Ce n'est que lorsque je le supprime que CORB sur l'une de mes demandes XHR disparaît.
Pire encore, il y a peu de demandes XHR dans mon code et un seul d'entre eux commence à obtenir une erreur CORB (pourquoi CORB n'apparaît pas sur d'autres XHR, je ne sais pas; pourquoi des changements manifestes ont causé cette erreur, je ne sais pas). C'est pourquoi j'ai inspecté tout le code encore et encore de quelques heures et j'ai perdu beaucoup de temps.
la source
Si vous le faites en safari, cela ne prend pas de temps, activez simplement le menu développeur dans Préférences >> Confidentialité, et désélectionnez "Désactiver les restrictions d'origine croisée" dans le menu de développement. Si vous voulez uniquement local, il vous suffit d'activer le menu développeur et de sélectionner «Désactiver les restrictions de fichiers locaux» dans le menu de développement.
et dans Chrome pour OSX, ouvrez Terminal et exécutez:
Pour Linux:
De plus, si vous essayez d'accéder à des fichiers locaux à des fins de développement comme AJAX ou JSON, vous pouvez également utiliser cet indicateur.
Pour Windows, allez dans l'invite de commande et allez dans le dossier où se trouve Chrome.exe et tapez
Cela devrait désactiver la même politique d'origine et vous permettre d'accéder aux fichiers locaux.
la source
J'ai rencontré ce problème car le format de la réponse jsonp du serveur est incorrect. La réponse incorrecte est la suivante.
Le problème est que l'objet à l'intérieur
callback
doit être un objet json correct, au lieu d'un tableau json. J'ai donc modifié du code serveur et changé son format:Le navigateur a accepté la réponse après la modification.
la source
callback(["apple", "peach"])
est parfaitement valide JSONP, et a bien fonctionné lorsque je l'ai testé à travers les origines.Essayez d'installer l'extension "Moesif CORS" si vous rencontrez un problème dans Google Chrome. Comme il s'agit d'une demande d'origine croisée, Chrome n'accepte pas de réponse même lorsque le code d'état de la réponse est 200
la source