【问题标题】:How to send Java HTTP request using a specified port number如何使用指定的端口号发送 Java HTTP 请求
【发布时间】:2015-11-03 06:37:18
【问题描述】:

我有两个应用程序需要使用 HTTP 相互通信。每个当前都是使用HttpServer 类的服务器,并使用Apaches HTTP client library 发出请求。

其中一个应用程序将在运行之前知道其他端口地址,例如端口 8000 意味着它使用它来发出可以由其他应用程序处理的 HTTP 获取请求。但是,如果第二个应用程序想要向第一个应用程序发送请求,它将不知道将响应发送到哪个端口。这是因为第一个应用程序将使用 HTTP 客户端库发送请求,该库将动态选择一个端口,例如端口 6543,这意味着第二个应用程序无法保存它并在以后使用它。

例子:

App 1 在 localhost 上加载,端口为 8000。

App 2 在 localhost 上加载,端口为 8050。

应用 1 知道应用 2 在 8050 上并发送由应用 2 处理的请求。

应用 2 想要向应用 1 发送请求,但它不知道其端口,因为之前的请求是使用动态分配的端口发送的。

除了第一个应用程序将其服务器端口号发送给应用程序之外,是否存在这种情况?

【问题讨论】:

    标签: java apache http port


    【解决方案1】:

    我不确定你到底想做什么。如果客户端发送 HTTP 请求,它实际上可以从同一个连接中读取响应,为什么要通过不同的连接发送它并产生开销。如果你想实现它,那么除了客户端-服务器为他们的请求响应交换端口信息并且它们都充当客户端+服务器之外,别无他法。可以使用请求中的 HTTP 标头交换此信息。

    我相信您在这里对 TCP 和 HTTP 端口感到困惑。

    但是,第二个应用程序将获取请求、处理它并 不知道将响应发送到哪个端口,因为 HTTP 客户端 库将动态选择一个端口,例如6543端口

    您的服务器不只是选择一个动态端口来发送响应,它是用于发送响应的底层 TCP 任意端口。 TCP 通常是与 HTTP 协议一起使用的底层传输协议。 TCP 客户端发送一个名为“客户端端口”的标头来告诉服务器他们想在哪里接收响应。这些端口号是客户端从一系列空闲端口中随机选择的。

    【讨论】:

    • 一个示例场景是,应用程序 1 从 localhost 上的服务器开始,该服务器在端口 8000 上运行。应用程序 2 从 localhost 上的服务器开始,端口为 8050。应用程序 1 知道应用程序 2 的端口,因此使用HTTP 客户端到 localhost:8000,应用程序 2 接收到该客户端,但是当它稍后尝试向应用程序 1 发送 HTTP 请求时,它不知道应用程序 1 的服务器端口正在运行。
    • @TomWilkins 为什么 app1 不能在其请求中添加 HTTP 标头来提及其侦听端口?
    • 其实你是对的,我可以将它添加为 HTTP 标头.....始终查看简单的解决方案:/(想要回答“将 HTTP 标头添加到应用程序 1 所以应用程序 2 可以使用它”或其他东西,所以我可以打勾。)
    • @TomWilkins 在我的回答中已经提到第一段的最后一行“如果你想实现它,那么除了客户端服务器交换端口信息以获取他们的请求响应和它们都充当客户端+服务器。可以使用请求中的 HTTP 标头交换此信息。”
    【解决方案2】:

    【讨论】:

    • 啊,就这样吧,用 POST 发送端口?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多