当我们在浏览器中输入 URL 时,它默认使用 HTTP,但如果服务器只支持 HTTPS,流量是否会在用户不注意的情况下自动重定向到 https?
我对吗?
如果错了,请纠正我。
当我们在浏览器中输入 URL 时,它默认使用 HTTP,但如果服务器只支持 HTTPS,流量是否会在用户不注意的情况下自动重定向到 https?
我对吗?
如果错了,请纠正我。
不,目前没有主流浏览器会自动重定向到 HTTPS。
网站可以设置HSTS 标头来告诉浏览器他们应该自动重定向到 HTTPS 以应对未来的请求,或者他们可以将自己注册到 HSTS 预加载列表中,用户可以安装浏览器插件以始终基于白名单加载 HTTPS甚至始终尝试首先是 HTTPS。所有这些都是可选的,无论是网站还是用户都必须做一些事情来让浏览器这样做。在其默认配置中,如果没有用户或网站的明确操作,主流浏览器都不会自动使用 HTTPS。
不。
您必须将 HTTP 流量显式重定向到 HTTPS,这涉及使用返回HTTP 301
状态代码和以https://
.
因此,例如在 Nginx 中,您将编写如下内容:
server {
listen 80;
server_name my.domain.com;
return 301 https://$server_name$request_uri;
}
此外,您可以将 Http Strict Transport Security (HSTS) 标头添加到您在 HTTPS 端口上收到的请求的响应中。这将确保浏览器将所有随后的请求发送到 HTTPS 端口。
同样,在 Nginx 中你会这样做:
server {
listen 443 ssl;
server_name my.domain.com;
add_header Strict-Transport-Security "max-age=31536000";
}
一些网站使用HSTS,它基本上可以满足您的要求。如果用户尝试访问一些随机http://example.com
的,HSTS 会将请求转换为https://example.com
. 但是,该网站需要有一个有效的证书才能正常运行。
“如果服务器只支持 HTTPS”,那么所有流量都应该由服务器路由到 https。
如果主机服务器同时支持这两种方式,那么可以通过几种方法来优先选择 https,例如。DNS 重定向(通过域主机)、Web 主机的服务器指令(通过 .htaccess 文件的 301/302)、应用程序重定向(服务器端脚本,例如 perl/php 脚本)或客户端重定向(javascript/元刷新)。在这些情况下,如果有人通过 http 访问页面,他们将通过https(自动)接收页面。
php 文件中的脚本重定向示例(您无法控制主机服务器):
<?php
if ($_SERVER["SERVER_PORT"] == 80 && $_SERVER["REQUEST_SCHEME"] == "http") {
header('Location: https://your.domain.url', TRUE, 301);
}
?>
<html>
<head>
...
</html>
如果以上都没有部署,通过不支持的协议访问页面将给出 500、501、403 或 404 错误,或者只是无法加载,在浏览器中显示“ERR_CONNECTION_REFUSED”。在这些情况下,用户可以自己在 Web 浏览器中输入 https 以确保通过 ssl/tls 传输数据,或者安装浏览器插件之类的帮助程序(将 url 替换为 https://url)