浏览器原理及HTTP网络协议基础简答题

这篇博客主要介绍了浏览器的工作原理,包括常见浏览器内核、浏览器主要组成部分以及渲染流程。同时,讲解了HTTP网络协议,包括HTTP方法、状态码以及跨域策略。还讨论了如何实现跨域,如JSONP、CORS和Nginx代理。最后,提到了网络请求的生命周期,如DNS解析、TCP连接和HTTP请求的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

## 浏览器原理

**有兴趣读一下**

常⻅的浏览器内核有哪些?

  1. Trident (IE内核)
  2. Gecko(firefox)
  3. webkit(Safari)
  4. Chromium/Bink(chrome)
  5. Presto (Opera)

浏览器的主要组成部分是什么?

  1. 用户界面(User Interface)
  2. 浏览器引擎(Browser Engine)
  3. 渲染引擎(Rendering Engine)
  4. 网络(Networking)
  5. JavaScript解释器(JavaScript Interpreter)
  6. XML解析器(XML Parser)
  7. 显示后端(Display Backend)
  8. 数据持久层(Data Persistence)

现代浏览器工作原理(一) | 楚权的世界现代浏览器工作原理(一) | 楚权的世界

浏览器是如何渲染UI的?

  1. 浏览器获取HTML文件,然后对文件进行解析,形成DOM Tree
  2. 与此同时,进行CSS解析,生成Style Rules
  3. 接着将DOM Tree与Style Rules合成为 Render Tree
  4. 接着进入布局(Layout)阶段,也就是为每个节点分配一个应出现在屏幕上的确切坐标
  5. 随后调用GPU进行绘制(Paint),遍历Render Tree的节点,并将元素呈现出来

浏览器如何解析css选择器?

  1. 从右到左解析,根据选择器遍历dom树,将样式加到对应的dom元素上。
  2. 若从左向右的匹配,发现不符合规则,需要进行回溯,会损失很多性能。若从右向左匹配,先找到所有的最右节点,对于每一个节点,向上寻找其父节点直到找到根元素或满足条件的匹配规则,则结束这个分支的遍历。两种匹配规则的性能差别很大,是因为从右向左的匹配在第一步就筛选掉了大量的不符合条件的最右节点(叶子节点),而从左向右的匹配规则的性能都浪费在了失败的查找上面。而在 CSS 解析完毕后,需要将解析的结果与 DOM Tree 的内容一起进行分析建立一棵 Render Tree,最终用来进行绘图。在建立 Render Tree 时(WebKit 中的「Attachment」过程),浏览器就要为每个 DOM Tree 中的元素根据 CSS 的解析结果(Style Rules)来确定生成怎样的 Render Tree。

DOM Tree是如何构建的?

  1. 转码: 浏览器将接收到的二进制数据按照指定编码格式转化为HTML字符串
  2. 生成Tokens: 之后开始parser,浏览器会将HTML字符串解析成Tokens

3. 构建Nodes: 对Node添加特定的属性,通过指针确定 Node 的父、子、兄弟关系和所属 treeScope

4. 生成DOM Tree: 通过node包含的指针确定的关系构建出DOMTree

浏览器重绘与重排的区别?

  1. 重排:部分渲染树(或者整个渲染树)需要重新分析并且节点尺⼨需要重新计算,表现为重新⽣成布局,重新排列 元素

2. 重绘: 由于节点的⼏何属性发⽣改变或者由于样式发⽣改变,例如改变元素背景⾊时,屏幕上的部分内容需要更 新,表现为某些元素的外观被改变

如何触发重排和重绘?

  1. 任何改变⽤来构建渲染树的信息都会导致⼀次重排或重绘:

添加、删除、更新DOM节点

通过display: none隐藏⼀个DOM节点-触发重排和重绘

### 计算机网络简答题及必背知识点 #### 子网掩码的作用 子网掩码用于区分IP地址中的网络部分和主机部分。通过与IP地址进行逐位的“与”运算,可以获得该IP地址对应的网络地址[^1]。 ```python def get_network_address(ip, subnet_mask): ip_parts = list(map(int, ip.split('.'))) mask_parts = list(map(int, subnet_mask.split('.'))) network_address = '.'.join(str(ip_parts[i] & mask_parts[i]) for i in range(4)) return network_address ``` 此函数展示了如何利用Python计算给定IP地址和子网掩码下的网络地址。 #### IP地址分类 IPv4地址被分为五类:A、B、C、D 和 E 类。每种类别的第一个八位组定义了其类别范围。例如,A类地址的第一个字节介于`0-127`之间,而E类则保留作特殊用途。 #### ARP协议功能 ARP (Address Resolution Protocol) 协议负责将已知的IP地址解析成相应的MAC物理地址,在同一局域网内的通信中起着至关重要的作用。当一台机器要向另一台发送数据包时,它会先查询本地缓存来查找目标设备的硬件地址;如果没有找到,则广播一个请求消息询问谁拥有指定的目标IP地址。 #### TCP三次握手过程 TCP建立连接的过程被称为“三次握手”。客户端首先发出SYN报文段指明初始序列号x并等待服务器回应;接着服务器回复带有自己初始化序号y以及确认ACK=x+1的SYN/ACK报文;后客户再次回送ACK=y+1表示同意建立连接。 #### DNS工作原理 DNS域名系统是一个分布式数据库,用来把易于记忆的名字转换为计算机能够识别的二进制形式——即IP地址。通常情况下,用户的浏览器或其他应用程序会发起对某个特定网站名称的查询请求至近的一个递归解析器,后者再向上游权威名字服务器转发直至获得确切的结果返回给初发问者。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值