日期:2014-05-20  浏览次数:21094 次

网络编程中浏览器向服务器发请求时里包含的Host信息啥意思,不解
import java.io.*;
import java.net.*;

class ServerDemo {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(11000);
Socket s = ss.accept();
InputStream in = s.getInputStream();
OutputStream out= s.getOutputStream();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip);

//看看浏览器向服务器发送过来的是什么信息
byte[] bt = new byte[1024];
int num = in.read(bt);
System.out.println(new String(bt, 0, num));

PrintWriter pw = new PrintWriter(out, true);
pw.println("<font color = 'red' size = '4'>欢迎访问百度主页:www.baidu.com </font>");
s.close();
//ss.close();
}
}

上面的代码是自定义的本地服务器,打开浏览器,在地址栏里输入http://172.16.41.154:11000/
其中172.16.41.154 是我自己本地主机,可以换成你自己的,
回车以后,自定义的服务器在控制台上就打印出了浏览器发送的请求信息:

GET /myweb/demo.html HTTP/1.1
Accept: */*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; YYGameAll_1.2.167057.92; Windows
NT 6.1; Trident/4.0; QQDownload 713; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.307
29; .NET CLR 3.0.30729; Media Center PC 6.0; qihu theworld)
Accept-Encoding: gzip, deflate
Host: 172.16.41.154:11000
Connection: Keep-Alive


倒数第二行的 Host 啥意思没搞懂,求解答
------解决方案--------------------
主机地址吧。你访问的是http://172.16.41.154:11000/然后Host=172.16.41.154:11000
这样不是你要访问的服务器主机吗?地址+端口
------解决方案--------------------
Host 是 HTTP 请求报头中必需的报头!

其作用主要是用于基于域名的虚拟主机。因为一些网站可能会是同一个 IP 地址,因此单纯地使用 DNS 查询域名的 IP 地址是无法定位网络服务主机的,通过 Host 报头就可以在一个 IP 地址中使用 N 个不同的域名,而不至少乱套!