HTTP很快(在初始页面加载时),而HTTPS是安全的。我有一个站点example.com,只需要在用户登录时保证安全(它使用安全cookie进行身份验证)。
速度是第一印象中最重要的因素之一,我想提供普通的HTTP页面(http://example.com),然后使用Javascript懒洋洋地升级到HTTPS。
if ( location.protocol === 'http:' ) {
$.ajax({
url: 'https://example.com',
cache: true,
success: function() {
window.top.location.replace('https://example.com');
}
);
}
这样做会导致页面出现" flash"当新页面加载。有没有办法做到这一点,用户不太明显?
答案 0 :(得分:5)
闪存将来自第二个https
网址中的资源/ css /图片等的加载。
虽然http
更快,但有一些搜索引擎优化可以让公众面对网站https
的某些部分,从而解决双域问题。
如果他们在登录屏幕上并且您知道他们很快将被重定向到安全的https版本,您可以开始在https协议上预加载资产。
一些HTML5预取可能很适合,How can I preload a page using HTML5?
<link rel="prefetch" href="/path/to/prefetch" />
您可以使用https协议链接到http网站上的所有资源,无需预加载。这可能会增加不在https版本上的任何人的开销。因此,您可能只想在https上加载徽标/标题图形和css / js。这将改善感知性能,因为当域切换主要资产时,样式会像其他任何重新加载一样突然出现。
终极解决方案是将资产推送到像亚马逊网络服务这样的内容交付网络。因此,两个域都会加载相同的资源,您必须使用https
,否则当您在http
域上链接到https
时,您会收到警告。当用户切换浏览器时,已经拥有所有资产的缓存副本。这将加快页面加载速度。由于浏览器具有并发请求限制(在6到8之间),这意味着您的服务器将提供HTML等重要内容,浏览器可以同时从CDN加载资源。
回到主题,考虑协议升级,我会开始研究Google的 SPDY 。 Chrome Firefox Opera&amp; IE11有支持。它比HTTP或HTTPS安全且 更快 。再加上一些装载CDN的WEBP图形,你将面临接近光速的危险。 http://en.wikipedia.org/wiki/SPDY#Browser_support_and_usage
答案 1 :(得分:-1)
你想要你只能在php中完成它。
if($_SERVER['SERVER_PORT'] != 443) {
$url = "https://{$_SERVER[HTTP_HOST]}{$_SERVER[REQUEST_URI]}";
header("Location: $url");
exit;
}