今天访问站点突然遇到个迷惑的行为,具体是:
我用 chrome 访问服务器上的一个页面,请求成功返回页面数据,但是 chrome 没有将页面渲染出来而是把页面数据当成字符串渲染了。我跑到 IE11、edge、firefox 上访问这个页面,页面能成功显示。我又多试了一下,把返回的页面数据复制下来创建了一个本地 html,然后用 nginx 给它做服务器,再用 chrome 本地 localhost 方式去访问这个 html,页面居然被渲染出来了(只是没有样式和 js,但是结构有)。
所以问题是:什么原因导致 chrome 的这两种渲染区别?
看上去明显跟后端(java 写的)和浏览器有关系,但是我对后端不熟悉,希望有大佬能够解答一下。
下边是相关访问信息:
服务器地址为:a.com
访问的 html 页面地址为:a.com/some.html
请求头部分信息:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
服务器返回了 some.html 这个页面的数据,仅展示 meta 信息,并没有添加限制浏览器的信息。
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<!-- 避免IE使用兼容模式 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
...</html>
响应头的content-type不正确