我想知道是否有一个JavaScript库,它覆盖XMLHttpRequest
并允许透明地处理所有跨域请求,并通过我的同源服务器端代理无缝转发它们。
我想要的是拥有一个通用解决方案,可以与任何 JavaScript库一起使用来制作跨域请求(例如,使用跨域jQuery.ajax()
)。
使用此类库存在任何缺点(安全问题,HTTPS访问等)吗?
更新
如果这个库已经由某人创建,那么我只是不想重新发明轮子并再次处理所有角落情况。
答案 0 :(得分:6)
如果您只是需要将每个请求重定向到特定代理,您可以自己编写代码,
XMLHttpRequest.prototype.oldOpen = XMLHttpRequest.prototype.open;
var newOpen = function(args) {
//overwrite arguments changing the original url to the proxy one,
//and add a parameter/header to send the original url to the proxy
this.oldOpen(args);
}
XMLHttpRequest.prototype.open = newOpen;
由于代理位于同一个域中(如果您想允许x-domain代理请求,只需添加Access-Control-Allow-Origin标头),就不会发送远程域的任何cookie(您赢了)无论如何都要拥有它们,因为x-domains cookie被阻止 - 只要你没有输入带有标题Access-Control-Allow-Credentials的字段。
一些安全隐患相当明显:
更复杂(相同的域,完全支持cookie)代理实现甚至可以为重写头的跨域请求提供基本的会话处理:
代理向 www.remotedomain.com/querystring 发出请求,并以标题回复
Set-Cookie:name = value;路径= /;到期日,2012年12月31日23:59:59 GMT
客户端收到带有标题
的回复Set-Cookie:name = value;路径= / www.remotedomain.com;到期日,2012年12月31日23:59:59 GMT
在下一个请求中,客户端将发送cookie,代理将只将它们转发到远程服务
但我可能已经离题太多了。 :)
答案 1 :(得分:0)
我不会将JS用于此类需求......只需将所有AJAX调用发送到服务器上充当代理的PHP文件(或其他任何内容)。
它只需要接收您要调用的URL,POST或GET参数,然后将cURL发送到外部服务器。
作为回报,它将打印cURL请求的输出。