想当年没有HTTPS的是时候,咱们在浏览器输入一个域名,请求服务器内容,正常状况下能够进行数据的返回。可是若是在浏览器和服务器之间出现劫持者,也就是中间人劫持或者中间人攻击,咱们的数据就会被劫持篡改。自从有了HTTPS,感受放心很多,可是有了HTTPS咱们的请求难道就高枕无忧了吗?web
在咱们平时访问网页时。咱们通常不会在地址栏输入 www.fenqile.com而是习惯性输入 fenqile.com,此时浏览器走的是 http,请求到达服务器以后,服务器告诉浏览器 302 跳转。而后浏览器从新请求,经过 HTTPS 方式,443 端口通信。 chrome
而正由于用户不是直接输入 // 连接,劫持者利用这一点:也能够进行一个劫持的操做 首先劫持用户的 80 端口,当用户向目标页发起请求时,劫持者模拟正常的 https 请求向源服务器获取数据,而后经过 80 端口返回给用户。 浏览器
这种劫持出如今两种状况下:缓存
HTTP Strict Transport Security (一般简称为HSTS) 是一个安全功能,它告诉浏览器只能经过HTTPS访问当前资源, 禁止HTTP方式。安全
HTTP Strict Transport Security (HSTS) is an opt-in security enhancement that is specified by a web application through the use of a special response header. Once a supported browser receives this header that browser will prevent any communications from being sent over HTTP to the specified domain and will instead send all communications over HTTPS. It also prevents HTTPS click through prompts on browsers. The specification has been released and published end of 2012 as RFC 6797 (HTTP Strict Transport Security (HSTS)) by the IETF.服务器
HSTS这个过程有效避免了中间人对 80 端口的劫持。可是这里存在一个问题:若是用户在劫持状态,而且没有访问过源服务器,那么源服务器是没有办法给客户端种下 Strict-Transport-Security 响应头的(都被中间人挡下来了)。app
步骤1:访问域名http://passport.oa.fenqile.com,两次请求,地址进行302重定向。 运维
为何咱们要求在未清空chrome浏览器的缓存前访问呢? 由于若是清空了chrome浏览器的缓存以后,咱们手动加入到hsts缓存中的域名就会被清除,也就不会看到预期的效果了。dom
手动设置域名的HSTS,这里你们可能会问,passport.oa.fenqile.com 这个域名你自己就会设置HSTS并跳转到HTTPS上呀,你的截图是假的。这里我须要解释一下,为了进行这个测试,我求了运维大哥,请求他短暂的进行了设置(不进行HSTS的设置和HTTPS的强跳转),才成功的进行了实验。测试
谢谢你们!但愿和你们一块儿成长!