【计算机网络】输入网址到网页显示的整个流程

【计算机网络】输入网址到网页显示的整个流程输入网址到网页显示的整个流程最近在看一些大厂的笔经面经时 经常看到这个问题 索性在今天也把自己学习的知识整理一下 第一步 首先你得在浏览器中输入网址 比如输入 www baidu com 其中 www 为主机 baidu 为域名 com 为类型 但是有网址不能直接找到对应的响应主机 必须把网址 即域名转化为 ip 地址 第二步 进行 DNS Do

                            输入网址到网页显示的整个流程

最近在看一些大厂的笔经面经时,经常看到这个问题,索性在今天也把自己学习的知识整理一下。


第一步:首先你得在浏览器中输入网址,比如输入www.baidu.com。其中www为主机,baidu为域名,com为类型。但是有网址不能直接找到对应的响应主机,必须把网址,即域名转化为ip地址。


第二步:进行DNS(Domain Name System,域名系统)查询,它的作用是将域名转化为具体的ip地址。

先谈一下DNS的结构:

(1)根域名服务器,全球只有13个不同ip地址的服务器,注意不是服务器只有13台,只是他们所代表的地址只有13个,也就是存在镜像服务器,一个地址可以对应多个镜像服务器。

(2)根域名服务器之下的顶级域名服务器,如com、net、cn、gov等。

(3)顶级域名服务器之下的权威服务器,比如baidu、facebook等。

(4)权威服务器之下的资源记录,比如www、ftp、mail等。

查询的过程如下:

(1)首先会在浏览器缓存中去查询,之前每浏览一个网站,浏览器都会在缓存中存有域名与ip地址的映射关系。不过缓存失效的时间不由浏览器决定,而由操作系统决定。

(2)浏览器缓存中查询不到后,之后会在系统缓存中查询,由浏览器发起一个系统调用,查询系统缓存中的数据。

(3)系统缓存中也查询不到后,将会去路由器缓存中查找。

(4)路由器缓存中也找不到的话,将会从本地DNS服务器的缓存中查找,本地服务器即用户自己配置的DNS服务器。

(5)如果本地的DNS服务器也找不到的话,本地DNS将会发送请求至根域名服务器,根域名服务器中没有相关缓存数据的时候,就会返回com顶级域名服务器的地址。然后本地DNS服务器再发送请求至com顶级域名服务器,com顶级域名服务器中查询不到的话,就会返回baidu权威服务器的地址,然后本地DNS服务器再发送请求至baidu权威服务器,baidu权威服务器就会返回www主机地址。(这是一种迭代的过程,还有一种递归的过程。即local至根域名,根域名不直接返回com地址,而是发送请求至com,com发送请求至baidu,baidu发送请求至www,www再返回给baidu,baidu返回给com,com再返回给local)至此,整个DNS查询步骤结束,现在浏览器拿到了域名对应的ip地址。


第三步:浏览器发送请求至服务器,假设我们现在输入的地址是www.baidu.com,那么浏览器默认将网址改成这样的形式,即http://www.baidu.com。

发送格式如下:

【计算机网络】输入网址到网页显示的整个流程

发现返回了307状态码,也就是临时重定向,需要我们重定向到location表明的地址,即https://www.baidu.com。仔细观察,仅仅多了个s,也就是说http与https之间是有差别的,关于两个的区别,请移步我的另外一篇文章浅析HTTP与HTTPS的区别

307与301、302本质上差不多,但是有细微的差别,简单来说是为了增强301与302的规范性。其他差别这里不做深究,可以参考HTTP状态码302、303和307的故事


第四步:浏览器向重定向后的地址发送请求

发送的请求格式如下:

【计算机网络】输入网址到网页显示的整个流程

可以看得出:

(1)Request Method表明请求方式是get。

(2)User-Agent,用户代理,表明所用浏览器的一些信息,包括内核,版本等。

(3)Connection:keep-alive表明需要服务器为之后的请求保持tcp连接

(4)Cookie中保存了一些与用户状态相关的数值,可以与session连用来跟踪会话,那么有关cookie与session的内容,可以参考我的另外一篇文章【计算机网络】Cookie与Session的区别


第五步:服务器处理http请求

服务器可以根据Cookie中的数据,通过遍历内存中的Session集合,从而判断用户的登录状态。如果用户未登录,则展示一些诸如首页的基本宣传数据。如果用户已经登录,通过解析get请求头、post请求体中的参数,查询数据库,返回用户相关数据,填充到视图中。并将此次处理完的内容通过相应的压缩算法,压缩成某个块。


第六步:服务器返回http响应

服务器返回的响应格式如下:

【计算机网络】输入网址到网页显示的整个流程

其中有些键值対表明:

(1)Content-Encoding的值是gzip,表明响应体使用了gzip方式压缩了,浏览器也需要使用gzip算法进行解压缩,解压缩响应体后,产生如下的内容

【计算机网络】输入网址到网页显示的整个流程

