Web基础
一切的网络开发,本质上就是服务的请求与响应处理
静态web、动态web
静态Web不发生变化:
- HTML、CSS
- 是提供给所有人看的,数据几乎不发生变化
动态Web,所有人看到的都不一样
- 抖音
- 提供给所有人看到的数据都不一致,会发生变化。不同时间不同地点都可能不同
Web请求的基本流程
- DNS解析
- 客户端通过域名发送DNS请求
- DNS服务器返回该域名的IP地址
- 建立TCP连接
- 客户端使用得到的IP地址,通过TCP三次握手与服务器建立连接
如果是 HTTPS,还会在此基础上进行 TLS/SSL 握手,协商加密算法和密钥,建立加密通道。
- 发送HTTP/HTTPS请求
-
客户端向服务器发送HTTP/HTTPS请求,包含以下内容:
-
请求行:
- 请求方法(如
GET,POST) - URL路径
- HTTP版本
- 请求方法(如
-
请求头
-
请求体(可选):
- 一些方法(如
POST,PUT)可能会包含请求体,用于传递数据(如表单form)
- 一些方法(如
-
- 服务器处理请求
- 返回HTTP响应
-
服务器向客户端返回 HTTP 响应,包含以下内容:
-
响应行:
- HTTP 版本
- 状态码(如
200 OK,404 Not Found)
-
响应头
-
响应体:
- 包含实际数据(如 HTML、JSON、图片二进制流)。
-
- 客户端渲染或处理响应
-
浏览器:
- 解析HTML
- 根据HTML内容发送额外请求
- 渲染页面并执行相关脚本
- 关闭连接
Web请求的基本流程可以概括为 客户端发起请求 -> 服务器处理请求 -> 客户端接收响应
简单的HTTP编程
Hello World!
package main
import (
"fmt"
"net/http"
)
//服务端 -> 请求响应
func main() {
// 访问这个url就会触发 hello 函数
http.HandleFunc("/hello", hello)
http.ListenAndServe("127.0.0.1:8080", nil)
}
func hello(resp http.ResponseWriter, req *http.Request) {
fmt.Fprintf(resp,"Hello World!")
//或者
resp.Write([]byte("Hello World!"))
}
其中:
-
http.HandleFunc是用于设置 HTTP 路由和处理函数的标准库方法。它的作用是将某个 URL 路径与一个处理函数(HandlerFunc)关联起来,从而定义服务器在特定路径接收到请求时应该执行的逻辑。-
使用方式:
func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) -
参数说明
-
pattern:- 表示路径,比如
"/hello"表示匹配的URL路径
- 表示路径,比如
-
handler:- 是一个函数,格式为
func(ResponseWriter, *Request)) http.ResponseWritet:用于向客户端发送响应数据*http.Request:包含客户端的请求信息(如请求办法、头信息、URL、请求体等)
- 是一个函数,格式为
-
-
-
http.ListenAndServe启动服务器:- 服务器开始监听指定端口(如
8080),处理客户端的HTTP请求
- 服务器开始监听指定端口(如
简单尝试
既然已经学了Web的基础操作了,那就再完成一个简单的用户管理系统吧
要求:
- 具有注册、登录、修改密码、获取和修改用户信息等功能
(嘿嘿)