来自主站点和子域的跨域@ font-face

时间:2016-02-26 20:30:03

标签: css .htaccess iis cross-domain umbraco

我在StackOverflow上检查了一些其他解决方案,但没有找到我需要的答案,所以我问这个。

我有一个网站' subdomain.myexamplesite.com'和我的主要网站' myexamplesite.com' 我将我的CSS托管在' myexamplesite.com'对于' subdomain.myexamplesite.com'因为我想将所有CSS文件放在一个地方。

我没有遇到以这种方式托管CSS文件的跨域问题。一切都很棒。

我现在遇到的问题是,我正在使用@ font-face并尝试将其转到我的子域网站。但是我收到了跨域错误:

源自' https://www.myexamplesite.com的字体'已被跨源资源共享策略阻止加载:No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' https://subdomain.myexamplesite.com'因此不允许访问。

主要网站是在IIS服务器上托管的.Net网站(确切地说是Umbraco CMS)。另一个站点是一个不同的.Net站点,但仍然在IIS上托管。 由于它是IIS,我不认为.htaccess文件适用于我的情况。 我的主网站上有一个crossdomain.xml,允许从我的子域进行访问以确保。但这不起作用。

我正在CSS中为我的子域网站正确引用字体文件,否则我不会认为我会收到字体跨域错误。 有没有人有任何建议,如果可以在我的主域上托管字体,并允许子域网站使用相同的字体。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

对于字体文件,您需要设置Access-Control-Allow-Origin http标头。

要在所有文件上设置它,请将其添加到web.config

<httpProtocol>
  <customHeaders>
    <remove name="Cache-Control" />
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
    <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
  </customHeaders>
</httpProtocol>

或者更具体地将这样的内容添加到<system.webServer>下面的web.config并设置字体文件的位置路径。

    <location path="static/fonts/source-sans-pro-regular.ttf" inheritInChildApplications="false">
        <system.webServer>
          <httpProtocol>
            <customHeaders>
              <add name="Access-Control-Allow-Origin" value="*" />
            </customHeaders>
          </httpProtocol>
        </system.webServer>
  </location>

请参阅cross-domain-fonts

59378-Centralized-Umbraco-7-Dashboards-Access-Control-Allow-Origin

access-control-allow-origin-multiple-origin-domains

font-face-fonts-only-work-on-their-own-domain