【发布时间】:2017-11-17 19:43:05
【问题描述】:
当您不知道自己是否在反向代理后面运行(例如 HTTPD)。
- Web 应用程序在 Web 服务器上的根“/”上下文中运行
- 代理使用上下文“/proxy”运行,该上下文代理该 Web 服务器
应通过 /proxy/index.html 请求从浏览器访问 index.html。 但是,如果 Web 应用程序中有一些代码(例如 myscript.js)以编程方式发送 HTTP 请求(例如 xhr.open("???/resource")。
问题来了,因为代码将此 HTTP 请求发送到 /resource,而不是发送到 /proxy/resource。
换句话说,Web 应用程序(在浏览器中运行)的代码不知道是否有代理。请记住,应用程序可以在代理之后运行,但可能根本没有任何代理。我想到了 3 个解决方案:
1) Web 应用程序通过从当前 window.location.path 解析上下文(例如 /proxy)自动解析上下文并根据它发送 xhr
2) 增强 Web 应用程序以要求用户对代理进行一些额外配置,如果设置了上下文,它会附加上下文
3) 以某种方式配置代理,以将非代理类 URL 重新发送到 Web 服务器 1:1(例如 /proxy -> webserver/,/ -> webserver/)
哪一个是“正确”的,还是有其他选择?
【问题讨论】:
标签: javascript redirect proxy reverse-proxy httpd.conf