Java 技术篇 - 前端浏览器发送一次url请求后端ServerSocket接收到两次请求原因及解决方法,GET /favicon.ico HTTP/1.1问题处理
Posted 挣扎的蓝藻
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 技术篇 - 前端浏览器发送一次url请求后端ServerSocket接收到两次请求原因及解决方法,GET /favicon.ico HTTP/1.1问题处理相关的知识,希望对你有一定的参考价值。
效果图如下:
前端发送一次请求,后端接收到两次,第二次是:GET /favicon.ico HTTP/1.1
可以看到页签上标题栏前面是个地球,这个是默认的。
原因就是后台给的响应里没有指定这个图标,他再请求一次,就是请求这个资源。
解决方法,在响应里加上这个元素,指定下图标内容:
<link rel="shortcut icon" href="https://g.csdnimg.cn/static/logo/favicon32.ico" type="image/x-icon" />
其中 https://g.csdnimg.cn/static/logo/favicon32.ico
这个是 csdn 网站上的图标,具体的可以自己来指定。
修改后再次测试:
可以看到只有一次请求了,而且页签前面也有图标了。
测试代码如下:
package com.test.test;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketTest {
public static void main(String[] args) throws IOException {
/*
作用:接收浏览器的请求并响应
*/
// 创建服务,端口设置为10010
ServerSocket server = new ServerSocket(10010);
int k = 0;
while(true) {
// 阻塞式连接,当接收请求前保持阻塞
Socket socket_client = server.accept();
// 获取输入流
InputStream in_put = socket_client.getInputStream();
// 制作响应报文
StringBuffer response = new StringBuffer();
// 读取请求内容
BufferedReader input = new BufferedReader(new InputStreamReader(in_put,"GBK"));
String url = input.readLine();
if(url != null) {
String url_new = java.net.URLDecoder.decode(url, "UTF-8");
k = k + 1;
System.out.println("\\n循环次数:" + k);
System.out.println(url_new);
}
// 响应头部
String response_head = "HTTP/1.1 200 OK\\r\\n" +
"Content-type:text/html\\r\\n\\r\\n";
// 响应主体
String response_body = "<meta http-equiv=\\"Content-Type\\" content=\\"text/html; charset=UTF-8\\">" + // 解决乱码问题
"<link rel=\\"shortcut icon\\" href=\\"https://g.csdnimg.cn/static/logo/favicon32.ico\\" type=\\"image/x-icon\\" />" +
"<style>body{font-family:\\"黑体\\"}</style>" +
"欢迎来到小蓝枣的博客<br>" +
"Welcome to xiaolanzao's blog!";
response.append(response_head + response_body);
// 获取输出流
OutputStream out_put = socket_client.getOutputStream();
// 将响应数据传给输出流
out_put.write(response.toString().getBytes());
// 关闭创建的对象
out_put.close();
in_put.close();
socket_client.close();
}
}
}
喜欢的点个赞❤吧!
以上是关于Java 技术篇 - 前端浏览器发送一次url请求后端ServerSocket接收到两次请求原因及解决方法,GET /favicon.ico HTTP/1.1问题处理的主要内容,如果未能解决你的问题,请参考以下文章
HTTP的request(请求)和response(响应)是啥?