Javascript 延迟升级到HTTPS(TLS/SSL)

Javascript 延迟升级到HTTPS(TLS/SSL),javascript,html,ssl,https,Javascript,Html,Ssl,Https,HTTP是快速的(在初始页面加载时),而HTTPS是安全的。我有一个网站example.com,只有在用户登录时才需要安全(它使用安全cookies进行身份验证) 由于速度是第一印象中最重要的因素之一,我想为正常的HTTP页面()提供服务,然后使用Javascript懒洋洋地升级到HTTPS if ( location.protocol === 'http:' ) { $.ajax({ url: 'https://example.com', cache:

HTTP是快速的(在初始页面加载时),而HTTPS是安全的。我有一个网站example.com,只有在用户登录时才需要安全(它使用安全cookies进行身份验证)

由于速度是第一印象中最重要的因素之一,我想为正常的HTTP页面()提供服务,然后使用Javascript懒洋洋地升级到HTTPS

if ( location.protocol === 'http:' ) {
    $.ajax({
        url: 'https://example.com',
        cache: true,
        success: function() {
            window.top.location.replace('https://example.com');
        }
    );
}

这样做会导致页面在加载新页面时“闪烁”。有没有一种方法对用户来说不那么明显?

闪存将来自第二个
https
url加载的资产/css/图像等

虽然
http
速度更快,但让网站面向公众的部分
https
有SEO好处,这将解决双域问题

预取 如果它们出现在登录屏幕上,并且您知道它们很快就会被重定向到安全的https版本,那么您可以开始在https协议上预加载资产

一些HTML5预取可能会很好

使用https一致地链接到资产 您可以使用https协议链接到http站点上的所有资产,无需预加载。这可能会给不在https版本上的任何人增加开销。因此,您可能只想通过https加载徽标/标题图形和css/js。这将改善感知性能,因为当域切换时,主要资产和样式将像任何其他重新加载一样迅速就位

CDN 最终的解决方案是将这些资产推出一个类似亚马逊Web服务的内容交付网络。因此,两个域加载相同的资产,您必须使用
https
,否则在
https
域上链接到
http
时会收到警告。当用户切换时,浏览器将已经保存所有资产的缓存副本。这将加快页面加载速度,使其通常达到。由于浏览器的并发请求限制(介于6-8之间),这意味着您的服务器将提供诸如HTML之类的重要内容,并且浏览器可以同时从CDN加载资产

斯普迪 回到话题上来,考虑到协议升级,我将开始研究谷歌的SPDY。Chrome Firefox Opera和IE11支持。它比HTTP或HTTPS更安全、更快。再加上一些从CDN加载的WEBP图形,你将面临接近光速的危险。
闪存将来自第二个
https
url加载的资产/css/图像等

虽然
http
速度更快,但让网站面向公众的部分
https
有SEO好处,这将解决双域问题

预取 如果它们出现在登录屏幕上,并且您知道它们很快就会被重定向到安全的https版本,那么您可以开始在https协议上预加载资产

一些HTML5预取可能会很好

使用https一致地链接到资产 您可以使用https协议链接到http站点上的所有资产,无需预加载。这可能会给不在https版本上的任何人增加开销。因此,您可能只想通过https加载徽标/标题图形和css/js。这将改善感知性能,因为当域切换时,主要资产和样式将像任何其他重新加载一样迅速就位

CDN 最终的解决方案是将这些资产推出一个类似亚马逊Web服务的内容交付网络。因此,两个域加载相同的资产,您必须使用
https
,否则在
https
域上链接到
http
时会收到警告。当用户切换时,浏览器将已经保存所有资产的缓存副本。这将加快页面加载速度,使其通常达到。由于浏览器的并发请求限制(介于6-8之间),这意味着您的服务器将提供诸如HTML之类的重要内容,并且浏览器可以同时从CDN加载资产

斯普迪 回到话题上来,考虑到协议升级,我将开始研究谷歌的SPDY。Chrome Firefox Opera和IE11支持。它比HTTP或HTTPS更安全、更快。再加上一些从CDN加载的WEBP图形,你将面临接近光速的危险。

如果需要,您只能用php完成

if($_SERVER['SERVER_PORT'] != 443) {
  $url = "https://{$_SERVER[HTTP_HOST]}{$_SERVER[REQUEST_URI]}";
  header("Location: $url");
  exit;
}

如果需要,只能用php实现

if($_SERVER['SERVER_PORT'] != 443) {
  $url = "https://{$_SERVER[HTTP_HOST]}{$_SERVER[REQUEST_URI]}";
  header("Location: $url");
  exit;
}

2009年的这篇文章建议不要升级到SPDY,因为强制SSL加密和gzip压缩会产生开销,这“将比传统HTTP更严重地打击服务器和客户端CPU”显然,这在很大程度上取决于您的特定网站和用户群,但如果您只想避免在新页面加载时出现“flash”,那么这可能是您需要考虑的一个因素。如果您希望通过更快地加载页面来减少页面加载引起的闪烁,则需要将页面加载时间保持在最接近毫秒的范围内,以使人眼无法察觉。这个数字通常只有几毫秒。来自维基百科的“当人们看到一个亮着的显示器时,如果是16毫秒或更长的时间,人们开始注意到黑暗的短暂中断。”谷歌的另一项加速下载和渲染的计划。“使用mod pagespeed,谷歌说,通常可以将大型网站的下载时间减少一半。”关于内容交付网络解决方案,请确保通过HTTPS提供的资源可以缓存。2009年的这篇文章建议不要升级到SPDY,因为强制SSL加密和gzip压缩会产生开销,这“将比传统HTTP更严重地打击服务器和客户端CPU”显然,这在很大程度上取决于您的特定网站和用户群,但如果您只想避免在新页面加载时出现“flash”,那么这可能是您需要考虑的一个因素。如果要使页面加载引起的闪存