热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于字体图标在firefox上本地访问无法显示的问题分析

一、问题在本地引入了FontAwesome字体图标,网页未部署到服务上(在本地直接访问,部署到nginx服务器,火狐浏览器



一、问题

在本地引入了Font Awesome 字体图标,网页未部署到服务上(在本地直接访问,部署到nginx服务器,火狐浏览器能显示)

目录结构:

引入方式:

<link href&#61;"../css/font-awesome.css" rel&#61;"stylesheet" type&#61;"text/css">

使用方式&#xff1a;

<link href&#61;"../css/font-awesome.css" rel&#61;"stylesheet" type&#61;"text/css">

访问地址&#xff1a;

file:///E:/workstation/ProTeam-web/vendor/font-awesome/pages/index.html

在Chrome浏览器中能正常访问&#xff0c;

在火狐浏览器中访问出现无法识别字符

可以看出在火狐浏览器下无法正常显示字体图标




二、分析

由于一直用火狐浏览器的firebug插件&#xff0c;在访问的时候只能看到一行错误信息

 NetworkError: A network error occurred

当时并未在意这个错误&#xff0c;只是认为可能是其他代码导致的&#xff0c;无法显示可能浏览器的兼容性问题&#xff0c;苦苦寻找火狐浏览器下的兼容方式&#xff0c;无果&#xff01;最后把所有无关的代码全部删掉&#xff0c;只保留字体图标样式的引用以及相关使用&#xff0c;还是报这个错误&#xff0c;开始重视这个问题&#xff0c;但是无法显示出详细的错误信息&#xff0c;不知道发送的是什么网络请求&#xff0c;并且在“网络”标签中也未发现有什么请求&#xff0c;最后无奈打开火狐自带的开发者工具&#xff0c;打开以后&#xff0c;突然看到了完整的错误信息&#xff0c;甚是惊喜万分&#xff01;

downloadable font: download failed (font-family: "FontAwesome" style:normal weight:normal stretch:normal src index:1): bad URI or cross-site access not allowed source: file:///E:/workstation/ProTeam-web/vendor/font-awesome/vendor/font-awesome/fonts/fontawesome-webfont.woff

错误信息很明显的指出了URI是不合法的&#xff0c;不允许跨站访问&#xff0c;这就涉及到了浏览器的同源策略的一个问题。

同源策略限制了一个源&#xff08;origin&#xff09;中加载文本或脚本来自其他源&#xff08;origin&#xff09;中资源的交互方式

在同源的定义&#xff0c;如果两个页面拥有相同的协议&#xff08;protocol&#xff09;&#xff0c;端口(port)主机(domain)&#xff0c;那么这两个页面就属于同一个源。

这个协议看着貌似简单&#xff0c;在http协议请求中是比较明确的&#xff0c;各个浏览器 实现的标准相同&#xff0c;举例如下&#xff1a;

例如我们访问的网址是http://domain.com/index.html

http请求同源示例


URL    结果原因
http://domain.com/page1.html成功 
http://domain.com/vender/index.html成功 
http://domain.com:8080/index.html失败端口不同
http://domain2.com/index.html失败    域名不同
https://domain.com/index.html失败协议不同

针对http请求&#xff0c;以上对同源的策略判断还是挺明白的。但是在本机访问HTML就不同了&#xff0c;例如

刚才我访问的本地的html页面

file:///E:/workstation/ProTeam-web/vendor/font-awesome/pages/index.html

这个访问地址的协议为file协议&#xff0c;这个协议在Firefox中爆出来过安全漏洞&#xff0c;导致在把网页另存为的时候&#xff0c;可以访问到我们本地文件&#xff0c;产生安全隐患&#xff0c;此bug于2004年暴出&#xff0c;链接为

https://bugzilla.mozilla.org/show_bug.cgi?id&#61;230606

http://bobao.360.cn/news/detail/3390.html

继续看刚才我访问的这个页面,这个页面引用了font-awesome.css,而在font-swesome.css文件中需要引用相关的字体文件&#xff0c;通过以上错误信息可以看出&#xff0c;引用的路径为

file:///E:/workstation/ProTeam-web/vendor/font-awesome/vendor/font-awesome/fonts/fontawesome-webfont.woff

实际上在在font-awesome.mini.css文件中是这么写的&#xff1a;

&#64;font-face {font-family: &#39;FontAwesome&#39;;src: url(&#39;../fonts/fontawesome-webfont.eot?v&#61;4.6.3&#39;);src: url(&#39;../fonts/fontawesome-webfont.eot?#iefix&v&#61;4.6.3&#39;) format(&#39;embedded-opentype&#39;), url(&#39;../fonts/fontawesome-webfont.woff2?v&#61;4.6.3&#39;) format(&#39;woff2&#39;), url(&#39;../fonts/fontawesome-webfont.woff?v&#61;4.6.3&#39;) format(&#39;woff&#39;), url(&#39;../fonts/fontawesome-webfont.ttf?v&#61;4.6.3&#39;) format(&#39;truetype&#39;), url(&#39;../fonts/fontawesome-webfont.svg?v&#61;4.6.3#fontawesomeregular&#39;) format(&#39;svg&#39;);font-weight: normal;font-style: normal;
}

 

