跨域XHR / AJAX:可能的解决方法?

时间:2011-08-02 03:19:57

标签: ajax cross-domain xmlhttprequest

我只是想要进行跨域AJAX调用,因为到目前为止他们真的是一个PITA来处理。 这是我在网上任何地方都没有看到的解决方案,所以它可能(可能是)有缺陷/危险因为某种原因,我现在似乎无法看到,所以我转向你告诉我如果这是合法的:

今天如果您拥有一个域名www.foo.com,那么您就不能将XML Http请求说成www.bar.com。但是,如果您向foo.com发出XHR,然后通过cURL请求(或套接字或其他任何东西?)向bar.com询问该页面,该怎么办?

你通常设置你的xhr,无论是GET还是POST,你都可以将它发送到foo.com/remote-xhr.php并添加一个“url”参数,其中包含最初预期的URL和“params”参数包含参数。

remote-xhr.php解析“params”,并调用“url”,并“回显”响应。

这绝对是一种权衡,因为:1。你进行2次调用而不是其他解决方案(脚本标记hack / JSONP)和2.你失去了任何身份验证,因为客户端没有请求页面但是服务器是(您可以使用唯一ID,盐,任何东西来解决它);但是你有一个完全正常的XHR调用,可以适用于任何distand域!

我错过了什么?

3 个答案:

答案 0 :(得分:2)

我想你已经考虑了其中一些,但以防万一

  1. 如果您没有使用服务器端XHR传递进行任何类型的身份验证,您可能希望限制可以调用的URL,并解析params以获取任何奇怪的XSS机会。

  2. 延迟增加可能会给您的网络服务器带来压力,因为它可能会让请求/响应线程等待更长时间的cURL响应(除非您正在做一些额外的异步架构)。缓存cURL响应可能是首选,但根据您可能遇到的POST参数的变化数量,这可能不是一个选项。

  3. 我确定还有其他一些取决于你的应用程序,但我会继续说我正在做这样的事情,但仅仅是因为我支付了一个我不想直接暴露给我的外部API AJAX应用程序......所以我非常抽象地调用了这些调用,并将它们限制在几乎一个外部URL中。

答案 1 :(得分:1)

没错。我在我的AJAX请求中使用了这个技巧。

答案 2 :(得分:1)

这是可行的但请记住,您允许您的服务器由客户端告知要下载的数据。根据你的实现,它可能是相当无害的,但如果它没有安全可能很容易让你陷入困境(可能将其限制在非常特定的域?)。

例如,有人可能会向您的处理程序发送多个请求,例如,返回Linux ISO或非法的内容。

相关问题