此问题与混合内容错误无关。即将推出一个网站。当我从http://example.com导航到https://example.com时,我注意到css / js / etc被重载,因为我正在使用根相对路径:。
使用http嗅探器,我发现浏览器认为https://www.example.com/_css/main.css与http://www.example.com/_css/main.css不同(不是)。因此,相同的确切内容被下载两次,导致站点看起来从http导航到https缓慢(如果用户没有两个版本都已缓存)。
反正有没有阻止这个?用户几乎总是会首先点击该站点的非ssl版本,因此是否有一个脚本会等到加载http内容,而不是强制将https版本强制进入用户缓存?或者我应该在任何页面和每个css背景图像上使用绝对路径(https://www.example.com/_css/main.css)(只有2个我使用精灵)。或者我们只是忍受它?感谢。
答案 0 :(得分:4)
使用http嗅探器,我发现浏览器认为https://www.mysite.com/_css/main.css与http://www.mysite.com/_css/main.css不同(不是)。
这是一个内容相同的不同资源。浏览器无法知道它们将具有相同的内容。
您可以将(使用301)从一个重定向到另一个,这样您就没有非SSL版本。
有没有办法阻止这个?
不是。
用户几乎总是首先点击该站点的非ssl版本,所以是否有一个脚本会等到加载http内容,而不是强制将https版本强制进入用户缓存?
没有。如果URL可以预先缓存任意其他URL的内容,那将是一个可怕的安全问题。
或者我应该在任何页面和每个css背景图像上使用绝对路径(https://www.mysite.com/_css/main.css)(只有2个我使用精灵)。
这样可行,但会导致混合内容问题。
或者我们只是忍受它?
是
答案 1 :(得分:1)
有几种方法可以解决这个问题。
使用base tag。然后使用相对路径为您的资源和缓存将被认为适用于http和https,但实际上它只是加载到https上。 Demonstration
<base href="https://example.com/" />
当用户以Apache方式点击网站时,将所有内容重定向到SSL(Redirect SSL)
Redirect permanent / https://example.com/login
答案 2 :(得分:0)
您可以使用.htaccess RewriteRule每次加载https内容;或者html的http版本中指定的重定向标题会更慢(额外的往返),但我相信也是如此。
答案 3 :(得分:0)
使用协议相对路径。
而不是这个
<link rel="stylesheet" href="http://domain.com/style.css">
<link rel="stylesheet" href="https://domain.com/style.css">
使用此
<link rel="stylesheet" href="//domain.com/style.css">
然后它将使用父页面的协议。
答案 4 :(得分:-1)
您可以在没有协议说明符的情况下引用文件,例如:
<link rel="stylesheet" type="text/css" href="//mysite.com/_css/main.css" />
有关详细信息,请参阅此帖: