Files
computer-network/USAGE.md
T
2026-03-30 22:05:57 +08:00

240 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 或直接关闭终端窗口即可停止服务器。