2017-10-03 2 views
1

Je sais qu'il y a déjà quelques questions sur le sujet, mais je n'arrive pas à trouver une solution à mon problème.Angular 4: Pas de 'Access-Control-Allow-Origin', mais seulement avec les demandes de post

Je suis assez nouveau pour angulaire 4, et j'essaye de construire un service simple de création/mise à jour/suppression en utilisant une API personnalisée externe.

J'ai d'abord eu des problèmes avec CORS, mais cela a été corrigé en définissant l'en-tête "Access-Control-Allow-Origin" sur le côté serveur de l'API.

Maintenant, ma demande GET/PATCH et DELETE fonctionnent correctement, mais mon "POST" capte toujours une erreur.

Et voici la partie "impaire". Lorsque je consulte l'onglet "réseau" des outils de développement de google chrome, je vois à la fois les requêtes "OPTIONS" et "POST" (comme c'est censé le faire), mais seules les "OPTIONS" ont Control-Allow-Origin: http://localhost:3003 "dans les en-têtes de réponse.

Cependant, ils envoient tous les deux un code de réponse "200". (Voici some screenshots)

Pourquoi le poste se briserait-il alors que les autres fonctionnent bien?

Voici quelques exemples de code de mon service:

private headers = new Headers({'Content-Type': 'application/json'}); 

// works 
update(id: number, fields: any): Promise<Tag> { 
    const url = `${this.tagsUrl}/${id}`; 
    return this.http 
     .patch(url, JSON.stringify(fields), {headers: this.headers}) 
     .toPromise() 
     .then(res => res.json()) 
     .catch(this.handleError); 
} 

// doesn't work 
create(tagName: string, tagType: number): Promise<any> { 
    return this.http 
     .post(this.tagsUrl, JSON.stringify({name: tagName, tagType: tagType}), {headers: this.headers}) 
     .toPromise() 
     .then(res => res.json()) 
     .catch(this.handleError); 
} 

Merci à l'avance pour toute aide que vous pouvez apporter!

Michael

+2

Ceci n'est pas un problème lié à Angular. C'est le backend qui fait quelque chose de mal. Je recommande d'exécuter Angular sur le même hôte que votre backend. Donc, passez le ** preflight ** ça peut devenir une douleur. – Swoox

+0

Je vois. Je vais essayer de trouver une solution avec la personne en charge du backend alors. Mais comment se fait-il que le problème apparaisse uniquement avec "post" et pas d'autre méthode? –

+0

Ensuite, le poste n'est pas autorisé par le support. Je ne suis pas sûr si le contrôle en amont vient avec POST mais juste google et vous trouverez votre réponse. – Swoox

Répondre

1

J'ai finalement trouvé d'où venait le problème.

Il provient de la configuration de mon serveur local. J'ai dû décommenter cette ligne de mon php.ini:

always_populate_raw_post_data = -1 

Cela fonctionne maintenant comme prévu.

Nous vous remercions de votre aide.