混合内容与鹈鹕

时间:2018-02-20 15:26:40

标签: https cloudflare pelican

  

TL; DR

     

My Pelican blog通过HTTPS提供,但由于混合内容"未加载CSS,即使它们在页面源中显示为HTTPS。

上下文

我在GitHub页面上有一个Pelican博客。我有一个自定义域的CNAME记录,指向此博客。

目标

我尝试使用HTTPS来实现此博客的服务,这是可能的with CloudFlare(GitHub支持告诉我它是目前唯一的解决方案)。

问题

按照指示设置所有内容后,我可以安全地访问我的博客,但CSS未加载,因为它们被指示为混合内容。

Console errors

但是,当我查看页面源代码时,所有CSS都应该使用HTTPS提供(因为它包含在协议相对URL中):

<head>
    <meta charset="utf-8">
    ...
    <link href="//nonatomiclabs.github.io/theme/css/ipython.css" rel="stylesheet">
    <link href="//nonatomiclabs.github.io/theme/css/bootstrap.min.css" rel="stylesheet">
    <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css" rel="stylesheet">
    <link href="//nonatomiclabs.github.io/theme/css/local.css" rel="stylesheet">
    <link href="//nonatomiclabs.github.io/theme/css/pygments.css" rel="stylesheet">
</head>

我尝试将Pelican SITEURL变量设置为//nonatomiclabs.github.iohttps://nonatomiclabs.github.io,这不会改变任何内容(因此问题不在于使用协议相对URL)。

CloudFlare还有一个&#34;自动HTTPS重写&#34;功能应该摆脱/减少混合内容问题,但在我的情况下没有帮助。

问题

  1. 浏览器(至少Chrome和Safari)如何显示包含HTTPS或协议相关网址的网页源,但这些网址似乎不受尊重?
  2. 谁是&#34;负责任的&#34;对于这个问题? Pelican,CloudFlare,浏览器等?
  3. 如何解决问题?
  4. 如果需要查看代码:

1 个答案:

答案 0 :(得分:3)

您的问题的答案:

  1. 很可能并非浏览器不尊重HTTPS网址,而是域名重定向会导致未加密的HTTP链接。

  2. GitHub页面,CloudFlare和相关域重定向的某些组合很可能是问题的原因。

  3. 可能的解决方案如下。

  4. 首先,尝试在HTML内使用https:明确预设静态资产链接,而不是依赖SITEURL设置,看看是否有任何变化。

    其次,唯一失败的资源是那些以https://nonatomiclabs.github.io开头的资源 - 似乎对该域的请求被重定向到https://www.nonatomiclabs.com,并且该重定向可能是原因这个问题。尝试使用不重定向的域。例如:

    <link href="https://www.nonatomiclabs.com/theme/css/local.css" rel="stylesheet">
    [...]
    

    对于我的个人Justin Mayer网站的价值,我的base.html模板的CSS链接与yours类似。我在我的publishconf.py设置文件中将SITEURL设置为https://justinmayer.com,结果输出包含不产生混合内容警告的正确的完全限定链接(即非协议相关链接)

    除此之外,protocol-relative URLs are considered to be an anti-pattern,因为它们在无处不在的TLS世界中基本上已经过时,特别是在即将到来的7月Google Chrome 68 marks all unencrypted HTTP requests as insecure时。)

    另一方面,有迹象表明GitHub Pages might soon support HTTPS,因此您最终可以通过HTTPS在没有CloudFlare的情况下为您的网站提供服务。