欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-09 18:16:04
浏览器引擎默认:webkit内核 一、输入地址 当我们开始在浏览器中输入网址的时候,现代浏览器就可以智能的匹配完整 url了,它会从历史记录,书签等地方,找到已经输入的字符串可能对应的 url,然后给出智能提示,让你可以补全url地址。 如果输入的地址和候选项很匹配,在敲下回车之前,chromium ......

浏览器引擎默认:webkit内核

一、输入地址

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

  如果输入的地址和候选项很匹配,在敲下回车之前,chromium就可以开始尝试建立TCP链接,chrome 的浏览器,他甚至会直接从缓存中把网页展示出来。

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

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

 

二、URL解析

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

 

  (一)URL组成

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

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

    其中主机名指示服务器的位置,可以是域名或者IP地址,可以包括端口号,很多协议都有默认的端口号,HTTP的默认端口是80 ;

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

  还有详细的URL组件包括:

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

  2、参数。每个路径段可以有自己的参数值。以分号;分割,key=value形式。

  例如:

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

 

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

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

 

  (二)相对URL

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

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

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

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

  

  (三)未来展望

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

 

三、DNS解析

  (一)解析过程

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

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

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

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

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

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

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

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

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

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

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

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

  

  (二)DNS性能优化

  1、减少连接重定向。多次解析,阻碍DNS预提取技术的应用。

       2、DNS预取机制。开发者可以指定需要预取的URL,

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

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

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

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