谷歌浏览器和火狐浏览器对HTML的嗅探(Sniff)能力

如下样例代码, 返回网站首页HTML内容

java 复制代码
import org.apache.commons.io.IOUtils;
import org.springframework.stereotype.Controller;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.Objects;


@Controller
@RequestMapping
public class FrontController {

    @ResponseBody
    @GetMapping("/")
    public void store(HttpServletRequest request) {
        String homePage = "http://t.infuq.com/data/static/sniff.html";
        /** http://t.infuq.com/data/static/sniff.html 内容如下
<!--
2025.10.22
-->
<!DOCTYPE html>
<html lang>
    <head>
        <meta charset="utf-8">
        <title>MyTitle</title>
    </head>
    <body>
        <p>https://www.infuq.com http://t.infuq.com</p>
    </body>
</html>
        */
        read(homePage);
    }

    private void read(String url) {
        InputStream in = ResourceUtils.getURL(url).openStream();
        HttpServletResponse response = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getResponse();
        IOUtils.copy(in, response.getOutputStream());
    }
}

当通过 Chrome 或 Microsoft Edge 访问时可以正常显示内容如下

但是通过火狐浏览器访问时, 却显示了源码

查看响应头信息

服务端没有返回Content-Type, 火狐浏览器(64位 v144.0)通过嗅探能力, 判断该文件是text/plain文件, 而 Chrome 等浏览器会把该文件识别成text/html文件.

【解决】

1.在服务端指定响应Content-Type

response.setContentType("text/html");

2.将HTML源码顶部的注释去掉

html 复制代码
把
<!--
2025.10.22
-->
<!DOCTYPE html>
<html lang>
    <head>
        <meta charset="utf-8">
        <title>MyTitle</title>
    </head>
    <body>
        <p>https://www.infuq.com http://t.infuq.com</p>
    </body>
</html>

改成 
<!DOCTYPE html>
<html lang>
    <head>
        <meta charset="utf-8">
        <title>MyTitle</title>
    </head>
    <body>
        <p>https://www.infuq.com http://t.infuq.com</p>
    </body>
</html>

https://source.chromium.org/chromium/chromium/src/+/refs/tags/118.0.5981.4:net/base/mime_sniffer.cc

相关推荐
前端一小卒31 分钟前
不手写代码的第 30 天,我才明白前端这个岗位还剩什么
前端·javascript·ai编程
Ajie'Blog31 分钟前
Copilot Agent Tasks API 开放:AI 编程开始进入后台任务时代
服务器·前端·javascript·人工智能·copilot·ai编程
老毛肚1 小时前
jeecgboot vue TS & 模板化 04
前端·javascript·vue.js
AI_零食2 小时前
鸿蒙PC Electron跨平台应用开发:24时区时间表应用详解
前端·华为·electron·开源·harmonyos·鸿蒙
Electrolux3 小时前
[onlyoffice-v9]纯前端怎么实现编辑预览office
前端·javascript·github
码云之上3 小时前
聊聊如何设计一个高效、稳定的 Node.js 接入层
前端·后端·node.js
kyriewen4 小时前
我读了一遍 Babel 编译后的 async/await,终于搞懂了它的原理(附 20 行手写实现)
前端·javascript·面试
IT_陈寒4 小时前
Vite项目build后路由404了?你可能漏了这个小配置
前端·人工智能·后端
lichenyang4534 小时前
AI 聊天从纯文本到结构化卡片:SSE done 帧携带 card + 历史记录卡片恢复实战
前端
梦曦i5 小时前
@meng-xi/vite-plugin v0.1.5:告别手动 import,精简工具层
前端