2017-03-12 17 views
3

私はflow.chのJelasticからCloudantに移行しようとしています。ローカルでテストするときにpouchdbを使ってCORSエラーが発生しています(イオンサーブ)。CouchDB +資格情報+オリジンワイルドカードでCORSの問題

CouchDB以外のJelasticには他の設定がありますか?

XMLHttpRequestはhttp://xxx.flow.ch/xxxをロードできません。プリフライト要求に対する応答がアクセス制御チェックをパスしない:要求の認証モードが「インクルード」の場合、レスポンスの 'Access-Control-Allow-Origin'ヘッダーの値はワイルドカード '*'であってはなりません。 Origin 'http://localhost:8100'はアクセスできません。 XMLHttpRequestによって開始された要求の信任状モードは、withCredentials属性によって制御されます。

  1. 私はJelastic上のCouchDBを設定し、CORSを活性化しました。 enter image description here enter image description here

  2. CURLの作品を介した通常のアクセス。 CloudantからJelasticへのレプリケーションも同様に機能しました。

  3. は私が有効にChromeの拡張機能を使用しようとした "許可-Controlキーを許可-起源を:*"

+1

あなたが見ている問題の原因はcouchdbの欠点に関係していると思いますし、あなたが使っている事実はどちらの効果もありませんし、使用しているクライアントコード(それは、クライアントが資格証明付きのクロスオリジン要求を送信することだけであるので、それを行った他のクライアントコードを使用している場合は同じ問題に遭遇します)。 – sideshowbarker

答えて

3

couchdb docs unfortunately say this

あなたが設定することはできませんorigins = *credentials = trueオプションを同時に

資格情報を使用してクロスオリジン要求を行う場合couchdbを使用するには、originsの値を許可された起点の明示的なリストに設定する必要があります。例えば:これはCouchDBのよう提起しなければならないよう

[cors] 
origins = http://localhost, https://localhost, http://couch.mydev.name:8080 

なお、らしいです。 credentials = trueが設定されている場合、couchdbがすべての起点からの要求を許可するのをサポートしてはならない理由はありません。

多くの/ほとんどのWebサーバーシステムは、資格情報が含まれている場合、すべての起点からの要求を許可します。彼らがすべてそれを処理する方法は、Origin要求ヘッダーの値を取得し、実質的にそれをAccess-Control-Allow-Origin応答ヘッダーの値に戻すだけです。

これを行うサーバーコードを実装するのは簡単です。

しかし、実際にその不足を修正するのには不十分ですが、couchdbの管理者は、両方ともorigins = * + credentials = trueに設定しようとすると、少なくとも設定処理コードをハードエラーに修正する必要があります。

事があるので、ドキュメントに「あなたは同じでorigins = *credentials = trueオプションを設定することはできません」という声明は真実ではありません。明らかにあなたの両方を同時に(あなたの設定画面のキャプチャが証明するように)設定するだけで、システムが何らかの明白な警告/エラーを発行しないので、あなたはcouchdbをそのように設定しました。

+0

CouchDB固有ではありません。実際に[CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials)の仕様です。したがって、CORSの設定を持つサーバー側のシステムはこれを許可しません。 –

+0

couchdbに固有のことは、couchdbが自動的に応答の起点をエコーする方法がないということです。 CORSをサポートしている多くのまたはほとんどのサーバー側システムでは、その機能が提供されています。 – sideshowbarker

関連する問題