socket = serverSocket.accept();
input = socket.getInputStream();
output = socket.getOutputStream();
Request request = new Request(input);
request.parse();
Response response = new Response(output);
response.setRequest(request);
response.sendStaticResource();
socket.close();
其中request.parse();方法如下:
StringBuffer request = new StringBuffer();
int i;
byte[] buffer = new byte[2048];
try {
i = input.read(buffer);
} catch (IOException e) {
e.printStackTrace();
i = -1;
}
for(int j = 0; j < i; j++){
request.append((char)buffer[j]);
}
System.out.println(request.toString());
打印出HTTP请求信息如下:
GET /index.jsp HTTP/1.1
Host: 127.0.0.1:8080
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
GET /favicon.ico HTTP/1.1
Host: 127.0.0.1:8080
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
我只发送了一个请求,怎么会出现两次请求呢,而且第二次请求的URI是 /favicon.ico,网上查了一下,Google的帮助文档是这样说的:
“如果您浏览到一个不存在的网址,Chrome 浏览器可能会将该网址发送给 Google,以便我们帮您查找所需网址。我们还会以汇总的方式使用此信息,以便为其他网络用户提供相应帮助(例如,告知他们该网站可能出现了问题)。了解关于停用针对导航错误的建议的详情。”
就算是Chrome浏览器会将该网址发送给 Google,但是请求的URI怎么会是 /favicon.ico。这个URI是一张图片,难道是如果请求的资源不存在时,Chrome浏览器会自动显示一张图片,但是我的浏览器中也没有显示相应的图片啊?这是神马情况?