CouchdB Jquery Ajax POST CORS

Posted

技术标签:

【中文标题】CouchdB Jquery Ajax POST CORS【英文标题】: 【发布时间】:2013-06-30 17:47:11 【问题描述】:

我正在制作一个非常简单的 web 应用程序的原型。我今天安装了 Couch 1.3.1 并创建了一个数据库。我正在尝试使用来自客户端浏览器的 POST 将文档保存到我的本地沙发(本地主机: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,如 couchdb spec 中所述

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

我可以看到所有这些更改都反映在蒲团的配置文件中。我还用 curl 测试了数据库:

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

curl 工作得很好,但由于访问控制允许来源,我无法在浏览器中进行类似的 POST。我还缺少什么,或者我可以更改什么以使此 POST 成为可能?

【问题讨论】:

我不认为 jquery 支持 CORS,因为 IE7,8 和 9 支持的不是很好。你用的是什么版本的jQuery? 我使用的是 jquery 1.10.1 当您在浏览器 (Chrome) 中打开 url 时,您应该能够在网络选项卡中看到响应标头(按 F12 打开开发工具),确保它具有正确的 cors。我认为您已经在使用 Chrome,因为该错误看起来像是 Chrome 会给您的错误。只要您不使用 IE,JQuery 就应该与 cors 一起使用 是的,我看到带有预期标头的 OPTIONS “飞行前”请求,并且响应具有:'Allow: DELETE, GET, HEAD, POST' 'Cache-Control: must-revalidate' 但它给了我一个不允许的 405 方法 您应该尝试将headers = accept, authorization, content-type, origin 添加到您的CouchDB 设置的[cors] 部分。这就是 Firefox、Chrome 和 Safari 似乎需要的标头组合。 【参考方案1】:

做这个尝试跨域,不管是CORS还是JSONP都不理想。

由于您实际上控制了 Web 服务器实例和 couchdb 实例(我假设您对服务器拥有管理员权限),我建议使用反向代理将 couchdb 作为主 Web 应用程序的端点。

如果你使用 Apache mod_proxy 将允许你这样做,或者 nginx 是另一个很棒的 HTTP 反向代理服务器...插入一个配置指令,如:

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

会让你发帖到http://localhost:6789/couch_db/commute

【讨论】:

* 虽然 POC 应用程序可以直接发布到沙发上,但我还强烈建议使用 node.js、php 或其他一些快速设置服务器从您的演示文稿中插入至少一个其他抽象层通过 API 进行交易的语言,您可以将其用作数据库的看门人(验证、身份验证等)。

以上是关于CouchdB Jquery Ajax POST CORS的主要内容,如果未能解决你的问题,请参考以下文章

Jquery:使用 laravel 的跨域 ajax 'POST'

jQuery Ajax实例 ($.ajax_$.post_$.get)

jquery $.ajax $.get $.post的区别?

jquery $.ajax $.get $.post的区别?

jquery $.ajax $.get $.post的区别?

.NET (ApiController) / jQuery .ajax:从 POST 返回啥?