我的查询与我正在做的实现有关 .
当HTTP请求从客户端端口发送到服务器端口时,我知道响应也会被发送回同一端口(端口到端口通信) .
在我的例子中,服务器将响应转发到带有Query String的URL到我们网络上的主机服务器 . 因此,当使用URLConnection对象的InputStream读取响应时,我得到的是与转发URL的Login页面对应的HTML内容,没有查询字符串 .
我怀疑这是因为我们的主机服务器修改了URL .
现在问题是,在这种情况下,似乎有一个中间实体,它是我们转发URL的主机服务器 . 因此,当我在InputStream中读回响应(由服务器转发的URL)时,我不确定以下哪两个是实际情况发生的:
1.)直接从外部服务器读取响应(因为这是端口到端口的通信)
要么
2.)从中间主机服务器收到的响应,看起来是这种情况 .
(如果第二种情况正确,中间主机服务器是否会知道哪个客户端正确地将响应转发给?)
URL url = new URL(httpsURL);
HttpsURLConnection urlConnection = (HttpsURLConnection) url
.openConnection();
urlConnection.setRequestMethod("POST");
urlConnection.setDoOutput(true);
urlConnection.setDoInput(true);
///
Omitting code for SSL
///
String urlParameters = "CCNumber=4111111111111111";
DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream());
wr.writeBytes(urlParameters);
wr.flush();
wr.close();
BufferedReader in = new BufferedReader(new InputStreamReader(
urlConnection.getInputStream()));
String inputLine;
if (urlConnection.getResponseCode() == HttpsURLConnection.HTTP_OK){
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
}
}
1 回答
您从中间服务器收到响应 .
听起来您的中间服务器充当(reverse)proxy server . 当您向中间服务器发出请求时,它会向您网络上的服务器发出请求(就像您所描述的那样) . 但是,"real"服务器通常不知道请求是由您发起的 . 特别是,它不知道您的IP地址或您发送请求的端口 . 它唯一知道的是中间(代理)服务器的IP地址和端口 . 另一方面,代理服务器仍然知道您发送请求的IP地址和端口 .
因此,您将请求发送到代理,代理将其发送到“真实”服务器,真实服务器将其响应发送回代理,代理将其发送回给您 . 您和“真实”服务器之间不直接通信 .