240 lines
5.7 KiB
Markdown
240 lines
5.7 KiB
Markdown
|
|
# Simple Web Server 使用指南
|
|||
|
|
|
|||
|
|
## 快速开始
|
|||
|
|
|
|||
|
|
### 1. 编译项目
|
|||
|
|
```bash
|
|||
|
|
go build -o webserver.exe .
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 运行服务器
|
|||
|
|
```bash
|
|||
|
|
./webserver.exe
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
启动后你将看到以下信息:
|
|||
|
|
```
|
|||
|
|
=== Simple Web Server ===
|
|||
|
|
|
|||
|
|
Configuration loaded:
|
|||
|
|
HTTP Port: 9000
|
|||
|
|
Admin Port: 9001
|
|||
|
|
Root Directory: ./web
|
|||
|
|
|
|||
|
|
Web Server started on port 9000
|
|||
|
|
Root directory: ./web
|
|||
|
|
Admin console: http://localhost:9001
|
|||
|
|
Admin server started on port 9001
|
|||
|
|
|
|||
|
|
Server is running. Press Ctrl+C to stop.
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 访问服务
|
|||
|
|
打开浏览器访问:
|
|||
|
|
- **主服务器**: http://localhost:9000
|
|||
|
|
- **管理控制台**: http://localhost:9001
|
|||
|
|
|
|||
|
|
## 功能测试
|
|||
|
|
|
|||
|
|
### 自动化测试
|
|||
|
|
在 Windows 上使用 test.bat 脚本进行自动化测试:
|
|||
|
|
```bash
|
|||
|
|
test.bat
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 手动测试
|
|||
|
|
|
|||
|
|
#### 1. 测试正常页面(200 OK)
|
|||
|
|
访问以下地址应该返回 200 状态码:
|
|||
|
|
- http://localhost:9000/
|
|||
|
|
- http://localhost:9000/index.html
|
|||
|
|
- http://localhost:9000/test.html
|
|||
|
|
|
|||
|
|
#### 2. 测试404错误页面
|
|||
|
|
访问不存在的页面应该返回 404 状态码:
|
|||
|
|
- http://localhost:9000/notfound.html
|
|||
|
|
- http://localhost:9000/missing-page.html
|
|||
|
|
|
|||
|
|
浏览器应该显示友好的 404 错误页面。
|
|||
|
|
|
|||
|
|
#### 3. 测试501错误
|
|||
|
|
使用 POST 方法应该返回 501 状态码:
|
|||
|
|
```bash
|
|||
|
|
curl -X POST http://localhost:9000/test
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
浏览器或 curl 应该显示"方法未实现"页面。
|
|||
|
|
|
|||
|
|
#### 4. 管理控制台功能
|
|||
|
|
访问 http://localhost:9001/ 查看:
|
|||
|
|
- 服务器运行状态
|
|||
|
|
- 实时访问日志
|
|||
|
|
- 请求统计信息
|
|||
|
|
- 清空日志按钮
|
|||
|
|
|
|||
|
|
## 配置服务器
|
|||
|
|
|
|||
|
|
### 修改端口
|
|||
|
|
编辑 `config.json` 文件:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"port": 9000,
|
|||
|
|
"admin_port": 9001,
|
|||
|
|
"root_dir": "./web"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- `port`: HTTP 服务器端口
|
|||
|
|
- `admin_port`: 管理控制台端口
|
|||
|
|
- `root_dir`: 静态文件根目录
|
|||
|
|
|
|||
|
|
修改后需要重启服务器。
|
|||
|
|
|
|||
|
|
### 添加网页文件
|
|||
|
|
将 HTML、CSS、JavaScript、图片等静态文件放到 `web` 目录下,然后通过浏览器访问:
|
|||
|
|
```
|
|||
|
|
http://localhost:9000/your-file.html
|
|||
|
|
http://localhost:9000/css/style.css
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 访问日志说明
|
|||
|
|
|
|||
|
|
服务器会在控制台输出每条请求的日志,格式如下:
|
|||
|
|
```
|
|||
|
|
[时间] 客户端IP 请求方法 请求URL HTTP版本 状态码 响应时间
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
示例:
|
|||
|
|
```
|
|||
|
|
[2026-03-30 11:55:22] 127.0.0.1 GET / HTTP/1.1 200 0s
|
|||
|
|
[2026-03-30 11:55:23] 127.0.0.1 GET /notfound.html HTTP/1.1 404 1ms
|
|||
|
|
[2026-03-30 11:55:24] 127.0.0.1 POST /test HTTP/1.1 501 2ms
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 管理控制台功能说明
|
|||
|
|
|
|||
|
|
### 1. 服务器状态监控
|
|||
|
|
- 显示服务器运行状态(Running/Stopped)
|
|||
|
|
- 显示当前监听端口
|
|||
|
|
- 显示总请求数量
|
|||
|
|
- 显示管理控制台端口
|
|||
|
|
|
|||
|
|
### 2. 实时日志查看
|
|||
|
|
- 自动刷新最近10条访问日志
|
|||
|
|
- 显示每条日志的详细信息:
|
|||
|
|
- 时间戳
|
|||
|
|
- 客户端IP
|
|||
|
|
- 请求方法
|
|||
|
|
- 请求URL
|
|||
|
|
- 响应状态码
|
|||
|
|
- 响应时间
|
|||
|
|
|
|||
|
|
### 3. 操作按钮
|
|||
|
|
- **Refresh Status**: 刷新服务器状态
|
|||
|
|
- **View All Logs**: 查看完整日志页面
|
|||
|
|
- **Clear Logs**: 清空所有访问日志
|
|||
|
|
- **Refresh Logs**: 手动刷新日志显示
|
|||
|
|
|
|||
|
|
### 4. 日志管理
|
|||
|
|
- 在管理控制台主页可以清空日志
|
|||
|
|
- 点击"Clear Logs"按钮清空所有访问记录
|
|||
|
|
- 清空后会自动刷新日志显示
|
|||
|
|
|
|||
|
|
### 5. 完整日志页面
|
|||
|
|
访问 http://localhost:9001/logs 查看:
|
|||
|
|
- 所有历史访问日志
|
|||
|
|
- 按时间倒序排列
|
|||
|
|
- 每条日志的详细信息
|
|||
|
|
- 总请求数统计
|
|||
|
|
|
|||
|
|
## 限制与说明
|
|||
|
|
|
|||
|
|
### 仅支持 GET 方法
|
|||
|
|
本服务器仅实现 HTTP GET 方法,其他方法(POST、PUT、DELETE 等)会返回 501 错误。
|
|||
|
|
**注意**:管理控制台支持 DELETE 方法用于清空日志。
|
|||
|
|
|
|||
|
|
### HTTP 版本
|
|||
|
|
服务器支持 HTTP/1.1 协议。
|
|||
|
|
|
|||
|
|
### 并发处理
|
|||
|
|
服务器使用 goroutine 处理并发请求,可以同时处理多个客户端连接。
|
|||
|
|
|
|||
|
|
### 安全注意事项
|
|||
|
|
- 本服务器是一个简单的教学用服务器,不要用于生产环境
|
|||
|
|
- 没有实现身份验证和授权机制
|
|||
|
|
- 没有防止路径遍历攻击的完整防护
|
|||
|
|
- 建议仅在受信任的网络环境中使用
|
|||
|
|
|
|||
|
|
## 常见问题
|
|||
|
|
|
|||
|
|
### 1. 端口被占用
|
|||
|
|
如果看到端口被占用错误,修改 `config.json` 中的端口号。
|
|||
|
|
|
|||
|
|
### 2. 文件未找到
|
|||
|
|
确保文件放在 `web` 目录下,且文件名正确。
|
|||
|
|
|
|||
|
|
### 3. 管理控制台无法访问
|
|||
|
|
检查防火墙设置,确保端口 9001(或配置的管理端口)未被阻止。
|
|||
|
|
|
|||
|
|
### 4. 服务器未响应
|
|||
|
|
按 Ctrl+C 停止服务器,检查是否有进程残留,然后重新启动。
|
|||
|
|
|
|||
|
|
### 5. 日志无法清空
|
|||
|
|
- 确保管理控制台已启动
|
|||
|
|
- 检查浏览器控制台是否有错误信息
|
|||
|
|
- 尝试刷新管理控制台页面
|
|||
|
|
|
|||
|
|
## 技术细节
|
|||
|
|
|
|||
|
|
### 多线程实现
|
|||
|
|
服务器使用 Go 的 goroutine 和 channel 实现多线程并发:
|
|||
|
|
```go
|
|||
|
|
go handleConnection(conn) // 每个连接一个 goroutine
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### HTTP 解析
|
|||
|
|
- 手动解析 HTTP 请求行和头部
|
|||
|
|
- 不依赖第三方库,完全使用 Go 标准库
|
|||
|
|
- 支持 URL 参数解析
|
|||
|
|
|
|||
|
|
### 响应构造
|
|||
|
|
- 按照规范构建 HTTP/1.1 响应报文
|
|||
|
|
- 自动添加必要的头部字段
|
|||
|
|
- 根据文件扩展名设置 Content-Type
|
|||
|
|
|
|||
|
|
### 错误处理
|
|||
|
|
- 友好的错误页面设计
|
|||
|
|
- 明确的状态码返回
|
|||
|
|
- 详细的错误日志记录
|
|||
|
|
|
|||
|
|
### 日志管理
|
|||
|
|
- 内存中存储访问日志
|
|||
|
|
- 支持清空日志功能
|
|||
|
|
- REST API:DELETE /api/logs
|
|||
|
|
|
|||
|
|
## 项目依赖
|
|||
|
|
- Go 1.21 或更高版本
|
|||
|
|
- 无需第三方库,仅使用 Go 标准库
|
|||
|
|
|
|||
|
|
## 支持的文件类型
|
|||
|
|
服务器支持以下文件类型并自动设置正确的 Content-Type:
|
|||
|
|
|
|||
|
|
| 扩展名 | Content-Type |
|
|||
|
|
|--------|--------------|
|
|||
|
|
| .html, .htm | text/html |
|
|||
|
|
| .css | text/css |
|
|||
|
|
| .js | application/javascript |
|
|||
|
|
| .json | application/json |
|
|||
|
|
| .txt | text/plain |
|
|||
|
|
| .jpg, .jpeg | image/jpeg |
|
|||
|
|
| .png | image/png |
|
|||
|
|
| .gif | image/gif |
|
|||
|
|
| .svg | image/svg+xml |
|
|||
|
|
| .ico | image/x-icon |
|
|||
|
|
| .pdf | application/pdf |
|
|||
|
|
|
|||
|
|
其他文件类型使用 `application/octet-stream`。
|
|||
|
|
|
|||
|
|
## 停止服务器
|
|||
|
|
按 Ctrl+C 或直接关闭终端窗口即可停止服务器。
|