浏览器上请求URL的全部过程

分为六步
1. 域名解析
  浏览器首先要做去获得想访问网页的IP地址,浏览器会发送一个UDP的包给DNS域名解析服务器。DNS就会返回给我们百度的IP地址,通常来说浏览器会把访问过的网站的IP保存下来,这样下次访问的时候就会快很多,能够节省很多时间。
  通常来说在解析域名的时候,浏览器就会先看看自己本地的host文件,来看看里边有没有和域名对应的IP地址,如果有就直接使用,如果没有的话浏览器就会发送一个请求到本地的DNS服务器,本地的DNS服务器一般来说都是由网络接入商提供的,比如中国电信等。当本地的DNS服务器收到请求之后会,DNS也会先查询自己的缓存,这个过程是递归查询的,如果缓存中存在就会直接返回,如果这时候还是没有找到对应的IP本地的DNS服务器就向根DNS服务器发送请求进行查询。根DNS服务器上是没有记录哪个域名和IP的对应关系的,他会告诉本地的DNS服务器。你可以到域服务器上进行查询,并且告诉他这个域服务器的地址,这个过程是迭代查询的。这时候本地的DNS服务器会向域服务器发送请求,这里我们请求的是www.baidu.com也就是.com的域名服务器,当.com域服务器收到请求之后,并不会直接返回域名和IP的关系,而是会告诉你的域名的解析服务器的地址,最后本地的DNS服务器向域名的解析服务器发送请求,这时候就能收到一个域名和IP的对应关系,本地的DNS服务器不仅吧这个返回给用户和电脑而且还会自己保存下来,这样下次再访问的时候就能直接返回
  递归查询方式:当局部的DNS服务器不能回答请求的时候,他就需要向其他DNS服务器发送请求
在这里插入图片描述
  局部服务器DNS自己向其他服务器进行查询,一般来说先向该域名的根域服务器进行查询,然后再由根域名服务器向下进行查询,最后得到结果之后返回给局部服务器,然后再由局部服务器返回给我们的客户端。
迭代查询的方式
  迭代查询的方式就是,局部的DNS服务器并不会自己向其他服务器进行查询,而是把能够解析该域名的服务器IP地址返回给客户端,客户端会不断的向这些服务器进行查询,直到查询到了位置,迭代的话只会帮你找到相关的服务器,然后说我现在比较忙,你自己去找吧。
在这里插入图片描述
  DNS还有负载均衡的作用,现在很多网站都有多个服务器,当一个网站访问量过大的时候,如果所有请求都请求在同一个服务器上,可能服务器就会崩掉,这时候就用到了DNS负载均衡技术,当一个网站有多个服务器地址时,在应答DNS查询的时候,DNS服务器会对每个查询返回不同的解析结果,也就是返回不同的IP地址,从而把访问引导到不同的服务器上去,来达到负载均衡的目的。例如可以根据每台机器的负载量,或者该机器距离用户的地理位置距离等等条件。
  之后就可以建立HTTP协议链接,但是HTTP链接是必须建立在TCP链接上边的,建立TCP链接需要四个东西:本机IP,服务器IP,本机端口,服务器端口。现在已经有本机IP和服务器IP了,本机端口会由操作系统随机给浏览器分配一个,而服务器端口用的是一个众所周知的端口,HTTP的默认端口就是80,这时候我们就具备了进行TCP链接的条件。

2.创建TCP链接
  进行三次握手创建TCP链接…,三次握手成功的时候TCP链接成功创建,这时候就可以发送HTTP请求。

3. 处理HTTP请求,当HTTP协议经过多个路由器成功到达了服务器之后,这时候服务器就要去处理浏览器发来的请求。
  服务器在处理请求的时候主要有三种方式:
  第一种是用一个线程来处理所有的请求,并且同时只能处理一个请求,但是这样的话性能是非常的低的;
  第二种是每一个请求都给他分配一个线程但是当链接和请求比较多的时候就会导致服务器的cpu不堪重负;
  第三种就是采用复用I/O的方式来处理例如通过epoll方式监视所有链接,当链接状态发生改变的时候才去分配空间进行处理

4.处理完请求之后向浏览器返回网页的html
  当服务器把文件数据发送给浏览器之后,能够直接关闭TCP吗?如果你是使用的是HTTP1.1,这个版本下默认的方式是keep-alive,这时候TCP是不关闭的,如果在1.0版本下有keep-alive关键字也是不能进行关闭的。

