http切换到https


分两种情况。

第一种是会发起一次 HTTP 以及一次 HTTPS:当你访问 HTTP URL,会发起一个普通的 HTTP 请求,服务器通过某些配置,会返回一个 301 状态码,并 Location 到对应的 HTTPS URL 上。浏览器接着重定向,发起 HTTS 请求。需要补充的是,当你后面再次访问这个 HTTP 请求时,因为存在浏览器缓存,可能直接在浏览器端就重定向了,这样的话只有一个 TCP 请求。

不过由于 HTTP -> HTTPS 重定向的过程是存在安全隐患的,中间人可以以这个 HTTP 请求为突破口,让你的 HTTPS 无用武之地。

因此大家搞了一个协议,叫做 Strict-Transport-Security (HSTS)。大致意思是如果服务器在 HTTPS 请求里返回了 Strict-Transport-Security 响应头,那么后面浏览器只能通过 HTTPS 请求访问这个域名的 URL。如果用户访问了对应的 HTTP URL,浏览器会自动切换到 HTTPS URL,只会有 443,没有 80.

不过理论上这样也有隐患,那就是第一次访问某个域名,而且使用的又是 HTTP,浏览器没有相应的 HSTS 记录,所以还是会发起一次 HTTP 请求,如果正好这个时候有中间人,就不安全了。所以 Chrome 等浏览器还会预置一批 HSTS 域名名单。

posted @ 2020-03-30 10:12  甜菜波波  阅读(1470)  评论(0编辑  收藏  举报