网页的语义结构
HTML
标签的名称都带有语义(semantic),使用时应该尽量符合标签的语义,不要用错误语义的标签。语义良好的网页,天然具有良好的结构,对于开发者易读易写,容易维护,也能帮助计算机更好地处理网页内容。
含义
HTML
标签的一个重要作用,就是声明网页元素的性质,使得用户只看标签,就能了解这个元素的意义,阅读
HTML 源码就能了解网页的大致结构。这被称为 HTML 的语义原则。
下面就是一个典型的语义结构的网页。
12345678910<body> <header>页眉</header> <main> <article> <h1>文章标题</h1> <p>文章内容</p> </article> </main> <footer>页尾</footer></body>
只看上面的代码,就可以知道,页面分成页眉(<header>)、主体(<main& ...
HTML 字符编码
简介
网页包含了大量的文字,浏览器必须知道这些文字的编码方法,才能把文字还原出来。
一般情况下,服务器向浏览器发送 HTML 网页文件时,会通过 HTTP
头信息,声明网页的编码方式。
1Content-Type: text/html; charset=UTF-8
上面代码中,HTTP
头信息的Content-Type字段先声明,服务器发送的数据类型是text/html(即
HTML 网页),然后声明网页的文字编码是UTF-8。
网页内部也会再用<meta>标签,再次声明网页的编码。
1<meta charset="UTF-8">
字符的数字表示法
网页可以使用不同语言的编码方式,但是最常用的编码是 UTF-8。UTF-8
编码是 Unicode
字符集的一种表达方式。这个字符集的设计目标是包含世界上的所有字符,目前已经收入了十多万个字符。
每个字符有一个 Unicode 号码,称为码点(code
point)。如果知道码点,就能查到这是什么字符。举例来说,英文字母a的码点是十进制的97(十六进制的61),汉字“中”的 ...
网页元素的属性
简介
网页元素的属性(attribute)可以定制元素的行为,不同的属性会导致元素有不同的行为。元素属性的写法是
HTML 标签内部的“键值对”。
1<html lang="en">
上面代码中,<html>标签内部的键值对lang="en",就称为html元素的属性。属性名为lang,属性值为en。
属性名与标签名一样,不区分大小写,lang和LANG是同一个属性。
属性名与属性值之间,通过等号=连接。属性值可以放在单引号或双引号之中,建议统一使用双引号。某些属性值可以不使用引号,但是建议不要这样写。
有些属性是布尔属性,即属性值是一个布尔值,只有“打开”和“关闭”两种情况。这时属性值可以省略,只要添加了属性名,就表示打开该属性。
1<input type="text" required>
上面代码中,required就是<input>标签的布尔属性。如果加上这个属性,就表示打开,没有就是关闭。
全局属性
全局属性(global
attributes)是所有元素都可以使用的属性 ...
URL 简介
概述
URL 是“统一资源定位符”(Uniform Resource
Locator)的首字母缩写,中文译为“网址”,表示各种资源的互联网地址。下面就是一个典型的
URL。
1https://www.example.com/path/index.html
所谓资源,可以简单理解成各种可以通过互联网访问的文件,比如网页、图像、音频、视频、JavaScript
脚本等等。只有知道了它们的 URL,才能在互联网上获取它们。
只要资源可以通过互联网访问,它就必然有对应的 URL。一个 URL
对应一个资源,但是同一个资源可能对应多个 URL。
URL
是互联网的基础。互联网之所以“互联”,就是因为网页可以通过“链接”(link),包含其他
URL。用户只要点击,就可以从一个 URL 跳转到另一个
URL,前往不同的网站。
网址的组成部分
URL 由多个部分组成。下面是一个比较复杂的 URL,实际的 URL
通常不会有这么多部分。
1https://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2 ...
HTML 语言简介
概述
HTML
是网页使用的语言,定义了网页的结构和内容。浏览器访问网站,其实就是从服务器下载
HTML 代码,然后渲染出网页。
HTML 的全名是“超文本标记语言”(HyperText Markup
Language),上个世纪90年代由欧洲核子研究中心的物理学家蒂姆·伯纳斯-李(Tim
Berners-Lee)发明。它的最大特点就是支持超链接,点击链接就可以跳转到其他网页,从而构成了整个互联网。
1999年,HTML 4.01 版发布,成为广泛接受的 HTML 标准。2014年,HTML 5
发布,这是目前正在使用的版本。
浏览器的网页开发,涉及三种技术:HTML、CSS 和 JavaScript。HTML
语言定义网页的结构和内容,CSS 样式表定义网页的样式,JavaScript
语言定义网页与用户的互动行为。HTML 语言是网页开发的基础,CSS 和
JavaScript 都是基于 HTML 才能生效,即使没有这两者,HTML
本身也能使用,可以完成基本的内容展示。本教程只介绍 HTML 语言。
下面就是一个简单网页的 HTML 源码。
123456789 ...
本文针对云原生网关 APISIX
的核心流程以源码分析的方式剖析其工作原理,并对于网关未来的发展方向进行了思考。
1. APISIX 概述
APISIX 与 Kong 类似,是一个基于 OpenResty 构建的 API 网关,如果你熟悉
OpenResty,你大概能猜到本文会讲述 APISIX 在 OpenResty 的几大生命周期中,
做了什么动作来进行路由匹配、服务发现、负载均衡以及加载插件。 APISIX
不同于 Kong 的地方,例如 etcd
数据变化监听、强大的缓存机制、以及在性能优化上做的尝试,本文也会一一阐述。
1.1. 项目概述
APISIX 是基于 OpenResty 开发的 API 网关,与 OpenResty
的请求生命周期一致,APISIX 利用 Lua Nginx Module 提供的
*_by_lua 添加 Hook。
APISIX 抽象了 Route、Service、Upstream、Plugin、Consumer
等数据模型,与 Kong 网关如出一辙。
基本上可以看作 APISIX 是 Kong 网关的重构——运用大量 LuaJIT、Open ...
YAML 是 “YAML Ain’t a Markup Language”(YAML
不是一种标记语言)的递归缩写。在开发的这种语言时,YAML
的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。
YAML
的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。
YAML 的配置文件后缀为
.yml,如:runoob.yml 。
基本语法
大小写敏感
使用缩进表示层级关系
缩进不允许使用tab,只允许空格
缩进的空格数不重要,只要相同层级的元素左对齐即可
’#’表示注释
数据类型
YAML 支持以下几种数据类型:
对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) /
字典(dictionary)
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
纯量(scalars):单个的、不可再分的值
YAM ...
Docker 微服务教程
Docker
是一个容器工具,提供虚拟环境。很多人认为,它改变了我们对软件的认识。
站在 Docker
的角度,软件就是容器的组合:业务逻辑容器、数据库容器、储存容器、队列容器……Docker
使得软件可以拆分成若干个标准化容器,然后像搭积木一样组合起来。
这正是微服务(microservices)的思想:软件把任务外包出去,让各种外部服务完成这些任务,软件本身只是底层服务的调度中心和组装层。
微服务很适合用 Docker
容器实现,每个容器承载一个服务。一台计算机同时运行多个容器,从而就能很轻松地模拟出复杂的微服务架构。
之前介绍了 Docker
的概念和基本用法,本文接着往下介绍,如何在一台计算机上实现多个服务,让它们互相配合,组合出一个应用程序。
我选择的示例软件是 WordPress。它是一个常用软件,全世界用户据说超过几千万。同时它又非常简单,只要两个容器就够了(业务容器
+ 数据库容器),很适合教学。而且,这种“业务 +
数据库“的容器架构,具有通用性,许多应用程序都可以复用。
为了加深读者理解,本文采用三种方法,演示如何架设 WordPr ...
Docker 入门教程
2013年发布至今, Docker
一直广受瞩目,被认为可能会改变软件行业。
但是,许多人并不清楚 Docker
到底是什么,要解决什么问题,好处又在哪里?本文就来详细解释,帮助大家理解它,还带有简单易懂的实例,教你如何将它用于日常开发。
一、环境配置的难题
软件开发最大的麻烦事之一,就是环境配置。用户计算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来?
用户必须保证两件事:操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。举例来说,安装一个
Python 应用,计算机必须有 Python
引擎,还必须有各种依赖,可能还要配置环境变量。
如果某些老旧的模块与当前环境不兼容,那就麻烦了。开发者常常会说:“它在我的机器可以跑了”(It
works on my machine),言下之意就是,其他机器很可能跑不了。
环境配置如此麻烦,换一台机器,就要重来一次,旷日费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。
二、虚拟机
虚拟机(virtual
machine)就是带环境 ...