域名、浏览器、HSTS和HTTPS的关系

1.浏览器的转换:

大家可以找一个浏览器试验一下,我用的是谷歌的chrome浏览器,当你在地址栏输入 baidu.com,然后你再按回车,你发现了什么? 对,地址栏已经把地址自动转换为  https://www.baidu.com了。这种第一种可能是服务器的重定向导致的,第二种百度的实现方式的通过返回 刷新元信息 <meta http-equiv="refresh" content="0";url=http://www.baidu.com/">,还有其他的,我就不是特别了解了。如果大家知道,可以评论里面教教小弟。

2.域名:

baidu.com和www.baidu.com是两个完全不同的域名,前者是二级域名,后者是三级域名。就是说其实后者是前者的子域名,之所以会发生跳转,只是百度财大气粗把两个域名都买下来了。其实网址还有一个根域,就是最后会有一个.,但是通常都会省略的。ipv4有8台根服务器,主根服务器在美国,辅助根服务器其他国家也有分布。ipv6有3台主根服务器,分别部署在中日美,辅助根服务器的部署感兴趣的可以网上查一下。三级域名的解析就可以由百度自己来实现了。

3.域名的解析过程:

域名的解析是通过DNS来解析的,它是按照层级关系进行解析的。比如百度,他会先解析.com的一级域名对应的地址,然后再来到二级域名baidu.com,对他进行解析。注意这个时候就会跳到百度自己的dns上面,因为大公司都会有能力架构自己的dns系统,之后百度就可以通过cdn技术来为用户提供鞥更好的服务了。具体cdn的工作原理以后我有时间还会写一篇博客的。

4.为什么域名前面要加上www?

以www.baidu.com为例,中间的baidu是公司的拼音(听说是来自众里寻他千百度,不知道真假),后面的com代表这是一个商业的网站,还有想cn、gov、net都可以作为后缀。后缀是属于顶级域名,理论上是可以自定义的,但是需要向域名管理机构ICANN申请。但是前面为什么要加上www呢?域名越短不是越有利于用户记住吗?这个问题我是看了网上的几篇文章才有了一知半解。原来早期的互联网只有一些大公司才会自己搭建的服务器,那么这一台服务器可能需要做好多事情,怎么可以简单的区分出来呢?有人想出来www开头代表请求一个http服务的,ftp开头的是请求文件服务的的,mail开头的是邮箱服务的。所以那个时候www只是代表我需要请求的是一个网页服务,而不是文件服务也不是邮件服务。

www的英文是worldwideweb,翻译过来就是万维网。他的含义当年定义为它是基于html超文本标记语言和http传输协议为基础的提供的一种网页服务。但是现在科技迅猛发展,他还有实际存在的意义吗?答案是肯定的,只是和以前的作用不同罢了。现在一个域名后面有很多台服务器支撑,也不需要通过前缀来确定提供服务的种类了。现在网关可以做到上述的要求了,具体我以后也会学习并分享。现在使用只是为了更加易与人们理解罢了。就像csdn的前缀就是blog,代表博客服务的。前缀是可以自定义的。

5.域名跳转带来的安全问题

浏览器默认是以http的方式进行通信的,那如果我的网站升级为了https后我该如何让浏览器发起https请求呢?第一种方式就是在niginx上配置重定向301(永久重定向,浏览器会缓存,缓存时间不定,用户可以手动清除)或者302暂时重定向状态码返回给浏览器。但是如果这样总会在不定的时间内浏览器会发送一次http明文请求,这时候如果有居心叵测的人就可以拦截你的http请求,造成安全问题。

6.HSTS

hsts的全称是http严格传送协议,解释为了解决上述问题。通过这个协议,服务器可以在返回头加上

Strict-Transport-Security: <max-age=>[; includeSubDomains][; preload]  那么浏览器就会这个进行解析。

max-age:这个是代表有效时间的意思,就是这段时间内浏览器都会默认直接发起https请求。如果你每次都会返回这个头部的话,这个时间会一直累加。但是有个问题需要注意,如果没有使用hsts的网站,你的证书出现了问题,那么浏览器会给用户警告,但是用户可以忽略警告继续访问你的网站,但是如果你启用了hsts协议,那么浏览器会警告用户并且会禁止用户继续访问你的网站。所以这个值得设置要小心。

includeSubDomains:这个意思就是包含子域名的意思。

preload:这个参数是可选的,这里可以填写自己的其他网址加入浏览器的内置列表。这个下面再讲。

7.继续进行防护,浏览器内置列表。

即使启用了hsts,那么浏览器至少还会发送一次http请求,这个请求还是有可能被劫持。有没有一种方法可以让浏览器直接发起https请求呢。可以,就是上面的可选参数就可以把网址加入到内置列表里面,这个列表是google维护的,其他的一些浏览器也会支持这个列表。除了上面的方法还可以通过HSTS Preload List的官网进行申请。这个东西可不是随便申请的。他需要你符合下面的规范才可以申请

1.具备一个有效的证书

2.在同一台主机上提供重定向响应,以及接收重定向过来的HTTPS请求

3.所有子域名均使用HTTPS

4.在根域名的HTTP响应头中,加入HSTS Header,并满足下列条件:

过期时间最短不得少于18周(10886400秒)

必须包含includeSubDomains参数

必须包含preload参数    摘抄自(https://www.jianshu.com/p/caa80c7ad45c

谷歌浏览器可以在chrome://net-internals/#hsts查询,我查了国内的大型网站都加这个内置列表了。

最后一句话,有错误的话换用大家指正。



 

猜你喜欢

转载自blog.csdn.net/qq_30055391/article/details/84591077