2016-04-08 1 views
0

J'essaie de faire une demande de base à un serveur actif (vérifié via google POSTMAN) dans une application emberJS. Mais quand je l'essaie, je reçois une erreur http 404. Ensuite, j'ai inspecté l'erreur, et j'ai vu que la requête d'origine qui vient du côté client est une requête OPTION au lieu de la requête GET. En outre, je me suis fixé deux en-tête, Accept et Content-Type être application/json et lors de l'inspection, l'inspecteur Printed ces en-têtes:L'adaptateur JSONAPI emberJS envoie une OPTION à la place de la requête GET

Accept:*/* 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:en-US,en;q=0.8 
Access-Control-Request-Headers:accept, content-type 
Access-Control-Request-Method:GET 
Connection:keep-alive 
Host:frontend.com 
Origin:http://localhost:4200 
Referer:http://localhost:4200/restaurant 
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36 

Maintenant, voici l'adaptateur

//Application.js adapter: 
import DS from 'ember-data'; 

export default DS.JSONAPIadapter.extend({ 
    host: 'http://server.com', 
    namespace: 'v1', 
    headers: { 
     "Accept": "application/json", 
     "Content-Type": "application/json" 
    } 
}); 

Est-il possible de transformer cette OPTION désactivée ou existe-t-il une solution de contournement? Je ne pensais pas que le brai était si bête, parce que c'est censé être l'une des principales choses que devrait faire emberJS - envoyer des requêtes. Toute aide est appréciée.

+0

Votre commentaire indique que vous croyez que Ember est buggé? Êtes-vous familier avec le fonctionnement des requêtes inter-domaines? (En supposant que votre code client et la propriété 'host' sont des hôtes différents) –

+1

Vous voudrez peut-être en apprendre davantage sur ce sujet, (BTW, cela n'a rien à voir avec Ember, c'est le fonctionnement des navigateurs): https: //developer.mozilla .org/fr-fr/docs/Web/HTTP/Access_control_CORS –

+1

J'étais trop stressé hier à cause de ce problème, donc je pensais que la braise était boguée. Je ne connaissais pas du tout CORS. Maintenant, je vais essayer d'autoriser CORS à l'arrière pour résoudre le problème. Merci :) – xpg94

Répondre

1

Ceci est "demande de contrôle en amont". Lors d'une demande d'origine croisée, le navigateur envoie d'abord une demande de contrôle en amont en envoyant une requête OPTION. Si la demande OPTION est satisfaite, la demande réelle sera envoyée au serveur.

Le "prévol" échoue dans de tels cas:

  • CORS n'est pas activé par le serveur
  • authentification/problèmes d'autorisation sont survenues
  • fonction de service
  • est introuvable (404)
  • Service fonction n'accepte pas l'en-tête que vous enverrez

Vous pouvez faire une recherche avec les mots-clés suivants: preflight, cors

+0

Ou peut-être que le serveur ne prend pas en charge la requête OPTIONS. Quelqu'un at-il des connaissances sur la désactivation de la demande de contrôle en amont dans les données d'ember? Le WP-REST-API ne semble pas le supporter (incroyablement) – Epirocks

+0

Vous ne pouvez pas le désactiver. Ceci est fait par le navigateur. – ykaragol

+0

En fait, vous pouvez arrêter le navigateur en définissant le type de contenu sur text/plain dans votre adaptateur de données Ember. C'est seulement pour le développement, donc je ne vois pas l'intérêt de soutenir OPTIONS. – Epirocks