当前位置: 代码迷 >> 综合 >> Java 技术篇 - 前端浏览器发送一次url请求后端ServerSocket接收到两次请求原因及解决方法,GET /favicon.ico HTTP/1.1问题处理
  详细解决方案

Java 技术篇 - 前端浏览器发送一次url请求后端ServerSocket接收到两次请求原因及解决方法,GET /favicon.ico HTTP/1.1问题处理

热度:53   发布时间:2023-12-12 05:19:30.0

效果图如下:
在这里插入图片描述
前端发送一次请求,后端接收到两次,第二次是: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 {
    /*作用:接收浏览器的请求并响应*/// 创建服务,端口设置为10010ServerSocket 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();}}
}

喜欢的点个赞?吧!

  相关解决方案