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

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

     

效果图如下:

image.png

前端发送一次请求,后端接收到两次,第二次是:GET /favicon.ico HTTP/1.1

可以看到页签上标题栏前面是个地球,这个是默认的。

原因就是后台给的响应里没有指定这个图标,他再请求一次,就是请求这个资源。

image.png

解决方法,在响应里加上这个元素,指定下图标内容:

<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 网站上的图标,具体的可以自己来指定。

修改后再次测试:

image.png

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

image.png

测试代码如下:

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();
        }
    }
}

喜欢的点个赞❤吧!

目录
相关文章
|
23天前
|
设计模式 Java Spring
Java 设计模式之责任链模式:优雅处理请求的艺术
责任链模式通过构建处理者链,使请求沿链传递直至被处理,实现发送者与接收者的解耦。适用于审批流程、日志处理等多级处理场景,提升系统灵活性与可扩展性。
168 2
|
8月前
|
运维 Cloud Native Java
postman发起post请求遇到报错:java.io.FileNotFoundException (文件名、目录名或卷标语法不正确。)
遇到bug报错,多猜可能的原因,控制变量反复测试,直至找到问题的关键,然后再思考如何解决或者回避。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来
|
11月前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
185 6
|
11月前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
238 25
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
|
Java API 移动开发
Java获取URL对应的资源
Java获取URL对应的资源   认识IP、认识URL是进行网络编程的第一步。java.net.URL提供了丰富的URL构建方式,并可以通过java.net.URL来获取资源。   一、认识URL   类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。
1225 0
|
1月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
117 1
|
1月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
131 1
|
2月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
122 0