【问题标题】:Play Framework 1.x webfonts CORs issuePlay Framework 1.x webfonts CORs 问题
【发布时间】:2016-02-15 22:41:28
【问题描述】:

我正在尝试使用 CDN (MaxCDN) 为我的网站提供网络字体,但出现以下浏览器错误。网站使用 Play Framework 1.2.7.2 托管在 Heroku 上:

来自“https://______.netdna-ssl.com”的字体有 被跨域资源共享策略阻止加载:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此,原点 'http://______.herokuapp.com' 是 不允许访问。

MaxCDN 向我指出了这篇文章,但仅与 Apache 服务器相关。有关如何为 Play Framework 1.2.7.2 解决此问题的任何建议。

https://www.maxcdn.com/one/tutorial/how-to-use-cdn-with-webfonts/

我可以在此处 (https://www.playframework.com/documentation/2.4.x/CorsFilter) 找到一篇解释如何解决 Play 2.x 问题的文章,但不适用于 Play 1.x。

【问题讨论】:

    标签: heroku playframework cors playframework-1.x


    【解决方案1】:

    问题与您的 Play Framework 服务器无关,而与 CDN 服务器有关。

    您正在尝试执行从一个来源到另一个来源的请求(COR 请求):从“http://______.herokuapp.com”的页面到“https://______.netdna-ssl.com”的 CDN

    在执行该请求时,CDN服务器必须在响应中添加“Access-Control-Allow-Origin”标头,否则出于安全原因会被浏览器屏蔽。

    如果您想了解更多关于 CORS 的信息,可以查看this SO answer.

    如果您可以访问CDN,您可以添加规则以添加标题,否则我建议您自己托管字体。

    更新:

    我不知道是否可以向公共文件夹的请求添加标头,但一种解决方案是创建一个专用的字体控制器。 此控制器将用于获取具有适当标题的字体。

    public class Fontextends Controller{
    
      public static void font(String fontName){
        response.accessControl("*");     //we add the Access-Control-Allow-Origin header to the response
        renderBinary(new File("public/font/"+fontName));  // we send the font in the response
      }
    
    }
    

    现在您需要确保 MaxCDN 正在从链接到此操作的路由访问您的字体。

    另一种解决方案是使用前端 HTTP 服务器,如下所述:https://www.playframework.com/documentation/1.2.5/production#anameserverFrontendHTTPservera 您应该可以使用此解决方案添加标题,但我从未这样做过,所以无法帮助您。

    【讨论】:

    • 我使用的 CDN 是 MaxCDN,根据他们的支持团队,他们没有办法编辑标题。他们说他们只是使用他们从中提取的原始服务器上的任何标题,因此我需要调整那里的资产(字体)的标题......这意味着更改 Play Framework 设置。我找不到任何与此相关的信息,但对于 Play! 1.x
    • 好的,所以我假设字体最初托管在 play 的公共文件夹中?
    • 将尝试解决方案,如果可行,将其标记为正确。阅读它,我想它会非常感谢你!
    猜你喜欢
    • 1970-01-01
    • 2020-06-27
    • 2014-04-04
    • 1970-01-01
    • 2015-11-05
    • 2018-02-07
    • 2018-01-15
    • 2022-06-16
    • 1970-01-01
    相关资源
    最近更新 更多