gpt4 book ai didi

javascript - 为跨域请求覆盖 ​​XMLHttpRequest

转载 作者:行者123 更新时间:2023-11-29 16:16:32 33 4
gpt4 key购买 nike

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

我想要的是有一个通用的解决方案,它可以与任何 JavaScript 库一起使用来发出跨域请求(例如使用跨域jQuery.ajax())。

使用此类库是否有任何缺点(安全问题、HTTPS 访问等)?

更新:

如果这样的库已经由某人创建,那么我只是不想重新发明轮子并再次处理所有极端情况。

最佳答案

如果你只需要将每个请求重定向到一个特定的代理,你可以简单地自己编写,类似于

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域代理请求,只需添加Access-Control-Allow-Origin头),它不会发送任何远程域的cookie(你赢了反正没有它们,因为 x 域 cookie 被阻止 - 只要您不输入带有标题 Access-Control-Allow-Credentials 的字段)。

一些安全隐患是相当明显的:

  • 您正在代理请求,因此无论加密如何,代理本身都可以访问所有内容
  • 代理将需要 HTTPS 处理(如果远程 URL 是安全的)并且客户端将无法(或者,另一方面,如果需要代理,则不需要)直接验证服务器证书

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

  1. 客户端从 www.mydomain.com 请求 www.remotedomain.com/querystring 不带 cookie
  2. 请求被重写为proxy.mydomain.com/www.remotedomain.com/querystring
  3. 代理向 www.remotedomain.com/querystring 发出请求,该请求以 header 响应

    设置 Cookie:名称=值;路径=/; 2012 年 12 月 31 日星期一 23:59:59 GMT 到期

  4. 客户端收到带有 header 的响应

    设置 Cookie:名称=值;路径=/www.remotedomain.com; 2012 年 12 月 31 日星期一 23:59:59 GMT 到期

  5. 在下一个请求中,客户端将发送 cookie,代理会将它们转发到远程服务

但我可能跑题太多了。 :)

关于javascript - 为跨域请求覆盖 ​​XMLHttpRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14664813/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com