来自代码

时间:2017-06-15 10:39:11

标签: javascript redirect proxy reverse-proxy httpd.conf

我试图找出"正确的"当您不知道自己是否在反向代理(例如HTTPD)后面运行时,从Web应用程序代码发出HTTP请求以编程方式的方式。

  • Web应用程序在root" /" 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解析它并根据它发送xhr来自动解析上下文(例如/ proxy)

2)增强Web应用程序以要求用户进行一些额外的代理配置,如果设置了上下文,它会附加上下文

3)以某种方式配置代理以将非代理URL重新发送到Web服务器1:1(例如/ proxy - > webserver /,/ - > webserver /)

哪一个是#34;正确的"一个还是有其他选择?

1 个答案:

答案 0 :(得分:0)

后端Web应用程序不应该知道上面或之前是否有代理。理想情况下,他们应该生活在自己的背景路径中,例如。 / application /如果他们需要发送重定向而不使用主机名或url方案,只需URL-Path / application / *

理想情况下,您可以根据您的3号场景执行简单的反向代理指令:

ProxyPass /XXX/ http://backend/application/
ProxyPassReverse /XXX/ http://backend/application/