2017-10-03 6 views
1

トピックにはいくつかの質問がありますが、私の問題の解決策を見つけることはできません。角4:いいえ、「アクセス制御が許可されたオリジン」ですが、ポストリクエストでのみ

私はアンギュラ4にはかなり新しいので、外部カスタムAPIを使用して簡単な作成/更新/削除サービスを構築しようとしています。

私はまずCORSに問題がありましたが、APIのサーバー側に「Access-Control-Allow-Origin」ヘッダーを設定することで修正されました。

私のGET/PATCHとDELETE要求はうまく動作しますが、私の "POST"はまだエラーをキャッチします。

ここに「奇妙な」部分があります。

google chromeのデベロッパーツールの[ネットワーク]タブを確認すると、「オプション」と「POST」の両方のリクエストが表示されますが、「オプション」だけが「アクセス」 - Control-Allow-Origin:http://localhost:3003 "を応答ヘッダーに追加します。

しかし、両方とも "200"応答コードを送信します。 (ここにはsome screenshots

なぜポストブレークは他のものがうまくいくのですか?

は、ここに私のサービスから、いくつかのコードサンプルです:あなたがもたらすことができる任意の助けを事前に

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); 
} 

ありがとう!

マイケル

+2

これは角度関連の問題ではありません。それは間違ったことをするバックエンドです。あなたのバックエンドと同じホストでAngularを実行することをお勧めします。だから、**プリフライト**をスキップすると、痛みを感じることがあります。 – Swoox

+0

私は参照してください。私はバックエンドの担当者と解決策を見つけようとします。 しかし、どのように問題は "投稿"と他の方法でのみ表示されますか? –

+0

これで、投稿はバッキングによって許可されません。私はプリフライトがPOSTに付いてくるだけなのかどうかは分かりませんが、Googleにはあなたの答えが見つかります。 – Swoox

答えて

1

私は最終的にどこから問題が発生したかを知りました。

これは私のローカルサーバー構成からのものです。私はphp.iniからこの行のコメントを外さなければならなかった:

always_populate_raw_post_data = -1 

これは意図したとおりに動作するようになりました。

ありがとうございました。

関連する問題