我在域api.example.com上有一个REST API服务。并希望将此API也用于我在www.example.com上的javascript ajax请求。

我使用CORS构建我的jQuery AJAX请求(GET,POST,PUT和DELETE),并且在firefox和chrome上一切正常。我在Opera上测试了脚本,没有加载任何内容。之后,我阅读了一些在线文章,并且必须意识到CORS不适用于Opera。

有哪些替代方法可以将数据获取并放入Rest服务? JSONp不起作用,因为我也需要其他HTTP动词(POST,PUT,DELETE)。

在同一域上创建“隧道” php脚本?但是比起,我有更多的网络流量和Serverload。

Client -> WWW-Server -> API-Server
API-Server -> WWW-Server -> Client

代替
Client -> API-Server
API-Server -> Client

我很高兴能与我分享每一个想法。

最佳答案

您可以使用第三方工具进行隧道传输,例如YQL

YQL可以充当中间人,以将您的网站上的调用连接到您的API。网络流量如下所示:

Client -> YQL -> API Server
在我看来,这很好。
YQL已经存在了很长时间。他们的free quotas很不错,正常运行时间也很不错:

而且,配额还在不断增加,雅虎!提供某些保证,如果他们决定关闭该服务,它们将保持运行一段时间,因此您将有时间进行迁移。今天有几个使用YQL的项目(我知道其中一项服务-TipTheWb.org)
另外,我建议您仅在必要时检测给定的浏览器是否支持CORS并回退到YQL:
function browserSupportsCors() {
    if ("withCredentials" in new XMLHttpRequest())
        return true; // most browsers
    else if (typeof XDomainRequest == "object")
        return true; // IE8+
    else // Opera currently here, but they'll get better pretty soon :)
    return false;
}
或者,如果您使用jQuery,则它具有整洁的 support 方法。
if (!$.support.cors) {
    // YQL fallback
}
也有很棒的tips to tweak YQL performance

感谢您关心Opera用户!

关于php - Ajax CORS的替代品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10580765/

10-11 12:59