说一下浏览器输入URL发生了什么

本文详细解释了浏览器输入URL时DNS解析、TCP连接建立、HTTP请求流程(包括缓存策略、协议版本差异)、响应数据处理、浏览器HTML解析、事件循环机制以及TCP断开连接的四次挥手过程。
摘要由CSDN通过智能技术生成

说一下浏览器输入URL发生了什么?全流程分析

先上结果:每一项都是自己目前的理解
在这里插入图片描述
**

1:DNS解析

**
将输入的URL域名进行解析成ip地址,因为要建立连接就必须要知道服务器的ip地址
**

2:发送请求阶段

**
2.1:tcp三次握手
在这里插入图片描述
通过tcp三次握手与服务器建立连接,然后请求资源,判断是否是HTTP缓存,如果是强制缓存且在有效期内,不再向服务器发请求,如果是HTTP协商缓存向后端发送请求且和后端服务器对比,在有效期内,服务器返回304,直接从浏览器获取数据,如果不在有效期内服务器返回200,返回新数据
2.2 http1.0和http1.1区别
1.http是短链接,返回数据之后这次连接就断开了,而1.1是长连接,通过connetion请求头设置值为keep-alive,持久连接的两种方式:非流水线方式,一个请求结束了才支持下一个请求,流水线方式:客户端在收到相应之前就可以继续请求,但是响应必须要按照请求的先后顺序返回
2.缓存的设置方式不一样
强缓存
1.0中强缓存使用exprise设置缓存过期时间,内容是一个过期时间
1.1是用响应头中cache-control设置max-age=300,值是一个毫秒数
协商缓存
服务器响应的会在响应头中添加:
1.0 last-modified:文件修改时间,只要文件不修改,时间就不会变
1.1 etag:内容是hash值,内容不变hash不变
浏览器再次发送相同的http请求会在请求头中加入:
1.0 是用if-modifined-since
1.1是用if-none-match
然后服务器会去判断值是否相等,如果相等就命中缓存,返回304,未命中就返回最新的
3.request请求的一些比变化
1.1新增的put delete,options等请求方式
4.新增了一些错误响应码
410 永久删除
2.3http和https区别
http不安全 数据容易被监听窃取 默认端口80 可以直接请求https https安全 默认端口443 直接请求http会跨域
**

3.响应数据


3.1强制缓存和协商缓存
强缓存
服务器响应会在响应头中设置exprise和cache-control:
1.0中强缓存使用exprise设置缓存过期时间,内容是一个过期时间
1.1是用响应头中cache-control设置max-age=300,值是一个毫秒数
浏览器 再次请求的话不会通过服务器,而是直接从浏览器本地缓存中获取
协商缓存
服务器响应的会在响应头中添加:
1.0 last-modified:文件修改时间,只要文件不修改,时间就不会变
1.1 etag:内容是hash值,内容不变hash不变
浏览器再次发送相同的http请求会在请求头中加入:
1.0 是用if-modifined-since
1.1是用if-none-match
然后服务器会去判断值是否相等,如果相等就命中缓存,返回304,未命中就返回最新的
3.2 一些常见的响应码

100:请求参数有问题或者就是代码内部错误
101:切换协议,http切换成websocket
200:请求成功
201:请求资源已经创建
204:服务器已处理请求,未返回内容
301:永久重定向
302:临时重定向
304:缓存
400:请求错误,服务器无法理解
401:未认证
403:权限问题
404:资源路径不存在
410:永久删除
500:服务器问题
502:网关问题
503:服务器过载或者维护,等会就行
**

4.浏览器解析

**
4.1解析html
拿到服务器返回的代码之后,浏览器会开辟一块内存给代码提供环境,同时分配一个主线程去解析和执行代码:
1.解析html遇到link,script,img这些请求会开辟显得线程去执行加载资源文件,涉及到scrpit标签的异步加载async和defer,涉及到事件循环和微任务 宏任务
2.然后继续解析html,生成dom树,解析css生成css规则树
3.将dom树和css规则树结合生成渲染树(render tree)
4.回流:根据渲染树计算计算每个元素在视口内的大小和位置,这个过程就是回流
5.重绘:根据渲染树以及回流得到的几何信息得到节点的绝对像素
6.display:将像素发送给gpu,展示页面
4.2事件循环
由于js是单线程的,但需要一种机制来处理多个快的执行,每个块执行都需要调用Js引擎,这种机制就叫事件循环,具体如下:
在解析html时,会将同步任务放到调用栈中执行,遇到异步任务,将任务挂起,等异步任务有返回之后再将异步任务推送到任务队列中去,等到调用栈中所有的同步任务执行完成之后,才会去执行任务队列中的异步任务,异步任务又分为微任务和宏任务,在执行宏任务之前,必须先去执行微任务,最后执行宏任务,重复执行这一系列行为的操作就叫事件循环
4.3 宏任务和微任务
宏任务:执行script标签内部代码、setTimeout/setInterval、ajax,I/O操作
微任务:Promise,Object.observe、process.nextTick
4.4 回流和重绘
回流:计算元素大小和位置
重绘:修改元素背景和颜色
回流一定重绘,重绘不一定回流
4.5 js引擎
js是解释性语言,边编译边执行 v8引擎
**

5.tcp断开连接,四次挥手

**
在这里插入图片描述

  • 12
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值