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

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

7fc0007a79ae8e53253

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

浏览器工作原理


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


  • 浏览器分类

现代浏览器从内核上来说,主要分为以下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的大腿,一场看不见硝烟的战争似乎又在酝酿。不过这里不再过多讨论。有兴趣的朋友可以关注下浏览器内核发展的最新动向。但不论浏览器怎么发展变化,浏览器的组成和浏览器加载网页的原理都是大同小异,不会有太大变化的。下图是浏览器的主要组成模块:


7fa0007a191345b0b64

图 1浏览器组成模块


浏览器加载顺序


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

  • DNS Lookup

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


7f90007a2a61ff80261


假如本地配置的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的请求头大概是这个样子的:


7fa0007a19055267e0f


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


7f90007a2a5bcf07740

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

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


7fa0007a1939334f517


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

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

  • HTML代码结构

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

<html>

<head>

</head>

<body>

</body>

</html>

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

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

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

  • HTML页面渲染过程

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


7fc0007a79be21c80a1


当浏览器从服务器第一次拿到页面数据时候,就是上面这个样子,我们称之为基础文档(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攻击,敬请期待~~~同时如果喜欢我们的话就订阅我们吧,还可以关注微信公众号:架构云专家频道。每天新鲜干货定时推送噢~

相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
11天前
|
前端开发 JavaScript 关系型数据库
从前端到后端:构建现代化Web应用的技术探索
在当今互联网时代,Web应用的开发已成为了各行各业不可或缺的一部分。从前端到后端,这篇文章将带你深入探索如何构建现代化的Web应用。我们将介绍多种技术,包括前端开发、后端开发以及各种编程语言(如Java、Python、C、PHP、Go)和数据库,帮助你了解如何利用这些技术构建出高效、安全和可扩展的Web应用。
|
1月前
|
前端开发 数据库 UED
构建高性能Web应用的关键技术
本文将介绍构建高性能Web应用的关键技术,包括前端优化、后端优化、数据库优化等方面。通过深入讨论各项技术的原理和实践方法,帮助开发者们提升Web应用的响应速度和用户体验。
|
1月前
|
存储 前端开发 JavaScript
从前端到后端,探索现代Web开发技术
本文探索了现代Web开发技术的各个方面,包括前端和后端开发以及多种编程语言的应用。通过对JavaScript、Java、Python、C、PHP和Go等语言的介绍,深入探讨了前端和后端开发的基本原理和常用工具。同时,还涵盖了数据库技术在Web开发中的重要性和应用场景。无论你是初学者还是有经验的开发者,本文都能为你提供全面的视角和实用的知识,帮助你在Web开发领域取得更好的成果。
|
1月前
|
前端开发 开发者
探索前端技术的新趋势:Web组件化开发
【2月更文挑战第11天】 在这篇文章中,我们将深入探讨Web组件化开发的概念及其对前端开发领域的影响。不同于传统的摘要方式,我们通过一个故事来引入主题:想象在一个快速变化的数字世界里,有一座由各种小型、独立、可复用的建筑块构成的城市,每个建筑块都拥有独特的功能和风格,它们可以自由组合,创造出无限可能的城市景观。这座城市,就像是使用了Web组件化开发技术的前端项目。接下来,我们将详细探讨Web组件化开发的优势、实现方式以及面临的挑战,为前端开发者提供一个全面的视角来理解和应用这一重要的技术趋势。
62 5
|
2月前
|
IDE Java API
使用Java Web技术构建RESTful API的实践指南
使用Java Web技术构建RESTful API的实践指南
|
1月前
|
SQL 存储 数据库
基于Web技术的在线考试系统的设计与实现(论文+源码)_kaic
基于Web技术的在线考试系统的设计与实现(论文+源码)_kaic
|
1月前
|
网络协议 安全 网络性能优化
基于web技术的企业网设计与实现_kaic
基于web技术的企业网设计与实现_kaic
|
1月前
|
开发框架 Dart 前端开发
构建响应式Web界面:Flutter的跨界前端技术
【2月更文挑战第23天】随着移动互联网的飞速发展,响应式Web设计成为现代前端开发的重要趋势。在众多框架中,Google推出的Flutter以其高效的渲染性能、跨平台能力及丰富的组件生态,为前端开发者带来了新的选择。本文将深入探讨如何利用Flutter进行高效、美观的响应式界面构建,同时剖析其与传统前端技术的差异和优势。
|
1月前
|
网络协议 安全 网络性能优化
基于web技术的企业网设计与实现_kaic
基于web技术的企业网设计与实现_kaic
|
1月前
|
Web App开发 iOS开发
Web 浏览器
Web 浏览器。
17 3

热门文章

最新文章