在浏览器输入网址,直到页面出现,之间发生了什么?(1)
从一道阿里面试题谈起:
用户在浏览器中输入www.taobao.com直到看到页面之间发生了什么?
前端面试时基本上都会被问到这类关于http协议相关的内容,不止是为了应对面试,实际开发时也会一直用到http协议的知识,因此,整理一下这方面内容非常有必要。
回到上面的问题,这个过程大致分如下几步:
1、输入地址
2、浏览器查找域名的 IP 地址
3、浏览器向 web 服务器发送一个 HTTP 请求
4、服务器的永久重定向响应
5、浏览器跟踪重定向地址
6、服务器处理请求
7、服务器返回一个 HTTP 响应
8、浏览器显示 HTML
9、浏览器发送请求获取嵌入在 HTML 中的资源(如CSS、JS、图片、音频、视频等)
1、输入地址
当我们开始在浏览器中输入网址的时候,浏览器其实就已经在智能的匹配可能的 url 了,它会从历史记录、书签等地方找到已经输入的字符串可能对应的 url,然后给出智能提示,让你可以补全url地址。 Chrome 浏览器甚至会直接从缓存中把网页展示出来,也就是说,你还没有按下 Enter,页面就出来了。
2、浏览器查找域名的 IP 地址
(1)、请求一旦发起,浏览器首先要做的事情就是解析这个域名,一般来说,浏览器会首先查看本地硬盘的 hosts 文件,看看其中有没有和这个域名对应的规则,如果有的话就直接使用 hosts 文件里面的 ip 地址。
(2)、如果在本地的 hosts 文件没有能够找到对应的 ip 地址,浏览器会发出一个 DNS请求到本地的DNS服务器 ,本地DNS服务器一般都是由你的网络接入服务器商提供,比如中国电信、中国移动。
(3)、你输入的网址的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就直接返回结果,此过程是递归的方式进行查询。如果没有,本地DNS服务器还要向DNS根服务器进行查询。
(4)、根DNS服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你可以到域服务器上去继续查询,并给出域服务器的地址,这个过程是迭代的过程。
(5)、本地DNS服务器继续向域服务器发出请求,在这个例子中,请求的对象是.com域服务器, .com域服务器收到请求之后,也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器请求的域名的解析服务器地址。
(6)、最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还会把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。
下面这张图很完美的解释了这一过程(盗图,感谢原作者):
概念解释:
1. 什么是URL?
统一定位资源符,英文全称为Uniform Resource Locator,是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。它最初是由蒂姆·伯纳斯·李发明用来作为万维网的地址。现在它已经被万维网联盟编制为互联网标准RFC1738了。
URL有如下常见传输协议:
-
http——超文本传输协议
-
ftp——文件传输协议
-
file——主要用于访问本地计算机中的文件
-
https——数据经过加密的超文本传输协议
注:开头只有//不是协议,代表该URL的协议与当前页面一致。
2. 什么是IP与IP地址?
IP是在TCP/IP协议中网络层的主要协议,任务是根据源主机和目的主机的地址传送数据。为此目的,IP定义了寻址方法和数据报的封装结构。
IP是分配给网络上使用网际协议(英语:Internet Protocol, IP)的设备的数字标签。常见的IP地址分为IPv4与IPv6两大类。IP地址相当于一台主机的门牌号。
IP地址根据网络ID的不同分为A,B,C,D,E 五类,其中最常用到的是A类B类和C类,常以32二进制组成常以XXX.XXX.XXX.XXX形式表现,每组XXX代表小于或等于255的10进制数。
公网IP:是由国际互联网分配的唯一的IP地址,是个静态IP地址。
内网IP:由路由器建立子网分配IP地址。
3. 服务器
服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。
服务器的构成包括处理器、硬盘、内存、系统总线等,和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。
在网络环境下,根据服务器提供的服务类型不同,分为文件服务器,数据库服务器,应用程序服务器,WEB服务器等。
常见的系统如Linux、windows server 2012。常见的web服务器有Apache、Nginx、IIS、Lighttpd等。
4. 什么是DNS?
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。
通俗的讲,我们更习惯于记住一个网站的名字,比如www.baidu.com,而不是记住它的ip地址,比如:167.23.10.2。而计算机更擅长记住网站的ip地址,而不是像www.baidu.com等链接。因为,DNS就相当于一个电话本,比如你要找www.baidu.com这个域名,那我翻一翻我的电话本,我就知道,哦,它的电话(ip)是167.23.10.2。
DNS劫持:将系统缓存hosts文件里的域名对应的IP改成其他IP,致使用户访问该域名时访问到其他的网站。
5. DNS查询的两种方式:递归查询和迭代查询
(1)、递归解析
当局部DNS服务器自己不能回答客户机的DNS查询时,它就需要向其他DNS服务器进行查询。此时有两种方式,如图所示的是递归方式。局部DNS服务器自己负责向其他DNS服务器进行查询,一般是先向该域名的根域服务器查询,再由根域名服务器一级级向下查询。最后得到的查询结果返回给局部DNS服务器,再由局部DNS服务器返回给客户端。
(2)、迭代解析
当局部DNS服务器自己不能回答客户机的DNS查询时,也可以通过迭代查询的方式进行解析,如图所示。局部DNS服务器不是自己向其他DNS服务器进行查询,而是把能解析该域名的其他DNS服务器的IP地址返回给客户端DNS程序,客户端DNS程序再继续向这些DNS服务器进行查询,直到得到查询结果为止。也就是说,迭代解析只是帮你找到相关的服务器而已,而不会帮你去查。比如说:baidu.com的服务器ip地址在192.168.4.5这里,你自己去查吧,本服务器比较忙,只能帮你到这里了...
未完待续