更多Go内容请见: https://blog.csdn.net/weixin_39777626/article/details/85066750
Web应用特质
可扩展
定义:应用的管理者能够简单、快速地提升性能以便处理更多请求
方法:
- 垂直扩展:提升单台设备的CPU数量或者性能
- 水平扩展:增加计算机的数量
模块化
定义:大规模的Web应用由可替换的组件构成
优点:
- 开发者更容易添加、移除、修改特征,满足程序不断变化的需求
- 通过复用模块化的组件来降低软件开发费用
可维护
定义:确保源代码能够以适当的方式组织起来并且具有良好的可维护性
高性能
定义:
- 能够在短时间内处理大量请求
- 服务器能快速地对客户端响应,并让终端用户能够快速地执行操作
Web应用的工作原理
定义:Web应用就是能与用户进行互动并帮助用户执行指定活动的软件程序;如:记账系统、人力资源系统、桌面出版软件
满足条件:
- 能响应(HTML)客户端发送的请求,客户端能展示渲染后的HTML
- 传输数据时满足HTTP协议
HTTP简介
定义:
- HTTP是无状态、由文本构成的请求-响应协议
- 使用客户端-服务器计算模型
- 客户端会向服务器发送请求
- 服务器会向客户端返回响应
Web应用的诞生
CGI:在Web应用上调用可执行命令行程序的规范
SSI:允许开发者在HTML文件里面包含一些指令
HTTP请求
组成
- 请求行
- 请求首部
- 一个空行
- 可选的报文主体(body)
请求方法
请求方法 | 说明 |
---|---|
GET | 返回指定资源 |
HEAD | 在不获取报文主体的情况下,取得响应的首部 |
POST | 将报文主体的数据传递给URI指定的资源 |
PUT | 将报文主体中的数据设置为URI指定的资源 |
DELETE | 删除URI指定的资源 |
TRACE | 返回请求本身 |
OPTIONS | 返回他支持的HTTP方法列表 |
CONNECT | 与客户端建立一个网络连接 |
PATCH | 使用报文主体中的数对URI指定的资源进行修改 |
安全的请求方法
安全 | 不安全 |
---|---|
GET | POST |
HEAD | PUT |
OPTIONS | DELETE |
TRACE |
幂等的请求方法
定义:在使用相同的数据进行第二次调用时,不会对服务器的状态造成任何改变
幂等方法:PUT、DELETE
浏览器支持的请求方法
请求首部
功能:记录与请求本身以及客户端有关的信息
组成:任意多个用冒号分隔的纯文本键值对组成,以回车(CR)和换行(LF)结尾
常见首部
首部 | 说明 |
---|---|
Accept | 客户端在HTTP响应中能够接收的内容类型 |
Accept-Charset | 客户端要求服务器使用的字符编码 |
Authorization | 向服务器发送基本的身份证明 |
Cookie | 把服务器之前设置的所有cookie回传发服务器 |
Content-Length | 请求主体的字节长度 |
Content-Type | 记录主体内容的类型 |
Host | 服务器名称以及端口 |
Referrer | 发起请求的页面所在的地址 |
User-Agent | 对发起请求的客户端进行描述 |
HTTP响应
组成
- 请求行
- 请求首部
- 一个空行
- 可选的报文主体(body)
响应状态码
状态码 | 含义 | 描述 | 最常见 |
---|---|---|---|
1xx | 情报 | 服务器已接收请求,并进行了处理 | |
2xx | 成功 | 服务器已接受请求,并完成了处理 | |
3xx | 重定向 | 服务器已接受请求,并完成了处理,但为了完成指定动作,客户端还需再做一些其他工作 | |
4xx | 客户端错误 | 客户端发送的请求出现了某些问题 | 404 Not Found |
5xx | 服务端错误 | 服务器因为某些原因无法正确处理请求 | 500 Internal Server Error |
响应首部
功能:向客户端传达更多与响应相关或者与服务器(对客户端)诉求相关的信息
常见首部
首部 | 说明 |
---|---|
Allow | 服务器支持的请求方法 |
Content-Length | 响应主体的字节长度 |
Content-Type | 主体内容的类型 |
Date | 当前时间(GMT) |
Location | 重定向时,告知客户端接下来向哪个URL发送请求 |
Server | 返回服务器的域名 |
Set-Cookie | 在客户端设置一个cookie |
WWW-Authenticate | 在Authorization请求首部中应该提供哪种类型的身份验证信息常与 401 Unauthorized 一同发送 |
URI
Web应用的各个组成部分
处理器
功能
- 接收和处理客户端发来的请求
- 调用模板引擎:生成HTML,并把数据填充至将要回传给客户端的响应报文中
MVC模型
全程 | 含义 | 说明 |
---|---|---|
Model | 模型 | 表示底层的数据 |
View | 视图 | 以可视化的方式向用户展示模型 |
Controller | 控制器 | 根据用户的输入对模型进行修改 |
模板引擎
功能:通过模板和数据生成最终的HTML
模板类型
类型 | 说明 |
---|---|
静态模板 | 夹杂着占位符的HTML,通过将占位符替换成相应的数据来生成最终的HTML |
动态模板 | 除了HTML和占位符之外,还包含一些编程语言结构,如条件语句、迭代语句、变量JavaServer Pages(JSP)、Active Server Pages(ASP)、Embedded Ruby(ERB) |
Hello Go
go 命令比较
命令 | 功能 |
go run | 编译并直接运行文件,会产生一个临时文件(不会产生 .exe文件) |
直接在命令行输出程序执行的结果,方便用户调试 | |
go build | 测试编译包,检查是否有编译错误 |
如果是一个可执行的文件源码(即main包),则会生成可执行文件 | |
go install | 先编译导入的包文件,再编译主程序 |
编译后生成的可执行文件放到bin目录下($GOPATH/bin),编译后的包文件放到pkg目录下($GOPATH/pkg) |
使用Go构建Hello Go Web应用
代码
package main
import (
"fmt"
"net/http"
)
func handler(writer http.ResponseWriter,request *http.Request) {
fmt.Fprintf(writer,"Hello World, %s",request.URL.Path[1:])
}
func main(){
http.HandleFunc("/",handler)
http.ListenAndServe(":8080",nil)
}
Linux
#在文件夹src下创建serve.go文件
gedit /home/as/Documents/Go/src/first_webapp/serve.go
#输入以上代码
#执行
go install first_webapp
浏览器打开 http://localhost:8080/
Windows
1、打开LiteIDE >> 新建 >> 模板【选择Go1 Commnand Project】 >> 名称【Server】 >> 位置【F:\Go\goProject\src\server】 >> yes
2、输入以上代码
3、点击中间靠右边的蓝色BR(BuildAndRun)按钮即可
4、浏览器打开 http://localhost:8080/
结果展示
如果一切正常,就能在浏览器中看到如下效果
更多Go内容请见: https://blog.csdn.net/weixin_39777626/article/details/85066750