使用反向代理解决 CORS 问题

Posted

技术标签:

【中文标题】使用反向代理解决 CORS 问题【英文标题】:Solving CORS problems with reverse proxy 【发布时间】:2018-03-03 06:30:34 【问题描述】:

我编写了一个用于文档处理的 javascript Web 应用程序。我现在希望访问一些 Web 服务,例如 NLTK-server、TIKA-server 和 SOLR,以进行额外处理。

我可以使用 curl 访问所有这些的 REST 端点,但尝试转移到 javascript/jquery/Ajax 我遇到了许多人在这里询问的同源 (CORS) 问题。似乎解决方案是设置反向代理,虽然我理解了这个概念,但我所做的搜索提供的结果让我无法理解。与这个问题一样普遍(Web 应用程序访问 Web 服务),我不得不认为必须有一个简单的解决方案。我是开发人员,而不是系统管理员,阅读如何将 Jetty(例如)设置为反向代理是一种令人沮丧的练习。如果有人能指出我的“代理 101”教程,我将不胜感激,因为我的 google-fu 不够完善。

******************编辑************************

我正在使用嵌入式 GlassFish 服务器在 Netbeans 中进行开发(我知道这有点矫枉过正,但多年来一直使用它并且对它感到满意)。所以当执行时,我正在运行 localhost:8383。至于我正在点击的“服务”,我运行:

java -jar tika-server

它会启动 tika-server 监听端口 9998(也在 localhost 上),我可以使用 curl 提交/检索文档。但是,当我通过 ajax 向 Tika 提交文档时,出现 CORS 错误。 我能够访问 SOLR 服务器,但这仅仅是因为我修改了 AJAX 请求以包括:

wt:'json'

因为 Solr 支持 JSONP。但是,我不能假设我想要访问的每个 Web 服务都支持 JSONP。我正在使用 Tika 从 .pdfs、.docx 中提取文本……我过去在编写 Java 代码时已经这样做了,并且只包括了 jar,但事实证明,尝试迁移到 Web 前端很困难。

【问题讨论】:

你能添加你的后端服务器吗? 你能把你的问题分成段落吗?它将提高可读性。 这是一个错误的地方来要求一个产品的推荐,以满足您的一些未指定的要求。如果您尝试设置代理并需要受过良好教育的帮助,请展示您的尝试。 公开的开放 CORS 代理可能满足您的需求。有关代码示例和说明,请参阅 ***.com/questions/43871637/… 答案的如何使用 CORS 代理解决“No Access-Control-Allow-Origin header”问题部分我> 感谢您的帖子,我仍在阅读提供的链接(这导致了其他链接...)将在了解飞行前主题和代理讨论后返回。感谢答案,并在发布后续问题之前花时间消化。 【参考方案1】:

您可以用一行代码解决 cors 问题。假设您要启用来自 http://localhost:3000 的请求。

java -jar tika-server --cors http://localhost:3000

就是这样。

【讨论】:

以上是关于使用反向代理解决 CORS 问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在任何地方使用 Cors 来反向代理和添加 CORS 标头

CORS 使用带有 ARR 和 URL 重写的 IIS 作为反向代理

Nginx转发+反向代理实现跨域接口转发

非默认端口上的反向代理背后的 Spring Boot Cors

Nginx的反向代理跨域

由于 CORS,Nginx 反向代理后面的 Golang 应用程序不会接受 ajax 请求