(2)Content-Type的值是text/html,表明服务器需要浏览器将次内容以html文本的形式显示出来,而不是以文件形式去下载它


第七步:浏览器请求样式以及图片文件,用以渲染界面并显示给用户

浏览器解压缩响应体后,在界面显示的同时,下载css、png、gif等一些静态文件,这些静态文件可以被浏览器缓存,防止多次请求。很多公司将自己的静态文件托管在CDN上(Content Delivery Network,即内容分发网络),从CDN上加载大量静态文件,加快查找速度,减少原本网站的并发压力。

访问百度的静态文件有:(出去前两个与最长的那个)

【计算机网络】输入网址到网页显示的整个流程


第八步:浏览器通过Ajax(Asynchronous Javascript And XML 异步 JavaScript 和 XML)

在传统的web应用,用户每发一次请求,用户的动作就会被阻塞,即在服务器返回响应之前,用户不可以进行其他的操作,只能等待响应。然后服务器会响应一个完整的html页面,浏览器再次进行渲染。哪怕是一个很小的一个请求,都会阻塞用户动作,以及刷新整个页面,极大地浪费了用户的时间和网络的带宽,也增加了服务器的压力。

Ajax出现之后,通过此技术发起的http请求,将不会阻塞用户的动作,服务器响应之后,页面会进行一个局部的刷新,也就是不会刷新整个页面,极大提高了页面加载与服务器处理的效率。当然Ajax也要自身的缺点,暴露了浏览器和服务器通信的具体逻辑,容易造成漏洞攻击。此外,Ajax没有后退机制,在一定程度上,用户的体验感降低。

百度界面显示出来后,百度又利用了ajax去请求我之前的搜索关键词,然后利用js填充到搜索框的下拉列表中,返回的数据如下:

【计算机网络】输入网址到网页显示的整个流程


总结:以上就是关于输入一个网址到界面显示的整个流程的具体介绍了,希望能帮助到更多的同学们,也希望你们能指出其中存在的错误,一同进步。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233213.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm下载pandas包失败_pycharm下载包很慢

    pycharm下载pandas包失败_pycharm下载包很慢Pycharm使用安装各种包下载速度慢问题快捷键安装各种包python3-mpipinstallnumpy控制台用这段代码,所有包应该都可以下载下载速度慢问题pip下载速度一般几十k,下着下着就超时了,我用这个大佬的方法解决了MAC下的这个问题MAC解决pip3下载速度慢的问题快捷键最后记录一些经常用的MACPycharm快捷键,方便使用option+commend+L代码格式化control+r运行commend+backspace删除光标所在行

    2022年8月29日
    6
  • macpycharm2022.01激活码[最新免费获取]

    (macpycharm2022.01激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlCJM5ZJBPHS-eyJsaWNlbnNlSW…

    2022年3月31日
    191
  • Java static变量保存在哪?

    Java static变量保存在哪?java-versionjavaversion"1.8.0_171"Java(TM)SERuntimeEnvironment(build1.8.0_171-b11)JavaHotSpot(TM)64-BitServerVM(build25.171-b11,mixedmode)//java-XX:+UseSerialGC-XX:-UseCompre…

    2022年7月16日
    18
  • 服务器 IIS服务器防盗链具体设置方法

    服务器 IIS服务器防盗链具体设置方法IIS主机的Rewrite伪静态组件下载与配置之前已经讲过,如果你的apache服务器,请看<Apache服务器设置防盗链的方法>,今天主要说下IIS服务器防盗链的设置方法。isapi_rewrite利用正则表达式进行替换规则的表示。进行正则表达式的编写的时候,可以利用isapi_rewrite提供的正则表达式测试工具(默认安装提供),进行调试。做好了匹配表达式和格式化表达式,我们可…

    2022年7月23日
    8
  • 用python爬取腾讯招聘网岗位信息保存到表格,并做成简单可视化。(附源码)「建议收藏」

    用python爬取腾讯招聘网岗位信息保存到表格,并做成简单可视化。(附源码)「建议收藏」用python爬取腾讯招聘网岗位信息保存到表格,并做成可视化。代码运行展示开发环境Windows10python3.6开发工具pycharm库numpy、matplotlib、time、xlutils.copy、os、xlwt,xlrd,random开发思路1.打开腾讯招聘的网址右击检查进行抓包,进入网址的时候发现有异步渲染,我们要的数据为异步加载2.构造起始地址:start_url=‘https://careers.tencent.com/tencentcaree

    2022年6月8日
    35
  • centos7搭建nfs详细步骤(有哪些免费的服务器)

    【1】NFS简介:        1.NFS是NetworkFileSystem的简称,即网络文件系统        2.NFS是一种分布式文件系统,可以在不同的操作系统间共享文件        3.NFS基于TCP/IP协议,可将远程计算机磁盘挂载到本地        4.NFS在文件或信息传送过程中依赖于RPC(RemoteProcedureCall)协议,不论是服务端还是客户…

    2022年4月13日
    83

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号