【问题标题】:Best way to submit/retrieve data from external server, when you have access to external server but not the same domain server当您可以访问外部服务器但不是同一个域服务器时,从外部服务器提交/检索数据的最佳方式
【发布时间】:2025-12-07 15:40:01
【问题描述】:

我正在开发一种 SDK 类型的东西,用于向我运行的服务提交数据(包括文件上传)。

我正在研究,并试图找出在不受 XSS 限制阻止的情况下提交数据并获得对外部服务器(我的服务器)的响应的最佳方式。

目前的设置是这样的:

客户托管服务器,并使用我的服务器端库。 他们生成一个客户端页面,从我的服务器加载所需的 JS。 客户端页面从我的服务器请求数据(如果它不是在页面加载时从 SDK 传递的),并将信息显示给用户。 然后用户触发一个事件,将数据(可能包括文件上传)提交到我的服务器(不是带有 SDK 库的本地服务器)。 我的服务器响应成功或失败,客户端 JS 适当地处理它。

一些注意事项: 我的服务器是我可以完全控制的私有 PHP 服务器。 虽然我可以通过客户的服务器路由所有数据(因为他们正在使用我的库),但这并不理想,因为它需要为客户进行更多设置,对最终用户来说速度较慢,并且处理文件上传是我想要的问题我服务器上的那些文件,而不是他们的。 我想也许文件上传输入可能在 iframe 中。这将允许直接上传到我的服务器吗? 由于客户使用我的库和 API 密钥,我可以通过在页面加载时将身份验证令牌传递给前端来验证客户端的请求,然后通过任何最终工作的通信方法将其传递给我的服务器。

我对架构的变化持开放态度,但这对我来说是理想的设置。我只是不确定哪种前端方法最适合实现这一点。

【问题讨论】:

  • 所以,您需要查看的一件事是 CORS - 其余的对于 SO 来说太宽泛了

标签: javascript php sdk xss


【解决方案1】:

如果您只需要发出 GET 请求,JSONP 就可以工作,但听起来您也需要进行 POST,因为您提到了文件上传。

对于您的情况,Cross-Origin Resource Sharing (CORS) 可能有效。简短的解释是,如果您使用XMLHttpRequest 向另一个域发出请求,浏览器将发送一个名为Origin 的额外标头。您的服务器需要使用名为 Access-Control-Allow-Origin 的附加标头进行响应,其值为 * 或浏览器在 Origin 标头中发送的值。使用 CORS 时存在一些细微差别和问题,因此我建议您阅读上面的链接以获得详尽的解释。

设置 CORS 后,您应该可以使用 XMLHttpRequestupload files

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
  • 我在回答中添加了更多细节。