您部署 Web 应用程序(在我的情况下为 Java EE + Spring MVC,但我认为使用什么 Web 堆栈无关紧要)并将其隐藏在 HTTP 代理或负载平衡器后面。
代理/平衡器软件可以修复 HTTP 标头。这不是问题。
但是应用程序本身将链接放入生成的 HTML 中:
<a href="http://$HOST:$PORT/$CONTEXT/$PATH">...</a>
<a href="/$CONTEXT/$PATH">...</a>
代理/平衡器可以使用不同的$HOST:$PORT或$CONTEXT部分。对于带有 JSP 的 Java EE,这段代码修复了这个问题:
<c:url value="$PATH">
${pageContext.request.contextPath}/$PATH
但我想知道 Web 框架如何获取有关用户请求的$HOST:$PORT/$CONTEXT的知识,以便它可以在 HTML 中呈现?
此信息是否提取自:
http://en.wikipedia.org/wiki/X-Forwarded-For
非标准的事实标签?它看起来像:
X-Forwarded-For: client, proxy1, proxy2, ..., proxyN
所以 Web 框架提取第二个参数(在我的示例中是proxy1,或者如果 N == 0 则为主机 IP)以提供给您$HOST:$PORT/$CONTEXT?