浏览器上输入一个个网址发生了什么?

总结: 在浏览器中输入网址--》进行DNS查询,将域名解析出具体的IP--》浏览器发送请求至服务器--》浏览器向重定向后的地址发送请求--》服务器处理http请求--》服务器返回http响应--》浏览器请求样式以及图片文件,用以渲染界面并显示给用户

 一次完整的网络通讯:https://blog.csdn.net/hla199106/article/details/46791939


第一步:首先你得在浏览器中输入网址,比如输入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填充到搜索框的下拉列表中,返回的数据如下:


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

 

我们每天在浏览器上输入一个个网址后,随着网页的不断跳转和变化,我们浏览着我们所需要的页面和信息,那么在我们输入网址URL后,到底发生了什么呢?

地址栏输入URL发生了什么?

●首先,你需要在浏览器中的URL地址上,输入你想访问的地址,如下
在这里插入图片描述
你应该访问不到的,😳嘻嘻~

●然后,浏览器会根据你输入的URL地址,去查找域名是否被本地DNS缓存,不同浏览器对DNS的设置不同,如果浏览器缓存了你想访问的URL地址,那就直接返回ip
如果没有缓存你的URL地址,浏览器就会发起系统调用来查询本机hosts 文件是否有配置ip 地址,如果找到,直接返回。如果找不到,就向网络中发起一个DNS查询。

什么是DNS?

DNS的全称是域名系统(Domain Name System, 缩写: DNS), 它作为将域名IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。

URI / URL

我们上面提到,你可以通过输入www. google. com地址来访问谷歌的官网,那么这个地址有什么规定吗?
我怎么输都可以?
AAA.BBB.CCC是不是也行?
当然不是的,你输入的地址格式必须要满足URI的规范。

URI的全称是 (Uniform Resource Identifier) ,中文名称是统一资源标识符,使用它就能够唯一地标记互联网.上资源。

URL的全称是 (Uniform Resource Locator) ,中文 名称是统一资源定位符,也就是我们俗称的网址,它实际上是URI的一个子集。
URI不仅包括URL,还包括URN (统一资源名称),它们之间的关系如下
在这里插入图片描述
在这里插入图片描述
DNS运行在UDP上,使用53端口。

DNS与IP地址的转化关系如图:
在这里插入图片描述

DNS是一种分层数据库,它的主要层次结构如下

在这里插入图片描述
**一般域名服务器的层次结构主要是以上三种,除此之外,还有另一类重要的DNS服务器,它是本地DNS服务器(local DNS server) 。严格来说,本地DNS服务器并不属于上述层次结构,但是本地DNS服务器又是至关重要的。每个ISP(Internet Service Provider) 比如居民区的ISP或者一个机构的ISP都有一台本地DNS服务器。当主机和ISP进行连接时,该ISP会提供一台主机的IP地址,该主机会具有一台或多台其本地DNS服务器的IP地址。

通过访问网络连接,用户能够容易的确定DNS服务器的IP地址。当主机发出DNS请求后,该请求被发往本地DNS服务器,它起着代理的作用,并将该请求转发到DNS服务器层次系统中。

首先,查询请求会先找到本地DNS服务器来查询是否包含IP地址,如果本地DNS无法查询到目标IP地址,就会向根域名服务器发起一个DNS查询。

注意: DNS涉及两种查询方式: -种是递归查询(Recursive query),-一种是 迭代查询(Iteration query) 。
在这里插入图片描述
在由根域名服务器->顶级域名服务器->权威DNS服务器后,由权威服务器告诉本地服务器目标IP地址,再有本地DNS服务器告诉用户需要访问的IP地址。

第三步,浏览器需要和目标服务器建立TCP连接,需要经过三次握手的过程

在建立连接后,浏览器会向目标服务器发起HTTP-GET 请求,包括其中的URL, HTTP 1.1后默认使用长连接,只需要一次握手即可多次传输数据。
如果目标服务器只是一个简单的页面,就会直接返回。但是对于某些大型网站的站点,往往不会直接返回主机名所在的页面,而会直接重定向。
返回的状态码就不是200,而是301,302以3开头的重定向码,浏览器在获取了重定向响应后,在响应报文中Location项找到重定向地址,浏览器重新第一步访问即可。
然后浏览器重新发送请求,携带新的URL,返回状态码200 OK,表示服务器可以响应请求,返回报文。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值