【问题标题】:Why would the rendering of my CSS styles change when using SSL?为什么使用 SSL 时我的 CSS 样式的呈现会发生变化?
【发布时间】:2015-08-23 09:35:10
【问题描述】:

我正在更新我的服务器以通过 HTTPS 而不是 HTTP 访问我的 Web 应用程序。它工作正常,但我的一些 CSS 样式呈现不同。

  • CSS 文件正在加载 - 大部分我的样式都在那里。
  • 没有关于资产未能在控制台中加载的报告。
  • 所有网址均已更新为 HTTPS。

如果由于代码中的 URL 不正确(HTTP 而不是 HTTPS)而失败,则它不会显示在浏览器中。

例如,我使用的是Bootstrap,而我有一个split button dropdown。在非 HTTPS 站点上,它看起来是正确的;在 HTTPS 站点上,它使用右侧的按钮(带有插入符号)呈现它应该是高度的 1/2。我已经通过浏览器深入研究了元素,看起来似乎没有正确计算子元素的高度。边距、内边距和字体大小都相同。

我已经使用 Chrome 的开发者控制台逐步检查了 DOM,并将工作版本与不正确的版本并排比较,我找不到差异。

我在 Chrome 和 Firefox 中都打开了该页面,并在两者中都发现了相同的问题。

我可能遗漏了一些简单的东西,但我不知道它是什么。有什么建议吗?

编辑

另一个线索浮出水面:我遇到了this answer to a different question 并检查了DOCTYPE。事实证明,HTTP 站点的开头有一个 doctype 标签:` 但 HTTPS 站点没有(这很奇怪,因为它在我的代码中)。所以这是一个重要的区别,我将做更多的工作来确定该标签的去向。 FWIW,我正在使用 Apache2 通过 URL 重写的反向代理服务页面...

【问题讨论】:

  • 可能是样式表通过 HTTP 拉取被阻塞的资源,使用 @import@font-face?通常控制台会报告这样的块。
  • 是的,我已经检查了控制台 - 没有任何被阻止的报告。

标签: html css https


【解决方案1】:

事实证明 DOCTYPE 是问题所在。显然,当使用mod_proxy_html 充当反向代理时,Apache 会默认从页面中删除 DOCTYPE。我找到了基本解决方案here,然后查看official documentation 了解详细信息。

【讨论】:

    【解决方案2】:

    尝试将您在 CSS 资源中的 URL 中的任何协议更改为 HTTPS 或将其留空:

    http://somedomain.com/style.css => https://somedomain.com/style.css
    

    http://somedomain.com/style.css => //somedomain.com/style.css
    

    这可以在您的 HTML 或 CSS 文件中的任何 URL 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 2015-08-19
      • 2021-12-18
      • 2018-08-08
      • 1970-01-01
      相关资源
      最近更新 更多