2014-01-08 2 views
5

putやdeleteを使うとOPTIONSに変わります。私はサーバーフレームワークのためにexpressjsを使用しています。

クライアント:

$http({ 
    method: 'DELETE', 
    url: HTTP_URL + '/update/account', 
    params: { mail: mail } 
}); 

サーバー:プリフライトのHTTP OPTIONS要求がCORSのために作られるため

app.all('*', function(req, res, next) { 
res.header("Access-Control-Allow-Origin", "*"); 
res.header("Access-Control-Allow-Credentials", true); 
res.header('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE'); 
res.header("Access-Control-Allow-Headers", 
    'Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept'); 
next(); 
}); 

答えて

0

が、それは正常ではないですか? Access-Control-Allow-MethodsのリストでOPTIONSを許可する必要があるかもしれません...

+0

どのようなエラーが発生しているかを明確にしてください。 @natwallbankと同じように、ブラウザはpreflight HTTP OPTIONSによって実際のリクエストを行うためのアクセス権を要求します。 http://www.html5rocks.com/en/tutorials/cors/ – iuriisusuk

+0

これは、「単純ではない要求」を行っている場合に発生します.DELETEはそのような要求の1つです。 – iuriisusuk

+0

私はOPTIONSを自分のAccess-Control-Allow-Methodsに許可しましたが、同じことが起こります。 – puppeteer701

0

$ httpの代わりに$ resourceを使用することをお勧めします。

var appServices = angular.module('appServices', [ 
    'ngResource' 
]); 

appServices.factory('Account', ['$resource', function($resource) { 
    return $resource('/accountUpdate/:accountMail', {accountMail: '@accountMail}); 
}]); 

をし、その後、あなたのアカウントサービスを噴射することができるので、同様に、DELETE要求を行います:それはそう、あなたにいくつかの決まり文句が保存されます。

Account.remove({accountMail: '[email protected]'}); 

http://docs.angularjs.org/api/ngResource $リソース

1

ブラウザCORSプリフライトOPTIONSリクエストを自動的に送信しています。これは正しい動作であり、回避することはできません。サーバーが原点、メソッドなどを許可する場合、ブラウザーはDELETE要求をフォローアップします。

+0

Originで何を修正すればよいでしょうか? – puppeteer701

+0

私はあなたがブラウザはDELETE要求を送信しません。 OPTIONS要求でサーバーに送信される特定のヘッダーと、OPTIONS応答でサーバーによって特定のヘッダーが戻されるのは何ですか?その情報を使って、問題の内容を明らかにする必要があります。リクエスト/レスポンスを監視するには、Fiddlerのようなツールを使用することができます。 –

関連する問題