4

非常に単純な webapp のプロトタイプを作成しています。今日、Couch 1.3.1 をインストールして、データベースを作成しました。localhost でもクライアント ブラウザーから POST を使用してローカル カウチ (localhost:5984) にドキュメントを保存しようとしていますが、ポート (6789) が異なります。

var dbIp = "http://localhost:5984/commute";
var data = {state:0,timestamp:"faketime"};
$.ajax({
  type: 'POST',
  crossDomain: true,
  contentType: "application/json",
  url: dbIp,
  data: data,
  success: function(result) {
    console.log(result);
  }
});

私は得る:

XMLHttpRequest cannot load http://localhost:5984/commute-tracker. Origin http://localhost:6789 is not allowed by Access-Control-Allow-Origin.

私は local.ini を変更して CORS を有効にしました

[httpd]
enable_cors = true
[cors]
origins = *
[cors]
methods = GET, POST, PUT, DELETE

これらの変更はすべて、futon の構成ファイルに反映されていることがわかります。また、curl を使用してデータベースをテストしました。

curl -X POST localhost:5984/commute -H "Content-Type: application/json" -d '{"tags":"sure","name":"made it"}'

curl は問題なく動作しますが、Access Control Allow Origin が原因で、ブラウザーで同様の POST を作成できません。他に何が欠けていますか、またはこの POST を可能にするために何を変更できますか?

4

1 に答える 1

0

CORSであろうとJSONPであろうと、クロスドメインを実行しようとするのは理想的ではありません。

あなたは実際にウェブサーバーインスタンスとcouchdbインスタンスの両方を制御しているため(サーバーに対する管理者権限を持っていると仮定しています)、メインのウェブアプリのエンドポイントとしてcouchdbを提供するためにリバースプロキシを使用することをお勧めします.

Apache mod_proxyを使用している場合は、これを行うことができます。または、nginx は別の優れた HTTP リバース プロキシ サーバーです...次のような構成ディレクティブを挿入します。

ProxyPass /couch_db/ http://www.localhost:5984/(mod_proxy 用)

に投稿させてくださいhttp://localhost:6789/couch_db/commute

于 2015-01-10T16:41:09.517 に答える