从输入url到页面(一):URL与DNS

浏览器引擎默认:webkit内核javascript

1、输入地址

  当咱们开始在浏览器中输入网址的时候,现代浏览器就能够智能的匹配完整 url了,它会从历史记录,书签等地方,找到已经输入的字符串可能对应的 url,而后给出智能提示,让你能够补全url地址。html

  若是输入的地址和候选项很匹配,在敲下回车以前,chromium就能够开始尝试创建TCP连接,chrome 的浏览器,他甚至会直接从缓存中把网页展现出来。前端

  一、主机名扩展。将输入的主机名扩展为完整的主机名,如输入baidu,浏览器会尝试插入www. 和 .com。但此技巧可能会为其余HTTP应用程序带来问题,好比代理,详见第6节。java

      二、历史扩展。即从历史记录中进行匹配,给出完整的选项建议。web

 

2、URL解析

  URI:统一资源标识符,目前主要子集是URL统一资源定位符,另外还有处于试验阶段的URN统一资源名称。算法

 

  (一)URL组成

  把URL分割成几个部分:方案协议、主机名、资源路径等。chrome

    协议是规定如何访问指定资源的主要标识符,常见的是HTTP、HTTPS、FTP,不一样协议有不一样的通信内容格式;浏览器

    其中主机名指示服务器的位置,能够是域名或者IP地址,能够包括端口号,不少协议都有默认的端口号,HTTP的默认端口是80 ;缓存

    资源路径指示资源位于服务前的什么位置。安全

  还有详细的URL组件包括:

  一、用户名和密码。例如FTP服务器须要携带,如未提供,浏览器会插入默认的值。

  二、参数。每一个路径段能够有本身的参数值。以分号;分割,key=value形式。

  例如:

http://www.xxx.com/hammers;sale=false/index.html;graphics=true

 

  三、查询字符串。?item=1223

  四、片断。URL的hash值,对于大型的文本页面,能够指定资源的肯定锚点位置。客户端不会将其传送给服务器,浏览器获取整个资源后,会根据hash值显示指定的内容。它的改变不会向服务器发送请求,单页面应用经常使用于实现前端路由。

 

  (二)相对URL

  URL有两种方式:绝对和相对的。绝对URL包含有访问资源的所有信息。相对URL是不完整的,必须相对于另外一个base基础URL进行解析,能够保持一组资源的可移植性。

  一、基本URL的形式,权重递减:

     在资源中显式提供,html中的标记 <base>;封装资源的URL。

  二、解析相对引用。将其分解成组件,和基础URL进行合并算法。

  

  (三)将来展望

  PURL永久统一资源定位符,使用URL来实现URN功能的一个例子。在搜索资源的过程当中引入另外一个中间层,经过一个中间资源定位符服务器对资源的实际URL进行登记和跟踪。

 

3、DNS解析

  (一)解析过程

  Chromium中使用HostResolverImpl类来解析域名,调用的函数是阻塞式的,使用单独线程来处理它,因此对性能优化有必定的影响。

  这一步包括 DNS 具体的查找过程,包括:浏览器缓存->系统缓存->路由器缓存...

  一、  浏览器会检查缓存中这个域名对应的解析过的IP地址,若是缓存中有,这个解析过程就将结束。HostCache类能够保存解析后的域名,最多时会有多达1000对域名和IP的映射关系,对缓存的大小和时间都是有限制的。

  二、  查找操做系统缓存中是否有这个域名对应的DNS解析结果,在Windows中能够经过C:\Windows\System32\drivers\etc\hosts文件来设置。在开发或测试时能够将一个域名解析到一台测试服务器上,这样不用修改任何代码就能测试到单独服务器上的代码的业务逻辑是否正确。正是由于有这种本地DNS解析的规程,因此黑客就有可能经过修改你的域名解析来把特定的域名解析到它指定的IP地址上,致使这些域名被劫持。

  三、  查询DNS域名服务器。网络配置中都会有"DNS服务器地址",操做系统会把这个域名发送给这里设置的LDNS,也就是本地区的域名服务器。这个DNS一般都提供给你本地互联网接入的一个DNS解析服务。这个专门的域名解析服务器,通常都会缓存域名解析结果。大约80%的域名解析都到这里就已经完成了,因此LDNS主要承担了域名的解析工做。

  四、  若是LDNS仍然没有命中,就直接到Root Server域名服务器请求解析。

  五、  根域名服务器返回给本地域名服务器一个所查询域的主域名服务器(gTLD Server)地址。gTLD是国际顶级域名服务器,如.com、.cn、.org等,全球只有13台左右。

  六、  本地域名服务器(Local DNS Server)再向上一步返回的gTLD服务器发送请求。

  七、  接受请求的gTLD服务器查找并返回此域名对应的Name Server域名服务器的地址,这个Name Server一般就是你注册的域名服务器,例如你在某个域名服务提供商申请的域名,那么这个域名解析任务就由这个域名提供商的服务器来完成。

  八、  Name Server域名服务器会查询存储的域名和IP的映射关系表,正常状况下都根据域名获得目标IP记录,连同一个TTL值返回给DNS Server域名服务器。

  九、  返回该域名对应的IP和TTL值,Local DNS Server会缓存这个域名和IP的对应关系,缓存的时间由TTL值控制。

  十、 把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束。

  

  (二)DNS性能优化

  一、减小链接重定向。屡次解析,阻碍DNS预提取技术的应用。

       二、DNS预取机制。开发者能够指定须要预取的URL,

                   <link rel=”dns-prefetch” href=”http://xxxx”>

  三、  搭建支持SPDY协议的服务器。

  解决网络延迟和安全性问题,新的会话层协议,位于http与tcp之间。核心思想为多路复用,仅适用一个链接来传输一个网页中的众多资源,提升tcp链接的利用率;根据资源的特性和优先级,能够调整这些资源请求的优先级;适用压缩技术,减小字节数;发送网页时,提早发送信息给浏览器,告知以后可能须要哪些内容

  四、  避免错误、无用的连接请求,避免占用网络资源。

相关文章
相关标签/搜索