当前位置: 首页 > news >正文

URL访问网址的全过程

前言

当我们通过一个网址连接输入到浏览器中,此时会有哪些步骤呢?

过程

大致有这几个流程
1:DNS解析,得到IP地址
2:浏览器根据IP地址,访问服务器,建立TCP连接
3:建立完TCP连接后,浏览器向服务器发送http请求
4:服务器返回http响应给浏览器
5:浏览器根据响应渲染页面呈现给用户
6:浏览器关闭TCP连接

1、DNS解析

浏览器得到是一个域名,需要把这个域名转化成IP地址才能找到服务器。DNS解析就是将域名转化为IP地址的过程。
解析的过程总的来说,是先在本地缓存里寻找域名对应的IP地址,没有找到就去域服务器递归寻找,找到后返回给浏览器并存到本地缓存

具体过程

①先在浏览器缓存里寻找DNS记录。谷歌浏览器能够缓存1000条DNS记录,缓存的时间是1分钟
②接着在host文件和系统缓存里寻找。
③本地缓存都没有的话向域服务器发送请求,没找到的话递归到下一级的域服务器继续查找。直到找到返回

2、建立TCP连接

得到ip地址后,浏览器通过ip地址找到服务器,并通过三次握手建立tcp连接。

TCP报文格式

三次连接的详细过程此处不做赘述

过程图:

3、浏览器发送Http请求

建立完TCP连接后,浏览器就可以向服务器发送Http请求了。
一个Http请求包括请求行,请求报头,请求文

Http报文格式

请求行:包括 请求方法 请求地址 Http版本协议

请求方法:

GET,POST,PUT,DELETE,HEAD,OPTION,SPATCH,TRACE

常用的是

GET(获取一个完整的资源)

POST(提交一个表单)

PUT(上传一个文件)

DELETE(删除)

4、服务器返回Http响应

服务器收到浏览器发送的Http请求,进行处理,然后返回http响应给浏览器

Http响应由状态行,响应头部,响应数据构成

状态行包括状态码,http协议版本

常见的状态码

200 客户端请求成功

403 服务器拒绝执行此请求

404 请求资源不存在,输入了错误的URL

500 服务器发生不可预期的错误

503 服务器暂时的无法处理客户端的请求。一段时间后可能恢复正常

5、浏览器根据响应进行解析渲染,呈现给用户

返回回来的响应可能有Html,css,js等等。

可能会再去发送http请求去把其他资源拿回来。一般来说,访问一个页面,页面最终呈现在用户面前,会需要经历多次的http请求。

浏览器根据响应回来的资源进行解析渲染。如果是js文件那么会用js的解析器进行解析,如果是其他语言其他的文件,那么也会用对应的方式进行解析

6、浏览器关闭TCP连接

Connection: keep-alive

在早期http1.0版本里,每创建一个http请求都需要创建tcp连接。这就导致tcp连接每次都要创建,关闭。性能十分低下。为此,在请求头中引入Connection: keep-alive。意在告诉服务端完成本次http请求后不要关闭tcp连接,直到空闲时间超过keep-alive(超时时间)。在1.1版本中,默认是Connection: keep-alive。

四次挥手关闭TCP连接

浏览器通过四次挥手关闭TCP连接,过程如下

http://www.lryc.cn/news/499275.html

相关文章:

  • Thonny IDE + MicroPython + ESP32 + GY-302 测量环境中的光照强度
  • 小程序-基于java+SpringBoot+Vue的智慧校园管理系统设计与实现
  • 基于Java+Swing+Mysql的网络聊天室
  • javascript 的map()和join()
  • 深入理解 PyTorch 自动微分机制与自定义 torch.autograd.Function
  • 《C++ 赋能 K-Means 聚类算法:开启智能数据分类之旅》
  • 对 JavaScript 说“不”
  • spring下的beanutils.copyProperties实现深拷贝
  • 蓝桥杯二分题
  • 3D数字化革新,探索博物馆的正确打开新方式!
  • 工业检测基础-工业相机选型及应用场景
  • 通过 FRP 实现 P2P 通信:控制端与被控制端配置指南
  • 即时通信系统项目总览
  • QT获取tableview选中的行和列的值
  • GDPU 人工智能 期末复习
  • 编程之路,从0开始:补充篇
  • 使用缓存提升Web应用性能:从新手到高手的实践指南
  • 【数字电路与逻辑设计】实验一 序列检测器
  • 运动模糊效果
  • 养老护理员培训考试题库;免费题库;大风车题库
  • Python-配置模块configparser使用指南
  • C++的HDF5库将h5图像转为tif格式:szip压缩的图像也可转换
  • 【JAVA】Java第十三节:String类(String相关方法,以及StrinBuftrer , StringBulder相关方法)
  • WordPress安装或访问时出现数据库连接错误的处理方式
  • JAVA-面向对象基础
  • [Java]项目入门
  • opencv Mat To Heif
  • 二刷代码随想录第24天
  • Java设计模式之状态模式架构高扩展的订单状态管理
  • Yagmail邮件发送库:如何用Python实现自动化邮件营销?