7

angular (バージョン 1.0.5) webapp からのアプリケーション キーとトークンを使用して Trello API を実行しようとしています。サーバーはCORSを処理するように正しく構成されているようです。enable corsからのhttp://test-cors.orgを使用したテスト リクエストは、期待どおりに機能します。

angular コントローラーの 1 つでポスト リクエストを実行すると、次のようになります。

$http.post(url).success(function(data) {
  $scope.server_resp = data;
});

Request header field Content-Type is not allowed by Access-Control-Allow-Headersエラーが発生します。(ただし、以下に示すように、Access-Control-Allow-Origin は「*」に設定されています)。このヘッダーが追加されるのはなぜですか?削除できますか?

XMLHttpRequest

生の XMLHttpRequest を使用して同じリクエストを行うと、成功します。XMLHttpRequest のヘッダーは次のとおりです。

Request Method:POST
Status Code:200 OK

Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:0
Host:api.trello.com
Origin:http://192.168.0.125:9000
Referer:http://192.168.0.125:9000/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22

Response
Access-Control-Allow-Methods:GET, PUT, POST, DELETE
Access-Control-Allow-Origin:*
Cache-Control:max-age=0, must-revalidate, no-cache, no-store
Content-Length:563
Content-Type:application/json
Date:Mon, 18 Mar 2013 02:49:37 GMT
Expires:Thu, 01 Jan 1970 00:00:00
X-Powered-By:Express
X-Server-Time:1363574977568

Angular $http.post

以下は、Angular によって開始されたリクエストのヘッダーです。ブラウザがプリフライト OPTIONS リクエストを行ったことに注意してください。

Request Method:OPTIONS
Status Code:200 OK

Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:accept, origin, content-type
Access-Control-Request-Method:POST
Connection:keep-alive
Host:api.trello.com
Origin:http://192.168.0.125:9000
Referer:http://192.168.0.125:9000/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22

Response
Access-Control-Allow-Methods:GET, PUT, POST, DELETE
Access-Control-Allow-Origin:*
Content-Length:0
Content-Type:text/html; charset=utf-8
Date:Mon, 18 Mar 2013 02:51:00 GMT
X-Powered-By:Express

上記の $http.post() コードが機能するように angular のリクエスト ヘッダーを設定する方法はありますか?

4

6 に答える 6

8

'content-type' ヘッダーはサーバーによって受け入れられず、デフォルトで Angular $http POST リクエストに追加されます ( $http docを参照)。$http 設定から削除してみることができます。コントローラーに $httpProvider を挿入すると、次のように動作する可能性があります。

delete $httpProvider.defaults.headers.post['Content-type']

「content-type」も試してみる必要があるかもしれませんが、使用するケースがわかりません。

于 2013-04-16T09:38:12.790 に答える
0

これは私のために働いた

$http({
      method  : "POST",
      url     : url,
      data    : $.param({key: 'value', key2 : 'value'}),
      headers : { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }
                })
于 2015-03-16T10:51:30.110 に答える
0

私はちょうど同様の問題に遭遇しました.問題は、URLが間違っていたことでした. ドキュメントを読み間違えたため、1/cards/actions/createCard に投稿していました。ヘッダーなどは正しいように見えますが、アクセス制御関連のエラーが発生しました。1/cards に投稿すると、私が欲しかったカードが作成されました。

于 2014-04-03T16:12:38.110 に答える