Comment faire pour résoudre les “Cross-Origin Demande Bloqué” erreur?
J'ai un problème avec la SCRO. J'ai déjà chercher beaucoup de temps dans google pour résoudre ce problème, mais ne fonctionne pas.
- Je faire un popup à la procédure de dialogue avec l'extérieur popup.js fichier. Ce fichier js peut montrer dialogue pop-up quand j'ai appeler ce fichier à partir de n'importe quelle page dans un même projet(myweb.com
).
Mais le problème est que lorsque j'appelle ce fichier js à partir d'un autre site comme celui-ci,
<script type="text/javascript" src="http://www.myweb.com/admin/popup.js"></script>
<script> document.addEventListener("DOMContentLoaded", function(event) {
create_popup();
});
</script>
J'obtiens cette erreur,
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://www.myweb.com/admin/get_data.php?t=0.4987759219367701.
(Reason: missing token 'access-control-allow-methods' in CORS header 'Access-Control-Allow-Headers' from CORS preflight channel).
Dans mon fichier js-je exécuter get_data.php fichier en utilisant ajax. Voici mon fichier js,
function create_popup() {
var xmlhttp = new XMLHttpRequest();
if("withCredentials" in xmlhttp){
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var arr = JSON.parse(xmlhttp.responseText);
alert(arr);
}
xmlhttp.open("GET","http://www.myweb.com/admin/get_data.php?t="+Math.random(),true);
xmlhttp.setRequestHeader( "Pragma", "no-cache" );
xmlhttp.setRequestHeader( "Cache-Control", "no-cache" );
xmlhttp.setRequestHeader("Access-Control-Allow-Origin","*");
xmlhttp.setRequestHeader("Access-Control-Allow-Credentials", "true");
xmlhttp.setRequestHeader("Access-Control-Allow-Methods", "GET");
xmlhttp.setRequestHeader("Access-Control-Allow-Headers", "Content-Type");
xmlhttp.send();
}else{
alert("error");
console.log("error");
}
}
Ce fichier js est que le travail dans myweb.com
. Mais quand j'essaie d'appeler ce js à partir d'un autre site, je reçois de la SCRO erreur.
Et j'ai aussi ajouter un en-tête de la SCRO en get_data.php fichier comme ceci,
header("Access-Control-Allow-Origin:*");
header("Access-Control-Allow-Methods:GET");
header("Access-Control-Allow-Headers:Content-Type");
header("Access-Control-Allow-Credentials:true");
Mais ça ne fonctionne pas. Je ne suis pas sûr d'en-tête de déclaration est ok ou pas en js et php fichier. J'ai essayer beaucoup de choses, mais je ne sais pas comment le résoudre.
Et j'ai déjà essayer dans le navigateur google chrome avec Allow-Control-Allow-Origin
extensions. Mais je ne peux pas voir une fenêtre d'avertissement et d'erreur. Je ne sais pas quelle partie est faux. J'ai beaucoup apprécier pour votre suggestion.
- PAS set
Access-Control-*
les en-têtes de la requête, l'ajout de "personnalisé" en-têtes de causes pré-vol, et de votre côté serveur permet seulementGET
et probablement ne gère pas les pré-vol correctement de toute façon - Lorsque vous affichez la requête dans l'onglet réseau, voyez-vous vos en-têtes?
- tu veux dire j'ai besoin de l'enlever. Droit?
- oui, je peux voir ma tête.
Vous devez vous connecter pour publier un commentaire.
Cela montre que le contrôle en amont est de ne pas en
de contrôle en amont ne se produit que dans certaines conditions, dont l'une est lorsque vous ajoutez "personnalisé" en-têtes de la requête
comme vous sont incorrectement ajouter des en-têtes de votre demande (en-têtes qui n'ont un sens que les en-têtes de réponse de toute façon)
un contrôle en amont est déclenchée (comme ils sont personnalisé en-têtes) - votre serveur ne gère pas (n'autorise même pas) de contrôle en amont, d'où le contrôle en amont d'erreur
Supprimer ces setRequestHeader lignes, et il devrait travail
it doesn't work
... même message d'erreur? autre erreur? il l'a fait reprogrammer votre MAGNÉTOSCOPE? Le diable est dans le détail'access-control-allow-methods'
dans'Access-Control-Allow-Headers'
de voir que vous ne devriez plus être paramètre d'en-tête si vous suivez la bonne réponse