对比一下这两个路径

由于上述所说的安全漏洞&#xff0c;火狐浏览器会把index.html页面中的file:///E:/workstation/ProTeam-web/vendor/font-awesome/pages/ 这部分当做源&#xff0c;而在字体图标文件的源是file:///E:/workstation/ProTeam-web/vendor/font-awesome/vendor/&#xff0c;这样两个链接就被火狐浏览器认为不是同源的&#xff0c;导致访问的时候无法访问&#xff0c;结果就是字体图标无法显示。

那如果换个方式引用呢&#xff1f;

我把index.html的位置换了一下&#xff0c;目录结构如下&#xff1a;

这样再访问index.html文件&#xff0c;在火狐浏览器下就能正确的显示出字体图标了。这时候两者的访问路径是

火狐浏览器同样的会以index.html页面前面的内容当做源&#xff0c;然后通过此页面引用字体文件的时候&#xff0c;前面一致&#xff0c;故被火狐浏览器认为是同源。




三、一个不太好的解决办法

上述问题也就只有在本地开发的时候才会出现&#xff0c;部署到服务器上以后&#xff0c;如果在同一个站点下就不会出现上述问题。这个限制是浏览器的限制&#xff0c;火狐为这个限制增加了开关&#xff0c;在本机的开发的时候可以暂时把这个开关关闭

在火狐浏览器中输入&#xff1a;about:config

搜索&#xff1a;security.fileuri.strict_origin_policy

然后双击把这个值更改为false即可。

或者采用更换文件夹的方式&#xff08;章节二最后所述&#xff09;&#xff0c;把不同源设置为同源。但是这样会限制了我们组织代码路径方式。




四、总结

总的来说这个问题是由于同源策略所导致&#xff0c;并不能说是火狐浏览器的bug&#xff0c;只是火狐为了安全起见&#xff0c;认为这个是不安全的&#xff0c;故做了限制。相关文章可以自行搜索。实际上在其他浏览器上也会有相应的安全问题&#xff0c;例如chrome浏览器&#xff0c;但是chrome的开发团队不认为这是一个bug&#xff0c;所以并没有对此做相应的限制。


推荐阅读
  • 如何压缩网站页面以减少页面加载时间
    本文介绍了影响网站打开时间的两个因素,即网页加载速度和网站页面大小。重点讲解了如何通过压缩网站页面来减少页面加载时间。具体包括图片压缩、Javascript压缩、CSS压缩和HTML压缩等方法,并推荐了相应的压缩工具。此外,还提到了一款Google Chrome插件——网页加载速度分析工具Speed Tracer。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了markdown[软件代理设置]相关的知识,希望对你有一定的参考价值。 ... [详细]
  • CSS|网格-行-结束属性原文:https://www.gee ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 使用chrome编辑器实现网页截图功能的方法
    本文介绍了在chrome浏览器中使用编辑器实现网页截图功能的方法。通过在地址栏中输入特定命令,打开控制台并调用命令面板,用户可以方便地进行网页截图操作。 ... [详细]
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • FIN7后门工具伪装成白帽工具进行传播
    fin7,后门,工具,伪装,成,白, ... [详细]
author-avatar
很呆很傻很天真2010_545
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有