L'url d'origine n'est pas autorisée par Access-Control-Allow-Origin
Je sais qu'il y a de nombreuses questions déjà au sujet de cette erreur. Mais, je ne suis pas encore en mesure de le faire fonctionner même après le réglage de l'en-tête
"Access-Control-Allow-Origin" : "*"
sur mon serveur.
Voici mon spring mvc méthode de contrôleur:
@RequestMapping(method=RequestMethod.GET, value="dummy/{num}")
@ResponseBody
public ResponseEntity<Result> dummy(@PathVariable String num)
{
int n = Integer.parseInt(num);
final Result result = new Result();
result.setAddition(n+20);
result.setMultiplication(n*20);
result.setSubtraction(n-20);
HttpHeaders headers = new HttpHeaders();
headers.add("Access-Control-Allow-Origin", "*");
ResponseEntity<Result> ent = new ResponseEntity<Result>(result,headers,HttpStatus.CREATED);
return ent;
}
Et voici mon appel AJAX de Jquery
$.ajax({
url: "http://localhost:8010/Probe_Rest_Service/test/dummy/9",
type: "get",
crossDomain: true,
dataType: 'json',
headers: {
"Content-type" : "application/json"
},
success: function(data){
console.log("It worked!");
alert(data);
},
error: function(){
//enable the inputs
alert("error");
}
});
J'ai essayé d'appeler mon api REST de dev-client http pour chrome et ça fonctionne très bien (l'en-tête de réponse a Access-Control-Allow-Origin:* définir) . Mais, quand je l'appelle de mon fichier html, j'obtiens l'erreur.
- Je utiliser JBoss pour mon api rest et tomcat pour l'hébergement de mon client page web
Remarque,
Faites-vous le fichier html de test à partir d'un serveur web à l'aide de google chrome?
Oui, c'est vrai
Si vous ouvrez la console chromée. ce que les en-têtes sont en train de revenir?
crossDomain: true,
n'est pas nécessaire.Faites-vous le fichier html de test à partir d'un serveur web à l'aide de google chrome?
Oui, c'est vrai
Si vous ouvrez la console chromée. ce que les en-têtes sont en train de revenir?
OriginalL'auteur CuriousCoder | 2013-03-19
Vous devez vous connecter pour publier un commentaire.
Puisque vous êtes l'envoi de la demande avec un type de contenu
application/json
le client est obligé de faire un SCRO pré-vol à la demande.La Spécification de la SCRO dit que tout type de contenu autres que
application/x-www-form-urlencoded
,multipart/form-data
, outext/plain
nécessite un pré-vol à la demande afin de déterminer si l'en-tête est autorisé.Par conséquent, vous aurez besoin de gérer la pré-vol à la demande (HTTP method =
OPTIONS
).Pour faire simple, laissez-le serveur répond avec l'en-tête:
Qui permettra à tous les en-têtes de requête.
Mise à JOUR
J'ai lu votre question et a trouvé quelque chose que je ne comprends pas: Pourquoi êtes-vous de l'envoi de la
Content-Type
en-tête, en premier lieu, pour une demande HTTP GET? Ce n'est pas correct.Juste enlever
et essayez de nouveau. Qui pourrait résoudre le problème!
Pour le POST, j'ai toujours l'origine de la croix d'erreur et je suis en train de le fixer par la manipulation de la pré-vol à la demande comme vous l'avez suggéré. Pour cela , entendez-vous, je dois juste envoyer une réponse vide avec en-tête HTTP réglé sur "Access-Control-Allow-d'en-tête: *" ?
OriginalL'auteur Mårten Wikström