5.解析HTML
  当浏览器收到HTML之后会对其进行解析,在这个过程中可能这个HTML页面引用了大量的js、css、图片等文件,这些资源可能在刚刚的服务器上也可能在其他的服务器上,这时候浏览器就会和上边步骤一样去请求这些资源,如果需要下载的资源太多,浏览器会同时创建多个TCP链接去获取资源,但是同一时间对同一域名下请求数量也不能过多,不然服务器访问量过大,难以承受负载,这时候浏览器就要对其进行控制,例如在chrome浏览器HTTP1.1版本下同时允许最多创建六个TCP链接,在服务器发送这些js、css文件的时候通常会告诉浏览器他什么时候会过期,浏览器就可以把这些文件缓存到本地,在这些文件还没有过期之前就可以直接从缓存中进行访问。
6.断开TCP连接
  当我们数据传输结束的时候,我们就可以断开TCP连接。四次握手
这时候我们的网页就完整的展现在我们的浏览器上了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/418296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(2013)vue之电商管理系统电商系统之监听on-success事件

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

常见算法复习整理1

数据结构笔记 1.迭代与递归 递归过程中的递归因子本身可以被忽略(被计入它自己的过程中了) 递归跟踪、递推方程。递归基 减而治之:Decrease and Conquer 线性递归的模式 T(n) T(n-1) O(1) 分而治之:Divide and Conquer 一般…

前端学习(2014)vue之电商管理系统电商系统之监听on-remove事件

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

HIT计网笔记

一、实践课笔记 1. 路由器连接的是两个不同的网络,交换机连接的是同一个网络。路由器负责在不同网段转移数据,交换机看mac地址,路由器看ip地址。 2. 子网掩码可以分离出IP地址中的网络地址和主机地址,同一个网络的网络地址相同&…

前端学习(2015)vue之电商管理系统电商系统之实现图片的预览效果

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

几种排序与最大K问题

图片链接 0. 链表归并和快排 链表排序常用归并,但是快排面试常出; 一定要理解归并的本质: 两步走: 1. 先切分成(有序)两部分,此处各部分都是有序的 2. 两部分有序合并 切分成两部分的最小粒度是一个元素&#…

前端学习(2016)vue之电商管理系统电商系统vue-quill-editor

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

经典算法题:字典树、并查集、单调栈、二分、带标记函数dp、树、全排列、字符串问题等常用算法

0. Tips 1. 位运算 如何枚举一个二进制状态数字k的子集, 方法就是针对中的二进制为1的位开始进行减法,判断数字k的二进制子集, 像枚举(2^k-1) ~ 0一样枚举其子集; int sub k;do {sub (sub - 1) & k;} while(sub ! k); 比如k 10101的二进制子集…

web窗体的内置对象

内置对象&#xff1a;1、Response - 响应请求对象 Response.Redirect("Default2.aspx"); //重定向 Response.Write("<script>window.open(Default2.aspx);</script>"); ---可以书写任何东西&#xff0c;直接输出出去2、Request - 接收请求对象…

前端学习(2017)vue之电商管理系统电商系统实现表单的预先认证

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

Docker有什么好处?

Docker背后的想法是创建软件程序可移植的轻量容器&#xff0c;让其可以在任何安装了Docker的机器上运行&#xff0c;而不用关心底层操作系统&#xff0c;类似船舶使用的集装箱&#xff0c;野心勃勃的他们成功了。 Docker可以解决虚拟机能够解决的问题&#xff0c;同时也能够解决…

前端学习(2018)vue之电商管理系统电商系统把good_cat转换为字符串

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

前端学习(2019)vue之电商管理系统电商系统处理attr参数

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

Java JNI初探

---说明&#xff0c;之前直接百度出来的例子&#xff0c;照猫画虎。没想到的是这例子居然直接来自百度百科&#xff0c;写着写着就囧了。。 ---anyway&#xff0c;写完了就当是给自己看吧。 同事求助&#xff0c;就看了一下&#xff0c;照猫画虎一番&#xff0c;略有所得。 JNI…

前端学习(2020)vue之电商管理系统电商系统之完成商品添加操作

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

webScoket的浅短的认识

在一般的发送数据请求的时候都是用的http协议&#xff0c;但是对于类似即时聊天&#xff0c;需要客户端与服务器不间断的交互的时候对于http协议来说就不太适用了。因为http协议无法主动把数据发到客户端&#xff0c;而且客户端发送请求之后就会断开连接&#xff0c;无法达到我…

xshell报编码问题时可以修改xshell编码

转载于:https://www.cnblogs.com/Mina89/p/5690529.html

前端学习(2023)vue之电商管理系统电商系统之通过路由加载订单列表

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…