2016-08-10 9 views
1

Angular2でhttp putを使用できない理由を理解できません。 Angular2 Http PUTが間違ったRequestMethodを返す

私は、HTTPポストをやっているときは、それが正しいリクエストメソッドを与える

enter image description hereしかし

、私が使用している場合、HTTP置く:

enter image description here

:それはリクエストメソッドなどのオプションを与えます

私はこれが何であるかを意味しましたか?ここで

は、私はポストのため使用している方法である:ここでは

let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' }); 
    let options = new RequestOptions({ headers: headers }); 
    var body = 'amount=' + 12; 
    this.http.post(this.host + '/orders', body, options) 
    .map(res => res.json()) 
    .subscribe(data => { 
    resolve('success') 
    }); 

は、私がPUTのために使用している方法です。

let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' }); 
    let options = new RequestOptions({ headers: headers }); 
    let body = 'amount=' + 12; 
    this.http.put(this.host + '/orders/1', body, options) 
    .map(res => res.json()) 
    .subscribe(data => { 
    resolve('success') 
    }) 

答えて

1

CORSのためだと思います。 Angular2とは関係ありません。あなたのPOSTメソッドの場合は、簡単なメソッドが実行されます。 PUTの場合、あなたはプリフライトのケースに入っているので、追加のリクエスト(OPTIONSの1つ)がブラウザによってフードの下に含まれます。そして、このOPTIONSメソッドには404があるようです。

シンプルリクエスト:リマインダーとして

。この使用例は、HTTPのGET、HEAD、POSTメソッドを使用する場合に適用されます。 POSTメソッドの場合、text/plain、application/x-www-form-urlencodedおよびmultipart/form-dataの値を持つコンテンツタイプのみがサポートされています。

プリフライトリクエスト。 「単純要求」ユースケースが適用されない場合、クロスドメイン要求のコンテキストで何ができるかを確認するために、最初の要求(HTTP OPTIONSメソッドを使用)が行われます。

私はこれらの記事は、あなたが興味ことができると思う:

+0

しかし、私はまた、私のサーバーでは、それが正常に動作し、ポストマンと更新方法でテストし、私はこれらのすべてを有効にしました:res.setHeader( 'Access-Control-Allow-Origin'、 '*'); res.setHeader( 'アクセス制御を許可するメソッド'、 'GET、POST、OPTIONS、PUT、PATCH、DELETE'); res.setHeader( 'アクセス制御の許可ヘッダー'、 'X-Requested-With、content-type'); res.setHeader( 'アクセス制御許可の認証情報'、true)。 – Vicheanak

+0

はい、郵便番号はChromeのプラグインを使用しているため、制限を少なくすることができます。これはサーバー側のCORSヘッダーに最適です。 CORSのプリフライトリクエストに関してはそれだけでは不十分です。明示的なアプリケーションでは、 'cors'モジュール(https://github.com/expressjs/cors#enabling-cors-pre-flight)(グローバルにまたはリクエストごとに)を使用する必要があります。 –

関連する問題