【技术干货】浏览器工作原理和常见WEB攻击 (上)

简介: 当你打开一个个设计漂亮、简洁大方的网页,有没有想过浏览器是如何展现这么一个网页的呢?今天给大家带来的文章就是简单总结介绍浏览器的工作原理,这篇文章分为上下两部分,纯经验干货,走过路过不要错过哦~

本文作者:上海驻云开发总监 陈昂

浏览器工作原理


当你打开一个个设计漂亮、简洁大方的网页,有没有想过浏览器是如何展现这么一个网页的呢。当你在这些网页上输入你的淘宝账号登录购买东西的时候,有没有想过,你的账号密码、身份证号、手机号、真实姓名,这些信息会不会泄露,被黑客利用呢?在了解网络安全方面的知识之前我们先简单了解下浏览器的工作原理,以辅助我们更好的理解网络安全知识。


  • 浏览器分类

现代浏览器从内核上来说,主要分为以下6大类:

  1. Trident内核,代表是IE
  2. EDGE内核,代表是微软的Edge浏览器
  3. Gecko内核,代表是Firefox
  4. WebKit内核,代表是Safari和Chrome
  5. Blink内核,代表是最新的Chrome
  6. Presto内核,代表是Opera

其中Trident、Gecko、Webkit、Presto已在市场存在多年。但是浏览器技术发展很是迅猛。随着微软最新浏览器Edge的诞生,采用Trident内核被诟病多年的IE浏览器终于要逐渐退出浏览器舞台了。而Blink是Google Chrome浏览器采用的新内核,由此,Google似乎也要和Webkit阵营分道扬镳,Opera也宣称要紧抱Blink的大腿,一场看不见硝烟的战争似乎又在酝酿。不过这里不再过多讨论。有兴趣的朋友可以关注下浏览器内核发展的最新动向。但不论浏览器怎么发展变化,浏览器的组成和浏览器加载网页的原理都是大同小异,不会有太大变化的。下图是浏览器的主要组成模块:


图 1浏览器组成模块


浏览器加载顺序


