1 什么是Web?它有什么作用?
Web是指万维网(World Wide Web)
的简称,是一种基于互联网的信息系统。它由一系列相互链接的文档和资源组成,这些文档和资源通过超文本链接(Hyperlinks)相互关联。
Web的核心技术是HTTP(Hypertext Transfer Protocol,超文本传输协议)和HTML(Hypertext Markup Language,超文本标记语言)。HTTP是一种用于在网络上传输超文本文档的协议,而HTML是一种用于创建和组织文档结构的标记语言。
通过Web,用户可以使用Web浏览器(如Chrome、Firefox、Safari等)访问和浏览各种网页、图片、视频、音频等资源。用户可以通过点击超链接在不同的网页之间跳转,也可以通过搜索引擎查找和访问特定的网页。
2 什么是HTTP?它有什么作用?
HTTP(Hyper Text Transfer Protocol): 全称超文本传输协议,是用于从Web服务器传输超文本到本地浏览器的传送协议。
HTTP 是一种应用层协议,是基于 TCP/IP 通信协议来传递数据的,其中 HTTP1.0、HTTP1.1、HTTP2.0 均为 TCP 实现,HTTP3.0 基于 UDP 实现。现主流使用 HTTP1.0 和 HTTP3.0
协议: 为了使数据在网络上从源头到达目的,网络通信的参与方必须遵循相同的规则,这套规则称为协议,它最终体现为在网络上传输的数据包的格式。
具体来说,HTTP定义了客户端和服务器之间进行通信的规则和约定。它规定了客户端发送请求到服务器,并接收服务器响应的方式。HTTP使用URL(统一资源定位符)来标识和定位Web上的资源,如网页、图片、视频等。
Web是建立在HTTP协议之上的,它是通过HTTP协议来传输和访问信息的。当用户在Web浏览器中输入URL或点击链接时,浏览器会发送HTTP请求到服务器,请求特定的资源。服务器接收到请求后,会根据请求的内容和参数,生成相应的HTTP响应,并将响应返回给浏览器。浏览器接收到响应后,会解析响应内容,并将其呈现给用户。
小结: HTTP是Web上数据传输的协议,而Web是通过HTTP协议来传输和访问信息的一个应用。
HTTP框架:
HTTP框架(或称为HTTP服务器框架)是一种用于构建和管理HTTP服务器的软件框架。它提供了处理HTTP请求和响应的功能,以及其他与HTTP协议相关的功能,如路由、中间件、会话管理等。HTTP框架通常用于构建Web应用程序的后端,处理客户端发送的HTTP请求,并返回相应的HTTP响应。
以下是一些常见的HTTP框架:
Express.js: Express.js是一个基于Node.js的轻量级Web应用程序框架,也可以看作是一个HTTP框架。它提供了简单而灵活的API,用于处理路由、中间件和请求响应等。
Flask: Flask是一个使用Python编写的微型Web框架,它也可以用作HTTP框架。它提供了基本的路由和请求处理功能,并允许开发人员根据需要选择和集成其他库。
Django: Django是一个使用Python编写的高级Web框架,它也包含了HTTP框架的功能。
它提供了强大的ORM工具、模板引擎和内置的管理界面,以及处理HTTP请求和响应的功能。
Hertz:Hertz 是字节内部的 HTTP 框架,参考了其他开源框架的优势,结合字节跳动内部的需求,具有高易用性、高性能、高扩展性特点。
3 Hertz框架
Hertz 是一个 Golang 微服务 HTTP 框架,在设计之初参考了其他开源框架 fasthttp、gin、echo 的优势, 并结合字节跳动内部的需求,使其具有高易用性、高性能、高扩展性等特点,目前在字节跳动内部已广泛使用。 如今越来越多的微服务选择使用 Golang,如果对微服务性能有要求,又希望框架能够充分满足内部的可定制化需求,Hertz 会是一个不错的选择。
3.1 架构设计
Hertz采用了4层分层设计(应用层、路由层、协议层、传输层),保证各个层级功能内聚,同时通过层级之间的接口达到灵活扩展的目标。
3.2 框架特点
高易用性: 在开发过程中,快速写出来正确的代码往往是更重要的。因此,在 Hertz 在迭代过程中,积极听取用户意见,持续打磨框架,希望为用户提供一个更好的使用体验,帮助用户更快的写出正确的代码。
高性能: Hertz 默认使用自研的高性能网络库 Netpoll,在一些特殊场景相较于 go net,Hertz 在 QPS、时延上均具有一定优势。
高扩展性: Hertz 采用了分层设计,提供了较多的接口以及默认的扩展实现,用户也可以自行扩展。同时得益于框架的分层设计,框架的扩展性也会大很多。
多协议支持: Hertz 框架原生提供 HTTP1.1、ALPN 协议支持。除此之外,由于分层设计,Hertz 甚至支持自定义构建协议解析逻辑,以满足协议层扩展的任意需求。
网络层切换能力: Hertz 实现了 Netpoll 和 Golang 原生网络库 间按需切换能力,用户可以针对不同的场景选择合适的网络库,同时也支持以插件的方式为 Hertz 扩展网络库实现。
3.3 Hertz 基本使用
使用 Hertz 实现,服务监听 8080 端口并注册了一个 GET 方法的路由函数:
package main
import (
"context"
"github.com/cloudwego/hertz/pkg/app"
"github.com/cloudwego/hertz/pkg/app/server"
"github.com/cloudwego/hertz/pkg/common/utils"
"github.com/cloudwego/hertz/pkg/protocol/consts"
)
func main() {
h := server.Default(server.WithHostPorts("127.0.0.1:8080"))
// 静态路由
h.GET("/ping", func(c context.Context, ctx *app.RequestContext) {
ctx.JSON(consts.StatusOK, utils.H{"message": "pong"})
})
h.Spin()
}
3.4 Hertz 路由
1、提供了 GET、POST、PUT、DELETE、ANY 等方法用于注册路由。
2、提供了路由组(Group)的能力,用于支持路由分组的功能,同时中间件也可以注册到路由组上。
3、提供了参数路由和通配路由,路由的优先级为:静态路由>命名路由>通配路由。
3.5 Hertz 参数
提供了 Bind、Validate、BindAndValidate 函数用于进行参数绑定和校验。
3.6 Hertz 中间件
主要分为客户端中间件与服务端中间件。
3.7 Hertz Client
提供了 HTTP Client 用于帮助用户发送 HTTP 请求。
3.8 Hertz 代码生成工具 Hz
通过定义 IDL(inteface description language) 文件即可生成对应的基础服务代码。
总结
本文主要介绍了 Golang 微服务 HTTP 框架 Hertz,只是简单的入门练习,如果想了解更多内容还是需要仔细研究官方文档,官方文档的内容很清晰全面,后续还需要深入学习。