如何在没有 CORS 问题的情况下从外部域获取 ttf

Posted

技术标签:

【中文标题】如何在没有 CORS 问题的情况下从外部域获取 ttf【英文标题】:How to get ttf from external domain without CORS problems 【发布时间】:2018-07-04 14:45:53 【问题描述】:

我正在尝试从外部网站获取 .ttf 以在我的 Web 应用程序中使用。当我以这种方式尝试时:

@font-face 
  font-family: 'font';
  src: url('http://xxx.xyz/resources/tipografias/font.ttf') format('truetype');

我遇到了 CORS 问题,原因是:

请求中没有“Access-Control-Allow-Origin”标头 资源。

我已尝试使用该网站显示的 jQuery:html5rocks

我也尝试过使用用于 CORS 的 tomcat 过滤器:CORS filter

我也尝试过使用 javascript:Javascript

我不知道我做错了什么

【问题讨论】:

如果您无法控制该域,则无法控制。我建议下载 TTF 文件(假设您拥有该文件的权限),然后将其包含在您的网站本地 【参考方案1】:

如果您控制外部网站并使用htaccess,您可以使用以下代码允许其他网站加载您的字体:

<FilesMatch ".(eot|ttf|otf|woff)">
    Header set Access-Control-Allow-Origin "*"
</FilesMatch>

如果您不控制外部网站,则无法绕过CORS 政策。


我相信以下内容应该适用于您的 web.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="*"/>
     </customHeaders>
   </httpProtocol>
 </system.webServer>
</configuration>

【讨论】:

我可以控制外部网站。我必须将这些代码行放在哪里? 在网站根目录下的.htaccess 文件中或包含字体文件@DMC19 的某个子目录中。 我正在研究如何按照您在我的 web.xml 中提出的建议进行操作,因为我没有 .htaccess 文件,我必须在 web.xml 中配置它 查看我的编辑@DMC19;我相信它应该适合你。 我已允许访问外部网络,一切正常,谢谢【参考方案2】:

您无法绕过这一点 - 服务器不希望您访问该字体。正如其他人所说,您可以只需下载字体文件并在本地提供。但这很可能被视为窃取。根据字体的不同,它可能是一种特别许可的字体。

如果这是一家“字体工厂”(一家设计和许可字体的公司),那么他们可能只允许获得许可的网站访问字体文件(通过检查您的浏览器发送的 Origin 请求标头是否在他们的列表中允许的网站)。

旁注 - CORS 基本上是专门为阻止人们从字体工厂下载字体而发明的。

【讨论】:

以上是关于如何在没有 CORS 问题的情况下从外部域获取 ttf的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在没有画布的情况下从 ImageBitMap Web 对象中获取像素?

如何在没有 \n 的情况下从 txt 中获取特定行(Python)

如何在没有 Linq 的情况下从列表中获取一些对象?

如何在没有互联网连接的情况下从位置获取地址

如何在没有 OutOfMemory 错误的情况下从 FileInputStream 获取字节数组

如何在没有 HTML 标签的情况下从数据库中获取数据?