当我们在浏览器地址栏输入一个网址(比如:http://cloudcare.cn), 点击回车后,浏览器是如何加载网页的呢?

  • DNS Lookup

首先,点击回车后,浏览器是无法识别cloudcare.cn是什么的,它也不知道你要访问的cloudcare.cn这个网站放在哪里。这个时候,就需要有人告诉浏览器,你应该去哪台服务器访问这个网站。这个“人”就是DNS(Domain Name System,域名系统),我们从图中看下DNS工作原理。



假如本地配置的DNS服务地址是223.5.5.5

大致步骤是这样的:

  1. 浏览器发送cloudcare.cn寻址请求给DNS服务器
  2. DNS服务返回数据告诉本地电脑cloudcare.cn的服务器地址是10.0.0.1
  3. 本地电脑缓存DNS数据,并发送cloudcare.cn访问请求给10.0.0.1这个服务器
  4. 服务器和本地电脑建立TCP连接,进行数据交互

注:关于DNS缓存和路由寻址,大家有兴趣可以Google

  • TCP连接和HTTP

当TCP连接建立后,就可以进行数据传输了。而数据的传输是要满足HTTP协议的(分为1.0和1.1两个版本),包含有连接、消息、请求、响应等一系列规定。

一个页面的加载少则数个HTTP请求,多则几十个甚至上百个HTTP请求。一个HTTP的请求头大概是这个样子的:



一个HTTP响应后的头大概是这个样子的:


我们常说的200、404、500就是相应的状态码了。

而我们最关心的可能就是HTTP 的响应Body了, 一个简单的相应body类似是这个样子的



是不是很熟悉?这就是我们预先编辑好的HTML页面代码。

当我们拿到这么一个页面代码后,浏览器是怎么渲染成一个功能丰富,简洁漂亮网页的呢?我们先看下HTML的代码结构

  • HTML代码结构

一个完整的HTML代码,应该包含html, head, body 这三个标签

<html>

<head>

</head>

<body>

</body>

</html>

其中head标签定义文档的头部,可以引用脚本,指示样式表,提供原信息等。这里定义的东西不会真正展现在页面。

Body标签下面定义了页面需要展示的元素和布局。关于HTML大家可以自行搜索。

接下来,我们看下浏览器的渲染过程

  • HTML页面渲染过程

假如cloudcare.cn的首页是这样的:



当浏览器从服务器第一次拿到页面数据时候,就是上面这个样子,我们称之为基础文档(document),浏览器会把这个基础文档转化为称之DOM树的结构化对象存储在内存里面,然后根据这个DOM树,进行渲染,转化为浏览器可视化的东西。

在渲染的时候,浏览器会从上到下依次渲染DOM树,当发现有外链的资源或是脚本的时候(如:上图link、script、img标签),会异步发起外链资源HTTP请求。同时解析继续。


如果你的网络环境不好,网速很慢的话,可能会看到这样一个现象:

  1. 网页先呈现“Hello world” 字样
  2. 然后图片逐渐加载出来
  3. 如果样式表里面定义了类似 div {color: red;} 的样式。当样式表加载完后,”Hello world”字样会突然变成红色字体。
  • Cookies

HTTP协议里面定义了Cookies的操作。Cookies的中文名称作“小型文本文件”,它以域名为隔离空间存储在浏览器所在电脑的本地磁盘上。他有两个重要的特点:

  1. 不能跨域访问(子级域名除外),例如,在cloudcare.cn域名下无法访问 baidu.com域名下面的cookies。
  2. 每次的HTTP请求都会在请求头里面自动带上cookies发送到后端服务器。

关于浏览器的具体工作原理,这里有一篇文章讲解的非常的详细:http://taligarsiel.com/Projects/howbrowserswork1.htm


这篇给大家总结介绍了浏览器相关的一系列知识,下篇将为大家带来重头的常见WEB攻击,敬请期待~~~同时如果喜欢我们的话就订阅我们吧,还可以关注微信公众号:架构云专家频道。每天新鲜干货定时推送噢~

相关文章
|
10月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
809 1
|
10月前
|
安全 网络协议 NoSQL
Web渗透-常见的端口及对其的攻击思路
本文介绍了常见网络服务端口及其安全风险,涵盖FTP、SSH、Telnet、SMTP、DNS、HTTP、SMB、数据库及远程桌面等20余个端口,涉及弱口令爆破、信息泄露、未授权访问、缓冲区溢出等典型漏洞,适用于网络安全学习与渗透测试参考。
1822 59
|
缓存 前端开发 应用服务中间件
Web端实时通信技术SSE在携程机票业务中的实践应用
本文介绍了携程机票前端基于Server-Sent Events(SSE)实现服务端推送的企业级全链路通用技术解决方案。文章深入探讨了 SSE 技术在应用过程中包括方案对比、技术选型、链路层优化以及实际效果等多维度的技术细节,为类似使用场景提供普适性参考和借鉴。该方案设计目标是实现通用性,适用于各种网络架构和业务场景。
415 1
|
缓存 前端开发 应用服务中间件
Web端实时通信技术SSE在携程机票业务中的实践应用
本文介绍了携程机票前端基于Server-Sent Events(SSE)实现服务端推送的企业级全链路通用技术解决方案。文章深入探讨了 SSE 技术在应用过程中包括方案对比、技术选型、链路层优化以及实际效果等多维度的技术细节,为类似使用场景提供普适性参考和借鉴。
515 7
|
数据采集 Web App开发 JavaScript
无头浏览器技术:Python爬虫如何精准模拟搜索点击
无头浏览器技术:Python爬虫如何精准模拟搜索点击
|
数据采集 存储 运维
无头浏览器与请求签名技术
本文分享了在面对Cloudflare防护(如Amazon网站)时,如何通过无头浏览器、请求签名技术和爬虫代理IP实现数据采集的故障排查与改进方案。首先,介绍了从常规请求失败到引入Selenium无头浏览器的过程,解决了Cookie和User-Agent检测问题。接着,通过生成请求签名绕过二次验证,并利用代理IP规避访问风险。最后,提出了架构改进方案,包括无头浏览器集群化、签名算法优化、代理池管理和多层次容错机制,以提高系统的稳定性和扩展性。示例代码展示了如何设置代理、获取Cookie并生成签名,成功采集商品信息。
457 6
无头浏览器与请求签名技术
|
Web App开发 编解码 vr&ar
使用Web浏览器访问UE应用的最佳实践
在3D/XR应用开发中,尤其是基于UE(虚幻引擎)开发的高精度场景,传统终端因硬件局限难以流畅运行高帧率、复杂效果的三维应用。实时云渲染技术,将渲染任务转移至云端服务器,降低终端硬件要求,确保用户获得流畅体验。具备弹性扩展、优化传输协议、跨平台支持和安全性等优势,适用于多种终端和场景,特别集成像素流送技术,帮助UE开发者实现低代码上云操作,简化部署流程,保留UE引擎的强大开发能力,确保画面精美且终端轻量化。
768 17
使用Web浏览器访问UE应用的最佳实践
|
数据采集 消息中间件 JavaScript
浏览器渲染揭秘:从加载到显示的全过程;浏览器工作原理与详细流程
了解浏览器工作原理与流程,能有效帮助前端开发与性能优化。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
人工智能 前端开发 计算机视觉
Inpaint-Web:纯浏览器端实现的开源图像处理工具
在刷短视频时,常看到情侣在景区拍照被路人“抢镜”,男朋友用手机将路人“P”掉,既贴心又有趣。最近我发现了一个纯前端实现的开源项目——inpaint-web,可在浏览器端删除照片中的部分内容,非常酷。该项目基于 WebGPU 和 WASM 技术,支持图像修复与放大,已在 GitHub 上获得 5.1k Star。项目地址:[GitHub](https://github.com/lxfater/inpaint-web)。
1234 3
 Inpaint-Web:纯浏览器端实现的开源图像处理工具
|
人工智能 安全 物联网
区块链技术的未来展望:去中心化金融(DeFi)与Web 3.0的融合
区块链技术的未来展望:去中心化金融(DeFi)与Web 3.0的融合