【问题标题】:Cross Origin issue with loading fonts and SVG in local file在本地文件中加载字体和 SVG 的跨域问题
【发布时间】:2019-07-21 08:18:38
【问题描述】:

我正在使用浏览器中的文件协议执行一个 HTML 文件,如下所示:

view-source:file:///var/www/html/project/storage/temp/screengrab/designer-1477570109.html

它完美地加载 css 文件,但不加载 CSS 所需的资源,如字体 ttf 或 woff 文件、SVG 渐变等。

我在控制台中看到一个跨域问题,但我在我的主要服务 PHP 文件中设置了跨域标头,如下所示:

header('Access-Control-Allow-Origin: *');

我正在运行 PHP 的内置 Web 服务器,该服务器在 http://localhost:8000 上运行

【问题讨论】:

    标签: html fonts cors


    【解决方案1】:

    您不能对从 file:/// 加载的资源执行 XHR 请求,因为来自 file:/// 的页面根本没有来源,它们作为页面独立运行,除了基本的网络操作之外没有网络功能作为 HTML 元素的一部分(如<link href="..."> or`)运行。出于非常明显的安全原因:如果允许磁盘上的文件解析超出 HTML 规范定义为标准 DOM 操作的任意 XHR 请求,那么它们可以使用简单的相对 URL 访问它们所在目录中的其他文件。

    如果您想从 file:/// 进行测试,唯一可行的方法是停止使用 file:///,而是通过 localhost URL 访问您的文件,方法是为您的文件所在的目录运行一个成熟的 Web 服务器,或者做大多数人做的事情,只在需要测试单个文件时运行单行 CLI 服务器。 Python 和 PHP 有内置的 CLI 选项;如果你是使用 Node 的 JS 开发者,你可以安装 live-serverhttp-server 之类的东西。

    如果您正在尝试使用 HTML/CSS/JS/等,那么您真的与 file:/// 没有任何关系;它纯粹是为了在磁盘上单独显式加载页面。基本上:如果您想做的不仅仅是加载页面然后什么都不做,请使用http://

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      • 2014-03-12
      • 2020-04-17
      • 2019-09-02
      • 2021-12-19
      相关资源
      最近更新 更多