浏览器开启了 HSTS(HTTP Strict Transport Security)功能,它会告诉浏览器只能通过 https 访问,绝对禁止 http 方式,所以浏览器中输入http 后自动转成了 https。
疑问:如何得知浏览器是否开启了此功能?
原因:项目内需要跳转到新标签页,浏览器强制转换协议会报错(502)
浏览器开启了 HSTS(HTTP Strict Transport Security)功能,它会告诉浏览器只能通过 https 访问,绝对禁止 http 方式,所以浏览器中输入http 后自动转成了 https。
疑问:如何得知浏览器是否开启了此功能?
原因:项目内需要跳转到新标签页,浏览器强制转换协议会报错(502)
HSTS 应该是浏览器默认就“支持”的
项目内需要跳转到新标签页,浏览器强制转换协议会报错(502)
HSTS是不是要开启,开启什么策略,这个是需要WEB服务器告诉浏览器的(通过返回的响应头Strict-Transport-Security
来开启HSTS )。
项目跳转到新标签页会报错(502),这个按理报错说和 HSTS 没有任何关系。
开启了HSTS后(响应头里面设置了Strict-Transport-Security),最直接的影响是:浏览器收到了Strict-Transport-Security这个请求头的信息后,然后后续再访问的这个域名,就只会使用HTTPS协议去访问。
在正常情况下,在chrome浏览器中,没有开启HSTS时,如果证书错误,chrome浏览器会提示“隐私设置错误”,这个时候点击“高级”还可以继续访问证书错误的网站。
如果这个时候开启了HSTS,chrome浏览器也会提示“隐私设置错误”,但是不会给提示让用户继续访问。
上面就是最明显的一个开启了HSTS和不开启HSTS的区别。
在没有HSTS这个机制的情况下,可能用户每次访问的都是HTTP协议,所以即使服务端第一时间重定向到HTTPS,中间人还是可以获取到重定向之前的请求信息。有了HSTS之后,除了第一次服务端可能收到HTTP协议的请求,后续客户端发起的请求都会是HTTPS。
10 回答11.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
不知道你为什么要这样做。如果想要强制别人访问HTTPS,你可以在Nginx之类的HTTP服务上面做转发,把HTTP请求重定向到HTTPS上面。