# 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 或直接关闭终端窗口即可停止服务器。