2016-12-21 10 views
2

私はCORSにかなりの時間をかけて苦労してきましたが、完全な理解には至りません。ポストマン/フィドラー以内リクエストごとにプリフライトまたはCORSエラーが発生する

var settings = { 
    "async": true, 
    "crossDomain": true, 
    "url": "http://a.wunderlist.com/api/v1/lists", 
    "method": "GET", 
    "headers": { 
    "x-client-id": "{ID}", 
    "x-access-token": "{TOKEN}", 
    "cache-control": "no-cache" 
    }, 
    "data": "{\n\t\"revision\": 1,\n\t\"completed\": true\n}" 
} 

$.ajax(settings).done(function (response) { 
    console.log(response); 
}); 

結果を返す:以下のコードを使用して

-

私の最も単純な例

は、WunderlistのAPIを使用しています。しかし、基本的なサイトにそれを投げ、またはCodepenは、 405戻りますどちらか Pre-flight Warningまたは Invalid Request

私は緩く、あなたのサーバー側以内にそれを許す理解に来ているが、私はないと仮定しなければなりませんそこにあるすべてのサイトでPostmanなどを接続することができます。また、すべてのベンダーが私のドメインを許可することもできません。

APIコール内でCORS準拠をバイパスする方法はどうですか? CrossDomain、Cross-Origin Headerなど、私が読んだことをたくさん試してみましたが、常に同じ結果を得ています。

洞察?

+0

GETにはプリフライト制限がありません。しかし、POSTはそうです。 –

+3

@ Mike'Pomax'Kamermans - 間違った - カスタムヘッダーがプリフライトを誘発する –

+0

@JaromandaXこの制限を認識していないため、あなたの主張を確認する正式なリンクを見たいので、これを指示する仕様を挙げてください。 –

答えて

4

プレフライトにフラグが設定されている理由は、送信している余分なヘッダーです。 GETリクエストは、カスタムヘッダーを渡さない限り、プリフライトリクエストを使用する必要はありません。

  1. 最も簡単な解決策は、あなたが送信しようとしている、との要求はもはやCORSのプリフライトを必要とするものとしてフラグが立てられていない取得する必要がありますカスタムヘッダーを削除することです:あなたは2つのオプションがあります。

  2. サーバーコードをホストしている場合は、受信要求(サーバー側)で要求方法がOPTIONSかどうかを確認できます。もしそうなら、これはプリフライトであることを知っており、どのヘッダが受け入れ可能かをクライアントに知らせる応答で応答する必要があります。すべてのカスタムヘッダーを許可するには、プレフライト応答に'Access-Control-Request-Headers': '*'応答ヘッダーが含まれている必要があります。 https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORSパー

enter image description here

UPDATEhttps://developer.wunderlist.com/documentation/concepts/authorizationパーあなたは彼らに話をすることができるようにするためにアプリケーションを登録する必要があります。そのプロセスのどこかで、ドメインのプリフライトリクエストの送信が自動的に開始されるか、ヘッダーを設定できるようになります。

+0

wunderlistがCORSリクエストをすべてサポートしていると仮定します –

+1

@JaromandaX - 'x-access-token'ヘッダが必要で、そのAPIが使用可能であることを期待している場合、CORSをサポートする必要があります。 – cchamberlain

+1

まだ仮定:p –

関連する問題