What really happens when you navigate to a URL

*本文将深入理解当你输入一个网址的时候,后台到底发生了什么事。。。→_→*

原文传送门What really happens when you navigate to a URL

  1. 首先,在浏览器中输入网址:

在浏览器中输入网址

  • 浏览器查找域名的IP地址

  • 浏览器查找域名的IP地址

    DNS查找过程如下:

    • 浏览器缓存 – 浏览器会缓存DNS记录一段时间。 有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。

    • 系统缓存 – 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(windows里是gethostbyname)。这样便可获得系统缓存中的记录。

    • 路由器缓存 – 接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。

    • ISP DNS 缓存 – 接下来要check的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。

    • 递归搜索你的ISP的DNS服务器从跟域名服务器开始进行递归搜索。一般DNS服务器的缓存中会有.com域名服务器中的域名,所以到顶级服务器的匹配过程不是那么必要了。

    DNS递归查找如下图所示:

    浏览器给web服务器发送一个HTTP请求

    DNS有一点令人担忧,这就是像wikipedia.org 或者 facebook.com这样的整个域名看上去只是对应一个单独的IP地址。还好,有几种方法可以消除这个瓶颈:

    负载平衡器 是以一个特定IP地址进行侦听并将网络请求转发到集群服务器上的硬件设备。 一些大型的站点一般都会使用这种昂贵的高性能负载平衡器。

    地理 DNS 根据用户所处的地理位置,通过把域名映射到多个不同的IP地址提高可扩展性。这样不同的服务器不能够更新同步状态,但映射静态内容的话非常好。

    Anycast 是一个IP地址映射多个物理主机的路由技术。 美中不足,Anycast与TCP协议适应的不是很好,所以很少应用在那些方案中。

    大多数DNS服务器使用Anycast来获得高效低延迟的DNS查找。

  • 浏览器给web服务器发送一个HTTP请求

  • 浏览器给Web服务器发送一个HTTP请求

    因为像Facebook主页这样的动态页面,打开后在浏览器缓存中很快甚至马上就会过期,毫无疑问他们不能从缓存中读取。

    所以,浏览器将把请求发送到Facebook所在的服务器:

    GET http://facebook.com/ HTTP/1.1
     Accept: application/x-ms-application, image/jpeg, application/xaml+xml, [...]
     User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; [...]
     Accept-Encoding: gzip, deflate
     Connection: Keep-Alive
     Host: facebook.com
     Cookie: datr=1265876274-[...]; locale=en_US; lsd=WW[...]; c_user=2101[...]
     
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • GET 这个请求定义了要读取的URL:“http://facebook.com/

    • 浏览器自身定义 (User-Agent 头),和它希望接受什么类型的相应 (Accept and Accept-Encoding 头)。

    • Connection 头要求服务器为了后边的请求不要关闭TCP连接

    • 请求中也包含浏览器存储的该域名的cookies 。在不同页面请求当中,cookies是与跟踪一个网站状态相匹配的键值。这样cookies会存储登录用户名,服务器分配的密码和一些用户设置等。Cookies会以文本文档形式存储在客户机里,每次请求时发送给服务器。

  • 服务器的永久重定向响应
    服务器的永久重定位响应

  • 为什么服务器一定要重定向而不是直接发会用户想看的网页内容呢?

    • 搜索引擎排名有关。如果一个页面有两个地址,就像http://www.igoro.com/http://igoro.com/,搜索引擎会认为它们是两个网站,结果造成每一个的搜索链接都减少从而降低排名。而搜索引擎知道301永久重定向是 什么意思,这样就会把访问带www的和不带www的地址归到同一个网站排名下

    • 用不同的地址会造成缓存友好性变差。当一个页面有好几个名字时,它可能会在缓存里出现好几次。

  • 浏览器跟踪重定向地址

  • 浏览器跟踪重定向地址

    现在,浏览器知道了“http://www.facebook.com/”才是要访问的正确地址,所以它会发送另一个获取请求:

  • 服务器“处理”请求

  • 服务器处理请求

    服务器接收到获取请求,然后处理并返回一个响应。

    请求处理阅读请求及它的参数和cookies。它会读取也可能更新一些数据,并讲数据存储在服务器上。然后,需求处理会生成一个HTML响应。

  • 服务器发回一个HTML响应

  • 服务器发回HTML响应

  • 浏览器开始显示HTML

  • 在浏览器没有完整接受全部HTML文档时,它就已经开始显示这个页面了

    浏览器显示HTML

  • 浏览器发送获取嵌入在HTML中的对象

  • 浏览器发送获取嵌入在HTML中的对象

    在浏览器显示HTML时,它会注意到需要获取其他地址内容的标签。这时,浏览器会发送一个获取请求来重新获得这些文件。这些都要经历一个和HTML读取类似的过程。所以浏览器会在DNS中查找这些域名,发送请求,重定向等等…

    但不像动态页面那样,静态文件会允许浏览器对其进行缓存。有的文件可能会不需要与服务器通讯,而从缓存中直接读取。服务器的响应中包含了静态文件保存的期限信息,所以浏览器知道要把它们缓存多长时间。还有,每个响应都可能包含像版本号一样工作的ETag头(被请求变量的实体值),如果浏览器观察到文件的版本 ETag信息已经存在,就马上停止这个文件的传输。

  • 浏览器发送异步(AJAX)请求

  • 浏览器发送异步(AJAX)请求

    在Web 2.0伟大精神的指引下,页面显示完成后客户端仍与服务器端保持着联系。

    “AJAX”–“异步JavaScript 和 XML”,把数据从服务器端推送到客户端。因为HTTP是一个请求-响应协议,所以服务器不能把新消息发给客户,取而代之的是客户端不得不隔几秒就轮询下服务器端看自己有没有新消息。如果当被轮询时服务器没有新消息,它就不理这个客户端。而当尚未超时的情况下收到了该客户的新消息,服务器就会找到未完成的请求,把新消息做为响应返回给客户端。

    *这篇总结真的很好,学习了。。。*

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大学生参加学科竞赛有着诸多好处,不仅有助于个人综合素质的提升,还能为未来职业发展奠定良好基础。以下是一些分析: 首先,学科竞赛是提高专业知识和技能水平的有效途径。通过参与竞赛,学生不仅能够深入学习相关专业知识,还能够接触到最新的科研成果和技术发展趋势。这有助于拓展学生的学科视野,使其对专业领域有更深刻的理解。在竞赛过程中,学生通常需要解决实际问题,这锻炼了他们独立思考和解决问题的能力。 其次,学科竞赛培养了学生的团队合作精神。许多竞赛项目需要团队协作来完成,这促使学生学会有效地与他人合作、协调分工。在团队合作中,学生们能够学到如何有效沟通、共同制定目标和分工合作,这对于日后进入职场具有重要意义。 此外,学科竞赛是提高学生综合能力的一种途径。竞赛项目通常会涉及到理论知识、实际操作和创新思维等多个方面,要求参赛者具备全面的素质。在竞赛过程中,学生不仅需要展现自己的专业知识,还需要具备创新意识和解决问题的能力。这种全面的综合能力培养对于未来从事各类职业都具有积极作用。 此外,学科竞赛可以为学生提供展示自我、树立信心的机会。通过比赛的舞台,学生有机会展现自己在专业领域的优势,得到他人的认可和赞誉。这对于培养学生的自信心和自我价值感非常重要,有助于他们更加积极主动地投入学习和未来的职业生涯。 最后,学科竞赛对于个人职业发展具有积极的助推作用。在竞赛中脱颖而出的学生通常能够引起企业、研究机构等用人单位的关注。获得竞赛奖项不仅可以作为个人履历的亮点,还可以为进入理想的工作岗位提供有力的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值