与鹈鹕的混合内容

Mixed Content with Pelican

TL;DR

My Pelican blog is served through HTTPS but CSSs are not loaded because of "mixed content", even though they appear in the page source as HTTPS.

上下文

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

目标

我正在尝试使用 HTTPS 为该博客提供服务,这是可能的 with CloudFlare(GitHub 支持人员告诉我这是目前唯一的解决方案)。

问题

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

但是,当我查看页面源代码时,所有 CSS 都应使用 HTTPS 提供(因为它包含在 protocol-relative 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 并且这不会改变任何东西(所以问题不是由于使用 protocol-relative 网址)。

CloudFlare 也有一个 "Automatic HTTPS Rewrites" 功能,应该可以解决 rid/reduce 混合内容问题,但对我来说没有帮助。

问题

  1. 浏览器(至少 Chrome 和 Safari)如何显示带有 HTTPS 或 protocol-relative URL 的页面源代码,但这些似乎不受尊重?
  2. "responsible"谁来解决这个问题? Pelican、CloudFlare、浏览器等等?
  3. 如何解决问题?

如需查看代码:

您问题的答案:

  1. 很可能不是浏览器不遵守 HTTPS URL,而是域 re-direction 导致未加密的 HTTP 链接。

  2. GitHub Pages、CloudFlare 和关联域 re-direction 的某种组合很可能是问题的原因。

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

首先,尝试在 HTML 中明确地在静态资产链接前加上 https:,而不是依赖 SITEURL 设置,然后查看是否有任何变化。

其次,唯一失败的资源是那些以 https://nonatomiclabs.github.io — it seems that requests to that domain are being re-directed to https://www.nonatomiclabs.com 开头的资源,而 re-direction 可能是问题的原因。尝试使用不 re-direct 的域。例如:

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

为了我的个人 Justin Mayer site, my base.html template's CSS links look similar to yours. I set my SITEURL setting to https://justinmayer.com 在我的 publishconf.py 设置文件中的价值,结果输出包含正确的 fully-qualified 链接(即,不是 protocol-relative链接)不会产生混合内容警告。

顺便说一句,protocol-relative URLs are considered to be an anti-pattern, as they are essentially obsolete in a world of ubiquitous TLS, particularly when Google Chrome 68 marks all unencrypted HTTP requests as insecure 今年 7 月。)

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