有一台服务器,我可以远程访问它。它是一台 Windows 机器,我用它将代码部署到暂存服务器(也运行在这台机器上),这样我们就可以在合并到开发分支之前测试我们的拉取请求。现在我正在手动执行此操作,但我已经编写了小批量脚本,可以让我自动执行该过程。所以基本上现在我只需要连接到这台计算机并运行此脚本,并为其提供一些参数。这仍然很麻烦,我想设置斜线命令https://api.slack.com/slash-commands 在我们团队的 Slack 中,以便能够直接从我们的团队 Slack 频道触发此脚本执行。因此,要做到这一点,我需要一个可从外部网络访问的 Web 服务器,以便在那里发送带有参数的 POST 请求。但是 a. 这台机器位于我们工作 VPN 后面 b. 那里没有可以接受此类请求的服务器
我有点迷茫了。即使我可以在那里设置一些服务器来监听这个请求,它仍然无法被外部互联网访问,对吧?或者会吗?但是将这样的端点暴露给 POST 请求难道不会有安全风险吗?
所以我有一个模糊的想法,可能有点傻,但我只想让有这方面经验的人告诉我去哪里找,给我指引方向。所以我在想,也许我可以设置一些服务(如守护进程),它会不断在这台远程计算机上运行,并时不时地检查其他服务器。就像用频繁的 GET 请求 ping 互联网上的某个服务器一样。这个其他服务器将是我的 slack 集成可访问的公共服务器。它将从 slack 接收带有我的参数的 POST 请求并存储它。然后,当我的远程计算机发出下一个 GET 时,它会回答我发送给它的内容。
这可能是个非常愚蠢的想法,但这是我唯一的想法。有什么建议吗?有什么意见吗?
答案1
免责声明 - 如果您正在寻找 Windows 的具体信息,那么这个答案没有(我是 Linux 系统管理员,所以我了解这些技术,并且在 Linux 环境中做过类似的事情 - Windows 也会类似)
有(至少)两种方法可以解决这个问题 - 根据您的时间范围,您拥有一个可以定期启动部署的外部服务器的想法是一个好主意 - 它在完成工作的同时提供了一定程度的网络隔离。
另一种方法是在您的 LAN 系统上运行 Web 服务器。您应该能够将标准 WAMP 堆栈添加到您的计算机(Windows、Apache、MySQL、PHP),然后编写一个 PHP 网站来处理 Web 请求、清理输入并执行脚本。您还需要将路由器上的适当端口转发/锁定到 Web 服务器 - 并且,出于安全考虑,可能还需要在其上启用 HTTPS。
选项 C 是按上述方式设置 WAMP,然后获取 LEB(低端盒)并在 LEB 上设置为 VPN 服务器,并使用 Web 服务器作为客户端。在 LEB 上设置 NAT、防火墙和端口转发以绕过内部 VPN 并允许流量按要求流动。您可能还需要将盒上的 MTU 设置为 1400 左右,因为您正在将 VPN 封装在 VPN 中。
答案2
阿贾克斯 Ajax 是发出异步 HTTP 请求的传统方式。可以使用 HTTP POST 方法发送数据,使用 HTTP GET 方法接收数据。让我们来看看并发出 GET 请求。我将使用 JSONPlaceholder,这是一个面向开发人员的免费在线 REST API,可返回 JSON 格式的随机数据。
要在 Ajax 中进行 HTTP 调用,必须初始化一个新方法 XMLHttpRequest(),指定 URL 的端点和 HTTP 方法(在本例中为 GET)。最后,我们使用 open() 方法链接 HTTP 方法和 URL 的端点,并调用 send() 方法来触发请求。
我们使用 XMLHTTPRequest.onreadystatechange 属性将 HTTP 响应记录到控制台,该属性包含在激活 readystatechanged 事件时将调用的事件处理程序。
const Http = new XMLHttpRequest(); const url = 'https://jsonplaceholder.typicode.com/posts'; Http.open("GET", url); Http.send(); Http.onreadystatechange = (e) => { console.log(Http.responseText) } 如果您查看浏览器的控制台,它将返回 JSON 格式的数据矩阵。但我们如何知道请求是否已发出?换句话说,我们如何使用 Ajax 处理答案?
onreadystatechange 属性有两个方法,readyState 和 status,允许我们验证请求的状态。
如果 readyState 等于 4,则表示请求已发出。readyState 属性有 5 个响应。在此处了解更多信息。
除了直接使用 JavaScript 进行 Ajax 调用之外,还有其他更强大的方法可以进行 HTTP 调用,例如 $.Ajax,这是一个 jQuery 方法。我现在将讨论它。