grails - 通过内容分发网络使资源陷入困境:如何避免内容混合?

标签 grails cdn

当使用grails资源插件通过诸如Amazon CloudFront之类的内容交付网络提供资源时,您如何处理使用HTTP和HTTPS访问页面的情况?

如果CDN基本URL是HTTP,则HTTPS页面将导致混合内容警告。

据我所知,资源插件仅允许单个映射,而我看不到在资源taglib中对生成的URI进行后处理的方法。

最佳答案

这是基于资源1.2.1插件的更新版本。 metaMethod在此版本中有所不同。同样,先前的代码用CDN版本替换了所有资源。如果您有从其他地方提取的资源(例如google jquery cdn),则先前的代码将用配置中的google cdn替换。

以前的版本也仅从http到https,反之亦然。如果proxy.request.scheme是http,则此新版本对http cdn条目使用第二个配置参数。如果您使用的是Amazon cloudfront之类的东西,而您为HTTP请求支付更多费用,则此功能很有用。

def originalResolveResourceAndURI = ResourceTagLib.metaClass.getMetaMethod('resolveLinkUriToUriAndResource', [Object])
ResourceTagLib.metaClass.resolveLinkUriToUriAndResource = {args ->
    def result = originalResolveResourceAndURI.invoke(delegate, args)
    String resourceUri = result.uri

    if (resourceUri.startsWith(grailsApplication.config.grails.resources.cdn.http) && delegate.request?.scheme == 'https') {
        result.uri = (resourceUri =~ /http:\/\/[^\/]*/).replaceFirst(grailsApplication.config.grails.resources.cdn.https)
    }
    else if (resourceUri.startsWith(grailsApplication.config.grails.resources.cdn.https) && delegate.request?.scheme == 'http') {
        result.uri = (resourceUri =~ /https:\/\/[^\/]*/).replaceFirst(grailsApplication.config.grails.resources.cdn.http)
    }
    result
}

关于grails - 通过内容分发网络使资源陷入困境:如何避免内容混合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12841031/

相关文章:

javascript - 未定义来自谷歌 CDN 的 jquery

reactjs - 带有React的AWS CDN上的CORS问题

mysql - 复制关系表数据

javascript - 如何在使用 Grails 3.3.2 的 war 版本中不生成 .gz 文件

javascript - jwplayer 从 yell cdn 流式传输

javascript - Twitter Bootstrap 背景图像未显示在本地主机上

grails - Grails-如何使一段代码仅在功能测试期间运行

grails - 不能在Intellij 14.1 CE中导入Grails和Gradle

grails - IOS的foursquare oauth2

html - Bootstrap 3 字形 CDN