web-dev-qa-db-fra.com

En-tête CORS 'Access-Control-Allow-Origin' manquant

J'appelle cette fonction depuis mon formulaire asp.net et j'obtiens une erreur de suivi sur la console firebug lors de l'appel à ajax.

Demande d'origine croisée bloquée: la règle d'origine identique interdit la lecture de la ressource distante à http: //anotherdomain/test.json . (Raison: 'en-tête CORS' Access-Control-Allow-Origin 'manquant).

var url= 'http://anotherdomain/test.json';
        $.ajax({
            url: url,
            crossOrigin: true,
            type: 'GET',
            xhrFields: { withCredentials: true },
            accept: 'application/json'
        }).done(function (data) {
            alert(data);                
        }).fail(function (xhr, textStatus, error) {
            var title, message;
            switch (xhr.status) {
                case 403:
                    title = xhr.responseJSON.errorSummary;
                    message = 'Please login to your server before running the test.';
                    break;
                default:
                    title = 'Invalid URL or Cross-Origin Request Blocked';
                    message = 'You must explictly add this site (' + window.location.Origin + ') to the list of allowed websites in your server.';
                    break;
            }
        });

J'ai fait de manière alternative, mais toujours incapable de trouver la solution.

Remarque: je n'ai aucun droit de serveur pour effectuer des modifications côté serveur (API/URL).

44
Mayank Modi

Cela se produit généralement lorsque vous essayez d'accéder aux ressources d'un autre domaine.

Il s’agit d’une fonctionnalité de sécurité qui empêche tout le monde d’accéder librement aux ressources de ce domaine (auquel on peut accéder par exemple pour obtenir une copie identique de votre site Web sur un domaine pirate).

L'en-tête de la réponse, même s'il s'agit de 200OK, n'autorise pas d'autres origines (domaines, port) à accéder aux ressources.

Vous pouvez résoudre ce problème si vous êtes propriétaire des deux domaines:

Solution 1: via .htaccess

Pour changer cela, vous pouvez écrire ceci dans le fichier .htaccess du domaine demandé fichier:

    <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
    </IfModule>

Solution 2: positionnez correctement les en-têtes

Si vous définissez ceci dans l'en-tête de réponse du fichier demandé, vous autoriserez tout le monde à accéder aux ressources:

Access-Control-Allow-Origin : *

OR

Access-Control-Allow-Origin : http://www.my-domain.com

Paix et code;)

dans votre demande ajax, en ajoutant:

dataType: "jsonp",

après la ligne:

type: 'GET',

devrait résoudre ce problème .. 

espérons que cela vous aide

7
Pegasus Cozza

Vous devez modifier votre code côté serveur, comme indiqué ci-dessous

public class CorsResponseFilter implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext requestContext,   ContainerResponseContext responseContext)
    throws IOException {
        responseContext.getHeaders().add("Access-Control-Allow-Origin","*");
        responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");

  }
}
2
Ritesh Kumar

Vous devez avoir eu l'idée pourquoi vous obtenez ce problème après avoir parcouru les réponses ci-dessus.

self.send_header('Access-Control-Allow-Origin', '*')

Vous devez simplement ajouter la ligne ci-dessus dans votre côté serveur.

0
Raghvendra Singh