在现在(2011年),跨域AJAX使用REST是个坏主意吗?

4 投票
1 回答
844 浏览
提问于 2025-04-17 05:03

我正在写一个REST服务,目的是让网页应用、桌面客户端、手机客户端等都能通过REST接口来访问。这个服务的想法是把像笔记、日历事件等对象存储在一个共同的结构中,并提供一些HTTP方法来创建、更新和删除这些文档,所以这应该是一个很适合REST接口的应用场景。

我的计划是把REST服务器放在某个地方,而网页应用则在其他服务器上使用这些数据,因此我需要进行跨域请求,这在安全方面有一些特别的限制(可以参考这篇文章)。我还想做一些实时更新的网页功能。

现在我已经做了很多研究,了解了什么是CORS,并尝试使用tornado和jQuery.ajax,但到目前为止,我开始怀疑我想要的设置可能来得太早了。我只在Firefox上试过(3.6和9版本),但已经遇到了一些问题:

  • HTTP认证在jQuery.ajax()中似乎不工作(即使设置了withCredentials)
  • 有些浏览器根本不支持CORS(根据维基百科的说法)
  • 至少有一个Firefox插件(RequestPolicy)导致CORS完全不工作

我明白CORS/AJAX是一个可能的解决方案,但似乎存在太多限制,难以实际使用。之前做过这类事情的人,你们觉得我应该继续尝试,希望这些问题将来会被某个人在某个时候解决吗?还是说现在进行跨域REST/AJAX的方法还为时尚早?对于我的计划,你们会选择什么替代方案?因为我正在开始一个新项目,我希望能做到干净利落,不用JSONP、代理或其他变通方法,但如果没有其他选择,我也会考虑这样做。

谢谢大家的回答!

1 个回答

1

你可以用标准的JSON格式来提供响应,比如在浏览器支持CORS的情况下;如果不支持CORS,那就可以用JSONP。这不会影响你输出的内容。

我觉得CORS单独使用并不太靠谱,因为IE浏览器8及以下版本不支持它。同时,JSONP也没有什么问题,它是很多大公司使用的技术,比如Facebook API、Twitter API、Flickr API,还有谷歌的各种API。

总之,你说的没错;现在CORS的使用还不够广泛,所以还不能普遍应用。

撰写回答