20170709_在地址栏中输入URL按下回车键以后发生了什么? 版本二

20170709_在地址栏中输入URL按下回车键以后发生了什么? 版本二

参考另一篇博客:

20170709_在地址栏中输入URL按下回车键以后发生了什么?


(1)获取域名对应的IP 地址:

首先是查找浏览器缓存,浏览器会保存一段时间你之前访问过的一些网址的 DNS 信息,不同浏览器保存的时长不等。

如果没有找到对应的记录,这个时候浏览器会尝试 调用系统缓存 来继续查找这个网址的对应 DNS 信息。

如果还是没找到对应的 IP,那么接着会发送一个请求到路由器上,然后路由器在自己的路由器缓存上查找记录,路由器一般也存有DNS 信息。

   如果还是没有,这个请求就会被发送到 ISP(注:Internet Service Provider,互联网服务提供商,就是那些拉网线到你家里的运营商,中国电信中国移动什么的),ISP 也会有相应的 ISP DNS 服务器,一听中国电信就知道这个 DNS 服务器的规模肯定不会小,所以基本上都能在这里找得到。

   如果还是没有的话, 你的 ISP 的 DNS 服务器会将请求发向 根域名服务器 进行搜索根域名服务器就是面向全球的顶级 DNS 服务器,共有13台逻辑上的服务器,从A到M命名,真正的实体服务器则有几百台,分布于全球各大洲。所以,这些服务器有真正完整的 DNS 数据库。如果到了这里还是找不到域名的对应信息,那只能说明一个问题:这个域名本来就不存在,它没有在网上正式注册过。或者卖域名的把它回收掉了(通常是因为欠费)。

   这也就是为什么打开一个新页面会有点慢,因为本地没什么缓存,要这样递归地查询下去。

多说一句,例如" mp3.baidu.com ",域名先是解析出这是个.com的域名,然后跑到管理.com域名的服务器上进行进一步查询,然后是 .baidu,最后是 mp3,

所以域名结构为:三级域名 . 二级域名 . 一级域名


(2)获取IP 地址以后,向该IP 地址的服务器发送HTTP 请求:

浏览器终于得到了 IP 以后,浏览器接着给这个 IP 的服务器发送了一个 http 请求,方式为 get 。例如访问:nbut.cn

这个 get 请求包含了主机(host)用户代理(User-Agent:用户代理就是自己的浏览器,它是你的"代理人"),Connection(连接属性)中的 keep-alive 表示浏览器告诉对方服务器在传输完现在请求的内容后不要断开连接,不断开的话下次继续请求时连接速度就很快了。

其他的顾名思义就行了。

还有一个重点是CookiesCookies 保存了用户的登陆信息,在每次向服务器发送请求的时候会重复发送给服务器

(3)发送完 HTTP 请求接下来就是等待回应了:

如下图:

当然了,服务器收到浏览器的请求以后(其实是  WEB 服务器接收到了这个请求,WEB 服务器有 iis、apache 等),

它会解析这个请求(读请求头),然后生成一个响应头和具体响应内容。

接着服务器会传回来一个响应头和一个响应,响应头告诉了浏览器一些必要的信息,例如重要的状态码 Status Code

2开头如200表示一切正常,3开头表示重定向,4开头,如404,客户端异常了,5开头,服务器异常了。

响应就是具体的页面编码,就是那个<html>......</html>,浏览器先读了关于这个响应的说明书(响应头),然后开始解析这个响应并在页面上显示出来。在下一次CF的时候(不是穿越火线,是http://codeforces.com/),由于经常难以承受几千人的同时访问,所以CF页面经常会出现崩溃页面,到时候可以点开火狐的firebug或是Chrome的F12看看状态,不过这时候一般都急着看题和提交代码,似乎根本就没心情理会这个状态吧-.-。

如果是个静态页面,那么基本上到这一步就没了。

但是如今的网站几乎没有静态的了吧,基本全是动态的。

所以这时候事情还没完,根据我们的经验,浏览器打开一个网址的时候会慢慢加载这个页面,一部分一部分的显示,直到完全显示,最后标签栏上的圈圈就不转了。



这是因为,主页(index)页面框架传送过来以后,浏览器还要继续向服务器发送请求,请求的内容是主页里面包含的一些资源,如图片,视频,css样式等等。

这些"非静态"的东西要一点点地请求过来,所以标签栏转啊转,内容刷啊刷,最后全部请求并加载好了就终于好了。



需要说明的是,对于静态的页面内容,浏览器通常会进行缓存。

而对于动态的内容,浏览器通常不会进行缓存。缓存的内容通常也不会保存很久,因为难保网站不会被改动。



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值