当前位置: 首页 > 面试题库 >

如何从http或https请求中获取带有端口的主机名

平光明
2023-03-14
问题内容

我在jboss容器(相同的Unix框)中部署了两个应用程序。如果我收到来自app1的请求,则需要对app2提出相应的请求。

例如:
如果app1请求为:http :
//example.com/context? param1=123,
那么我需要提取“ http://example.com/ ”,以便可以对第二个应用程序提出请求。

我尝试使用:

  HttpServletRequest.getServerName() & 
  HttpServletRequest.getServerPort() & \
  HttpServletRequest.getHeader("host")

方法,但请求可能来自http或https。

如果还有其他更好的方法,请告诉我。谢谢!


问题答案:

您可以使用HttpServletRequest.getScheme()来检索“ http”或“ https”。

连同它一起使用HttpServletRequest.getServerName()应该足以重建所需的URL部分。

如果您使用标准端口(HTTP为80,HTTP为443),则无需在URL中显式放置端口。

编辑
:如果您的servlet容器位于终止SSL的反向代理或负载平衡器的后面,则这会有些棘手,因为将请求作为纯http转发到servlet容器。您有几种选择:

1)HttpServletRequest.getHeader("x-forwarded- proto")改为使用;仅当您的负载平衡器正确设置了标头(Apache应该afaik)时,此方法才有效。

2)在JBoss /
Tomcat中配置一个RemoteIpValve,它将getScheme()按预期工作。同样,这仅在负载均衡器设置了正确的标头时才有效。

3)如果上述方法不起作用,则可以在Tomcat /
JBoss中配置两个不同的连接器,一个用于http,另一个用于https,如本文所述。



 类似资料:
  • 问题内容: 我认为ServletContext可能提供一种方法。ServletContext的getAttribute()方法是否提供任何帮助,即是否有需要帮助的属性名称(可能是“ host”,“ port”)。 这样做的原因是,我希望我的应用程序可以在任何部署的地方运行,而且在某一时刻,我必须允许用户单击指向文件服务器上某个位置的链接。因此,我需要按主机和端口进行引用,并且不能使用内部引用。 问

  • 问题内容: 我正在尝试让我的函数返回http get请求,但是,无论如何,它似乎在?scope中丢失了。我对Node.js不熟悉,因此不胜感激 问题答案: 当然,您的日志会返回:您在完成请求之前先进行日志。问题不是范围,而是 异步性 。 是异步的,这就是为什么它将回调作为参数的原因。做您在回调中要做的事情(传递给的):

  • 本文向大家介绍php如何获取Http请求,包括了php如何获取Http请求的使用技巧和注意事项,需要的朋友参考一下 php获取Http请求的方法 $_SERVER介绍 $_SERVER是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。 获取Http请求的方法示例 实例补充: socket方式 使用套接字建立连接,拼接 HTTP

  • 我试图最小化我的webapp的配置,我要删除的事情之一是端口号映射: http:80- 因为配置已经存在于conf/server中。xml,我不想在我的应用程序中重复这些设置。必须更改(并记住更改)多个配置文件是一种痛苦。此外,只要应用程序支持http和https,就不应该关心它部署到了什么环境/容器中。 我在我的网站上配置了以下内容。xml,但除了重定向之外,我还需要能够构建https URL:

  • 问题内容: 我现在正在尝试使用Java Cord中的HTTP请求获取JSON对象。 我想知道如何在下面的代码中获取响应或JSON对象。 请告诉我。 (在此程序中,我尝试获取文章“ New York”的Wikipedia类别。) 问题答案:

  • 问题内容: 我想在不同主机上的某些Docker容器中运行任务。而且我编写了一个管理器应用程序来管理容器(启动任务,停止任务,获取状态等)。容器启动后,它将向管理器发送一个http请求及其地址和端口,因此管理器将知道如何管理该容器。 由于同一主机上可能运行着多个容器,因此它们将被映射到不同的端口。要在我的经理上注册一个容器,我必须知道每个容器映射到哪个端口。 如何 在 Docker容器中获取映射的端