首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖跨域请求的XMLHttpRequest

覆盖跨域请求的XMLHttpRequest
EN

Stack Overflow用户
提问于 2013-02-02 18:03:41
回答 2查看 1.3K关注 0票数 2

我想知道是否有一个JavaScript库,它覆盖XMLHttpRequest并允许透明地处理所有跨域请求,并在我的相同来源的服务器端代理上无缝地转发它们。

我想要的是有一个共同的解决方案,它可以与any JavaScript库一起使用来进行跨域请求(例如跨域jQuery.ajax())。

使用这样的库有什么缺点(安全问题、HTTPS访问等等)?

更新:

如果这样的库已经是由某个人创建的,那么我只是不想重新发明轮子,再次处理所有的角落案例。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-02 18:23:19

如果您只需要将每个请求重定向到一个特定的代理,您只需自己编写它,就可以在

代码语言:javascript
复制
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域代理请求,只需添加访问控制-允许-原产地标头),它将不会被发送到远程域的任何cookie (无论如何,您不会拥有它们,因为x域cookie被阻塞-只要您不使用标头访问控制-允许-凭据进入字段)。

有些安全问题是相当明显的:

  • 您正在代理请求,因此,代理本身将有权访问所有东西,而不管加密是什么。
  • HTTPS处理将被要求到代理(如果远程url是安全的),并且客户端将不能(或者,在另一方面,如果要求代理)直接验证服务器证书。

更复杂的代理实现(相同的域,以完全支持cookie)甚至可以为跨域请求提供基本的会话处理,重写标头:

  1. 客户端请求www.emotedomain.com/querystring来自没有cookies的www.mydomain.com
  2. 请求被重写为proxy.mydomain.com/www.remotedomain.com/querystring
  3. 代理向www.emotedomain.com/querystring提出请求,该请求用头响应。 Set-Cookie: name=value;path=/;expires,31-2012年12月31日23:59:59格林尼治标准时间
  4. 客户端收到带有标头的响应。 Set-Cookie: name=value;path=/www.emotedomain.com;expires,2012年12月31日-2012年23:59:59 GMT
  5. 在下一个请求中,客户端将发送cookie,代理将将它们转发到远程服务。

但我可能已经消化太多了。:)

票数 6
EN

Stack Overflow用户

发布于 2013-02-02 19:28:20

我不会用JS来满足这种需要..。只需对充当代理的服务器上的PHP文件(或任何其他文件)进行所有AJAX调用即可。

它只需要接收您想要调用的url、POST或获取参数,然后向外部服务器发出一个cURL。

作为回报,它将打印cURL请求的输出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14664813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档