我在域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/