1.浏览器判断是URL还是搜索关键字
温馨提示:这篇文章已超过649天没有更新,请注意相关的内容是否还可用!
导读
上一篇总结中涉及到的是输入URL的过程中浏览器做出的一些反馈,这一篇将总结之后发生的事情。
1.浏览器判断是URL还是搜索关键字
上一篇说到过浏览器有联想查询服务并且会根据输入内容选择搜索的方式。浏览器会去解析输入的字符串,判断是URL还是搜索关键字,要是解析为URL则开始寻求URL对应的IP地址,否则按照搜索关键字处理交给默认搜索引擎搜索。
2.解析URL
下面是参考百度百科-URL的定义给出的URL的解释
URL:(Uniform Resource Locator)统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
通俗的解释就是网络资源的地址,所有你在浏览器上加载的内容都有一个地址,这个地址就是URL。通过浏览器的开发者工具可以查看一次网页加载的时候所请求的资源,这里的每一个链接都是一个URL。
下面以一个去旅馆里找人的场景解释什么是URL。你要去旅馆找一个人你必须知道他住在那个房间,这时候房间号就是你要找的人对应的地址,也就是这个场景下的URL。
2.1常见URL格式
旅馆的房间号有着特定的编码方式,有的旅馆为了图吉利会以8开头进行编码,比如1楼1号房间会以8101的形式编码。URL编码也是这样有自己的编写规则。
URL的语法随访问资源和服务的协议不同而不同。URL的最常见的格式如下:
protocol://hostname[:port]path search hash
一个URL由不同的部分组成,其中一些是必须的,而另一些是可选的。让我们以下面这个URL为例看看其中最重要的部分:
http://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2#SomewhereInTheDocument
2.2 端口号知识小补充
一台服务器为什么可以同时是Web服务器,也可以是FTP服务器,还可以是邮件服务器等,其中一个很重要的原因是各种服务采用不同的端口分别提供不同的服务,比如:通常TCP/IP协议规定Web采用80号端口,FTP采用21号端口等,而邮件服务器是采用25号端口。这样,通过不同端口,计算机就可以与外界进行互不干扰的通信。服务器端口数最大可以有65535个,但是实际上常用的端口才几十个。
根据端口号的性质划分,可以分为3类
注册端口:端口号从1024到49151。它们松散地绑定于一些服务。比如Express启动web服务器的时候占用3000端口。动态和/或私有端口:端口号从49152到65535。理论上,不应把常用服务分配在这些端口上。实际上,有些较为特殊的程序,特别是一些木马程序就非常喜欢用这些端口,因为这些端口常常不被引起注意,容易隐蔽。2.3 URL编码
通常如果一样东西需要编码,说明这样东西并不适合传输。原因多种多样,如Size过大,包含隐私数据,对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义。Url的编码格式采用的是ASCII码,而不是Unicode,这也就是说你不能在Url中包含任何非ASCII字符,例如中文。否则如果客户端浏览器和服务端浏览器支持的字符集不同的情况下,中文可能会造成问题。所以需要对非ASCII码进行编码,这也便于后续的DNS查询。
网址URL中常见特殊字符转义编码
字符 – URL编码值
空格 – %20
” – %22
# – %23
% – %25
& – %26
( – %28
) – %29
+ – %2B
, – %2C
/ – %2F
: – %3A
; – %3B
< – %3C
= – %3D
> – %3E
? – %3F
@ – %40
– %5C
| – %7C
URL特殊字符转义,URL中一些字符的特殊含义,基本编码规则如下:
1、空格换成加号(+)
2、正斜杠(/)分隔目录和子目录
3、问号(?)分隔URL和查询
4、百分号(%)制定特殊字符
5、#号指定书签
6、&号分隔参数
如果需要在URL中用到,需要将这些特殊字符换成相应的十六进制的值
+ %2B
/ %2F
? %3F
% %25
# %23
& %26
3. DNS解析获得IP地址
经过之前的URL解析之后,能够知道我们要访问的主机名,端口号以及请求资源的路径等信息,但是还有一个问题没有解决,就是去哪获取这些资源(资源的真正地址)。
举个例子,就好比你的朋友请你吃黄焖鸡米饭(URL),你知道自己的目的地是一家叫黄焖鸡米饭的店,但是你会发现在你的附近有N多家黄焖鸡米饭,你想要再具体一点,比如说“青岛市黄岛区长江西路66号中国石油大学对面的黄焖鸡大楼(IP)”。有了这个地址你可以很轻松的找到目的地。
那为什么搞那么复杂,不直接使用IP地址要先搞个URL然后去进行域名解析呢?主要是IP地址在网络上用起来不方便,难于记忆,用域名(别称)方便一些。你可能记不住百度的IP地址,但是你能记住。从URL中解析出IP地址的过程就是DNS解析。
3.1什么是DNS
DNS具有两层含义
有三种类型的DNS服务器:根DNS服务器、顶级DNS服务器和权威DNS服务器。这些服务器以下图的层次结构组织起来。
除此之外,还有一类重要的DNS,称为本地DNS服务器。严格来说本地DNS服务器并不属于DNS服务器的层次结构,但它在整个查询的过程中却扮演着重要的角色。
3.2解析IP地址查找的顺序
(1)首先查找的是浏览器的DNS缓存
浏览器会缓存DNS记录一段时间。所以浏览器会先去查自己的缓存,要是域名在缓存中有记录则使用缓存中的IP进行下一步处理。要是没有则进行下一步查找。对于chrome可以使用chrome://net-internals/#dns查看当前缓存的DNS,不同浏览器保存的时间长短不一。
(2)查询系统缓存
如果浏览器缓存中没有,浏览器会去查找系统中记录的DNS信息。首先检查域名是否在本地 hosts 里,再查系统本地缓存的其他DNS 记录。
hosts是一个没有扩展名的系统文件,其基本作用就是将一些常用的网址域名与其对应的 IP 地址建立一个关联“ 数据库 ”。
查看windows的dns缓存的命令ipconfig /displaydns,linux如果启用了nscd 服务,才有dns 缓存,否则是没有dns缓存的
(3)查路由器缓存
如果在系统缓存里面还是没找到对应的IP,那么接着会发送一个请求到路由器上,然后路由器在自己的路由器缓存上查找记录,路由器一般也存有DNS信息(缓存你上过的网站,所以有时路由器需要进行DNS刷新)
(4) ISP DNS缓存
如果本地路由器还是没有,这个请求就会被发送到ISP(注:Internet Service Provider,互联网服务提供商联想服务器默认管理口ip,所谓的电信网,联通网和移动网),ISP也会有相应的ISP DNS服务器。
会跑到这里进行查询是因为你没有改动过”网络中心”的”ipv4”的DNS地址,万恶的运营商可以改动这个DNS服务器,换句话说他们可以让你的浏览器跳转到他们设定的页面上,这也就是人尽皆知的DNS和HTTP劫持。我们也可以自行修改DNS服务器来防止DNS被ISP污染。
这里也分享一个小技巧,在校园网环境下更改ipv6的DNS可以轻松的浏览YouTube等网站,传送门
PS:这里通过发送DNS查询报文给ISP也是很有深度的,首先你要知道ISP的IP地址。如果 DNS 服务器和我们的主机在同一个子网内,需要对 DNS 服务器进行 ARP查询;如果 DNS 服务器和我们的主机在不同的子网联想服务器默认管理口ip,则会对默认网关进行查询。ARP请求部分之后再详细的补充。
(5)递归DNS查询
如果在ISP DNS服务器还没有查到的话,那么就要进行DNS递归查询了。假设我需要的IP
首先,浏览器所在的主机向本地DNS服务器发送一个含有百度域名的DNS查询报文。本地DNS服务器把查询报文转发到根DNS服务器,该根DNS服务器注意到其com后缀并向本地DNS服务器返回com的顶级域名服务器的IP地址。该本地DNS服务器再次向comDNS服务器发送查询请求,comDNS服务器注意到其后缀并用负责该域名的权威DNS服务器的IP地址作为回应。最后,本地域名服务器将含有的IP地址的响应报文发送给客户端主机。
在本地域名服务器上找不到
这时候本地域名服务器就会到根域名服务器查找,根域名服务器说这个是一个.com域名。然后本地域名服务器就跑到管理.com域名的服务器上进行进一步查询,顶级域名服务器说是 .baidu二级域名。最后本地域名服务器再跑到管理 .baidu这个二级域名所在的权限域名服务器,去查询 www这个三级域名的ip 地址。
所以域名结构为:三级域名.二级域名.一级域名。
这里的查询过程是包含递归查询和迭代查询的,客户端主机发送给本地服务器的查询是递归查询,而后面的三个查询是迭代查询。
不是所有域名都能够查到IP的,什么原因你懂得
4.多IP域名DNS查询解决方案
并不是一个域名只能对应到一个IP地址的,IP地址是连接互联网主机的一个身份证,一般一台主机只有一个IP地址,像一些大型的网站怎么可能只有一台主机,所以多个IP是必然的。通过查询有一下几种方式来解决这个问题,自己的理解有限,只列出不深究。
循环DNS —— 单个域名、多个IP列表循环应对DNS查询 负载均衡器 —— 一个特定IP的负载均衡服务器(例如:反向代理服务器)负责监听请求并转发给后面的多个服务器集群的某一个,实现多个服务器负载均衡。 而且现在很多云服务都有提供负载均衡服务,比如AWS 的 ELB。地理DNS —— 根据用户所处地理位置,返回不同的IP(应用:CDN) anycast —— 一个IP地址映射多个物理主机的路由技术5.什么域名(补充内容)5.1域名的组成
由.分隔的字符串,每一部分有特定的含义。查看域名的时候习惯是从左往右读,但是应该从右往左理解,可以参考上边的解析过程。
主要可以分类两个部分TLD和标签
顶级域名提供了最多的信息。顶级域名告诉用户通用服务背后的域名。最通用的顶级域名(.com, .org, .net)不需要web服务器满足严格的标准,但一些顶级域名则执行更严格的政策。比如本地的顶级域名,如.us,.fr,或.sh,可以要求必须提供给定语言的服务器或者托管在指定国家。
标签都是跟随着TLD的。一个标签可以是任何东西,从一个字母到一个句子。刚好位于TLD前面的标签也被称为二级域名 (SLD)。一个域名可以有多个标签(或者说是组件),没有强制规定必须要3个标签来构成域名。例如,是一个正确的域名。当拥有了“上级”部分(例如qq.com),你还可以创建另外的域名 (有时被称为 “子域名”) (例如 mail.qq.com).
在Linux中可以使用whois命令查看域名信息
Reference