javascript - 如何在Web浏览器中代理所有XMLHttpRequest?

标签 javascript ajax firebase google-chrome xmlhttprequest

我正在使用 Google Firebase,但不幸的是,Google Firebase 对某些国家/地区实现了制裁,这意味着他们必须使用代理(或 VPN)才能访问该网站。

有什么方法可以为每个客户端请求设置代理设置,以便他们无需 VPN 即可自由访问 Firebase?

我知道有 Node.js 的选项,但我正在寻找 Web 浏览器解决方案。火狐有这个 proxy settings ,Google Chrome 浏览器也有一些选项 extension开发人员,但我需要一个仅在网页中工作的解决方案,这意味着当用户访问我的网站时,他/她不需要设置代理来访问 Firebase。

示例:当用户从(例如)叙利亚或苏丹访问我的网站时,他们不需要为浏览器设置 VPN,因为我已经在我的网站中进行了一些代理配置

最佳答案

简短回答:您不能仅在网站上进行操作。

更长的答案/解释:

I know there are options for Node.js,

很好...这可以工作。在 Heroku 等上部署您自己的 Node.js 服务器,该服务器将请求代理到 Firebase。

but I'm looking for a web browser solution. Firefox has this proxy settings, and Google Chrome also has some options for extension developers, but

这也可行,但我相信您已经考虑过...这将依赖于最终用户在尝试访问您的网站之前安装这些扩展。

I need a solution that works just in a web page,

不。不可能。 Google 服务器不会响应来自受制裁国家/地区的任何请求。如果请求来自不允许的国家/地区,Firebase 服务器将不会响应您的网站 - 而是会响应 403。Firebase 不会发送该网站。您的网站不会发送给客户。无论您的网站包含什么内容,它都永远不会首先发送给这些最终用户。

即使您将网站托管在其他地方,并且仅使用 Firebase 数据库,它仍然无法正常工作 - 原因相同。当 Firebase 服务器收到来自在受制裁国家/地区运行的浏览器的请求时,它们会以 403 响应。

问题就变成了:如何使请求看起来像是来自受制裁国家/地区之外、仅来自网站?

当您只控制网站本身时,您就不能这样做。出于最终用户保护的目的,请求/响应周期的这一部分由浏览器处理。浏览器不会向网页公开该功能。

如果您想为用户处理所有事务,而不需要他们使用 VPN(桌面或浏览器),您唯一的选择就是将请求发送到其他非 Google 服务器(< em>例如您在 Heroku 等上托管的 Node.js 服务器),然后代表它们向 Firebase 发出请求,获取响应,然后响应客户端。这样,对于 Firebase 服务器来说,请求看起来像是来自 X* 位置。

*X:Heroku 服务器运行的位置。

关于javascript - 如何在Web浏览器中代理所有XMLHttpRequest?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58123007/

相关文章:

asp.net - 在MVC4中如何实现这个功能呢?

node.js - 使用 Cloud Functions 从 onCreate 触发器检索 Firestore 文档

javascript - 重新加载 Bootstrap 表刷新并更改设置

javascript - react : Dynamic row failed

javascript - 异步 JavaScript 轮询使用 setTimeout 或 setInterval 卡住浏览器

php - 如何在提交表单后自动创建客户表

firebase - 在 Firebase 9.0.0 上取消订阅的正确方法

android - 无法解析 Firebase 身份验证 15.0.0

javascript - 动态创建异步函数

javascript - Three.js 中带有线框的立方体