Javascript 在使用JQuery(和Sinatra)进行POST时,如何避免跨源请求问题

Javascript 在使用JQuery(和Sinatra)进行POST时,如何避免跨源请求问题,javascript,jquery,ajax,knockout.js,sinatra,Javascript,Jquery,Ajax,Knockout.js,Sinatra,我有一个HTML+KnockoutJS+JQuery站点部署在我的机器上的Apache下,可访问http://daily/admin.html(或http://localhost/admin.html)。后端内置于Sinatra中,在rackup下运行,因此我可以在http://localhost:9292/api/items 问题是,如果我执行AJAX GET请求,我会得到: XMLHttpRequest cannot load http://localhost:9292/api/items.

我有一个HTML+KnockoutJS+JQuery站点部署在我的机器上的Apache下,可访问
http://daily/admin.html
(或
http://localhost/admin.html
)。后端内置于Sinatra中,在rackup下运行,因此我可以在
http://localhost:9292/api/items
问题是,如果我执行AJAX GET请求,我会得到:

XMLHttpRequest cannot load http://localhost:9292/api/items. Origin http://localhost is not allowed by Access-Control-Allow-Origin.
我的解决方案是在Sinatra应用程序中添加以下行:

headers['Access-Control-Allow-Origin'] = 'http://daily'
问题是,现在我无法使用Ajax发布帖子。我得到了以下信息:

Cross origin requests are only supported for HTTP.

JSONP是一种选择吗?我可以在POST中使用JSONP吗?

您可以在这种情况下使用JSONP

有了上面的代码,我想你错过了什么

headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept'
headers['Access-Control-Allow-Methods'] = 'POST, GET, PUT, DELETE, OPTIONS'

这些错误信息让我有些困惑。你在使用HTTPS吗?不,这是同一来源的政策,我猜是“仅用于HTTP”让我困惑。因为,那么,还应该支持什么呢?当然是HTTP,因为浏览器就是这么说的…=>奇怪的错误消息。嗯,那么POST应该与JSONP一起工作?我得试试。另一方面,我必须考虑如何部署它,这样我就不会有这个问题。不想使用Sinatra模板。。