2017-09-21 1 views
0

J'essaye de frapper une API avec une requête GET via un appel ajax à l'intérieur d'un composant de réaction. J'obtiens une erreur que les en-têtes ne sont pas présents.Comment ajouter des en-têtes à l'application Web Firebase pour envoyer une requête GET à une API externe?

Le gars de support technique pour l'API m'a dit d'utiliser php pour faire écho au point de terminaison pour récupérer les en-têtes. Je l'ai fait dans le terminal et a ceci:

[0] => HTTP/1.1 200 OK 
[1] => Date: Thu, 21 Sep 2017 18:53:53 GMT 
[2] => Server: Apache/2.2.31 (Unix) mod_ssl/2.2.31 OpenSSL/1.0.1e-fips mod_bwlimited/1.4 
[3] => X-Powered-By: PHP/5.6.27 
[4] => Cache-Control: max-age=2592000 
[5] => Expires: Sat, 21 Oct 2017 18:53:53 GMT 
[6] => Vary: Accept-Encoding 
[7] => Connection: close 
[8] => Content-Type: text/json;charset=UTF-8 
[9] => Content-Language: en-US 

Mon application est une application simple qui réagissent accaparement des données financières en temps réel à partir d'une API en dehors. J'utilise seulement mon serveur - Firebase - pour l'authentification et le stockage de données d'utilisateur. Mais selon lui, puisque son API ne permet pas de requêtes directes client js, je dois utiliser mon serveur comme proxy.

Comment faire cela dans Firebase? Dans ma connexion Firebase?

// connection to our firebase database 
const base = Rebase.createClass({ 
    apiKey: string, 
    authDomain: url, 
    databaseURL: url 
}); 

Voici la requête ajax de base que je fais réagir. jQuery.ajax ({méthode : 'GET', url: apiUrl, succès: (item) => { this.props.addItem (point);} });

Merci!

EDIT

Voici mon erreur:

enter image description here

+0

Quel est le message d'erreur spécifique? Est-ce que l'API que vous appuyez supporte [CORS] (https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS)? Sinon, c'est la raison pour laquelle la demande échoue. –

+0

Merci. Je viens d'ajouter une image de mon erreur. – reknirt

Répondre

1

Lors d'une requête AJAX sur plusieurs domaines, l'hôte reçoit la demande doit prendre en charge Cross-Origin Resource Sharing. Ceci est fait pour empêcher les navigateurs d'aller chercher du contenu à partir d'URLs arbitraires qui n'ont pas été conçues avec ce type de sécurité en tête.

Si vous contrôlez l'API en question, vous aurez besoin d'ajouter un en-tête de la réponse telle que:

Access-Control-Allow-Origin: * 

Si vous ne contrôlez pas l'API, vous ne serez pas en mesure de faire l'appel AJAX directement et vous devrez à la place exécuter votre propre code backend à proxy à travers l'API. Vous pouvez le faire, par exemple, connecting your Firebase Hosting site to a Cloud Function.

+0

Merci. Les en-têtes que j'ai énumérés dans ma question sont-ils les en-têtes qui devraient être ajoutés à la demande de procuration? Il semble que les fonctions de cloud de Firebase utilisent juste express.js. Je ne suis pas sûr de ce que j'ai besoin d'inclure dans la demande. – reknirt

+1

Étant donné que vous effectuez la demande à partir d'un serveur et non du navigateur, vous n'avez pas besoin d'utiliser les en-têtes CORS. Vous devriez être capable de faire la demande normalement. CORS ne s'applique qu'aux navigateurs effectuant des requêtes sur plusieurs domaines. –