前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 技术篇 - 前端浏览器发送一次url请求后端ServerSocket接收到两次请求原因及解决方法,GET /favicon.ico HTTP/1.1问题处理

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

作者头像
小蓝枣
发布2021-12-01 13:51:01
1.9K0
发布2021-12-01 13:51:01
举报
文章被收录于专栏:CSDN博客专家-小蓝枣的博客

效果图如下:

在这里插入图片描述
在这里插入图片描述

前端发送一次请求,后端接收到两次,第二次是: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 网站上的图标,具体的可以自己来指定。

修改后再次测试:

在这里插入图片描述
在这里插入图片描述

可以看到只有一次请求了,而且页签前面也有图标了。

在这里插入图片描述
在这里插入图片描述

测试代码如下:

代码语言:javascript
复制
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();
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/08/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档