产品介绍

BasicHttpServer - 轻量级HTTP服务器工具

BasicHttpServer图标

BasicHttpServer

轻量、高效的HTTP服务器工具

支持静态文件服务、目录浏览、简单请求处理,为开发和测试提供便捷的本地服务器环境

立即下载 查看用户手册

核心功能

静态文件服务

提供高效的静态文件服务功能,支持HTML、CSS、JavaScript、图片等各种静态资源的快速访问。自动处理MIME类型,确保浏览器正确解析各类文件。

支持大文件传输,优化的文件读取机制,提供稳定可靠的文件服务能力。

目录浏览

自动生成美观的目录索引页面,方便浏览服务器上的文件结构:

  • ✅ 基本的HTTP服务器功能,静态页面服务
  • ✅ 提供未定义类型文件的自动下载
  • ✅ 目录安全

可配置的服务器参数

灵活的配置选项,满足不同的使用需求:

  • 🔧 自定义端口号设置
  • 📂 可选择的根目录路径
  • 📝 详细的访问日志记录
  • 🔄 实时状态监控和连接显示

轻量级设计

极简设计理念,专注于核心功能:

  1. 占用资源少,启动快速
  2. 无需安装,绿色便携
  3. 界面简洁直观,易于操作
  4. 支持Windows各版本系统

系统要求与安装

最低系统要求

  • 💻 操作系统:Windows 7 及以上(32位/64位)
  • 🔧 .NET Framework 4.0 或更高版本
  • 💾 硬盘空间:5MB(工具本身)+ 网站文件存储所需空间
  • ⏱️ 无需特殊硬件要求

使用说明

本工具为绿色软件,无需安装,直接运行:

  1. 下载并解压到任意目录(如 D:\Tools\BasicHttpServer)
  2. 双击运行 BasicHttpServer.exe
  3. 程序运行时, 会检查其运行目录下是否存在一个foldername.txt,该文件用于指定服务器所使用的文件夹名称,不存在时会自动创建,并指定文件夹为files并创建
  4. 在界面中设置端口号,点击「Start」即可开始提供HTTP服务

注意:确保端口不被其他应用占用,且有足够的文件系统访问权限。

常见问题

常见问题(FAQ)

Q1:如何更改服务器端口?

A1:在应用程序界面中,直接修改端口号输入框的值,然后重新启动服务即可。

Q2:如何访问服务器上的文件?

A2:启动服务后,在浏览器中输入 http://localhost:端口号 即可访问根目录,或直接输入具体文件路径。

Q3:为什么访问文件夹时需要输入完整路径?

A3:本工具支持无论URL是否以/结尾,都会检查请求路径是否为文件夹,并自动查找index.html文件。

Q4:如何联系技术支持?

A4:若遇到问题或有功能建议,请发送邮件至 IAmSystem32@outlook.com,注明「BasicHttpServer+问题描述+系统版本」,我们会在3个工作日内回复。

完整技术文档

开发人员文档 - BasicHttpServer 技术实现解析

1. 服务器架构与核心组件

BasicHttpServer 是一个基于 .NET HttpListener 构建的轻量级 HTTP 服务器,采用事件驱动架构设计,以下是其核心架构组成:

  • 事件循环模型:使用 BeginGetContext/EndGetContext 异步模式处理连接请求,实现非阻塞 I/O 操作
  • 请求处理线程池:每个客户端请求由独立线程处理,避免请求间相互阻塞,提高并发能力
  • 模块化设计:功能按职责划分为不同模块,便于维护和扩展
  • 资源管理系统:完善的资源创建、使用和释放机制,确保不发生资源泄漏

2. HTTP 协议实现细节

服务器实现了完整的 HTTP/1.1 协议子集,支持以下特性:

  • 请求解析:支持解析 HTTP 方法、URL、请求头和查询参数
  • Range 请求支持:实现 RFC 7233 规范,支持断点续传和多线程下载
  • 缓存控制>:通过 Cache-Control 头实现客户端缓存控制,减少重复请求
  • 内容协商:根据 Accept 头和文件类型返回适当的 Content-Type 响应头
  • 错误状态处理:实现标准 HTTP 错误状态码和自定义错误页面(404、500、503、405)

3. API 端点与功能说明

服务器提供以下主要 API 端点和功能:

3.1 文件服务 API
  • 静态文件获取:`GET /{path}/{filename}` - 返回指定路径下的文件内容,自动设置正确的 MIME 类型
  • 目录浏览:`GET /{directory}/` - 当目录存在 index.html 时返回,否则返回 404 错误页面
  • 图标请求:`GET /favicon.ico` - 自动响应浏览器图标请求,支持多位置图标查找
3.2 系统控制 API
  • 隐藏窗口:`GET /cmd?command=hide` - 隐藏服务器主窗口
  • 显示窗口:`GET /cmd?command=show` - 显示服务器主窗口
  • 退出程序:`GET /cmd?command=exit` - 安全关闭服务器并退出程序
  • 清理日志:`GET /cmd?command=clearlog` - 清空日志内容
  • 切换日志锁定:`GET /cmd?command=togglelocklog` - 切换日志锁定状态,控制是否继续写入日志
3.3 临时数据存储 API
  • 存储临时文本:`POST /tempstring?key={key}` - 存储临时文本内容到指定键名
  • 获取临时文本:`GET /tempstring?key={key}` - 获取之前存储的临时文本内容

4. 核心类与方法详解

4.1 Form1 类(主窗体与控制中心)
  • Server_Start():初始化并启动 HTTP 服务器,配置监听端口和基本设置
  • Server_Stop():安全停止 HTTP 服务器,释放所有资源和连接
  • ProcessClientRequest():处理客户端请求的主入口,根据请求路径路由到不同处理逻辑
  • HandleFileRequest():处理文件请求,包括路径解析、文件读取和响应生成
  • ProcessRangeRequestAsync():异步处理 Range 请求,实现断点续传功能
4.2 辅助类与工具函数
  • Log 类:实现日志记录功能,支持实时控制台输出和文件持久化存储,使用 RTF 格式增强可读性
    • Write():写入普通日志信息
    • WriteError():写入错误日志,使用红色显示
    • WriteRequest():写入请求日志,使用蓝色显示
  • UrlHelper 模块:提供 URL 解析和参数提取功能
    • GetUrlParameters():从 URL 提取查询参数
    • GetUrlPart():提取 URL 中的特定部分
  • UrlParameters 类:参数管理类,提供参数的添加、获取和检查功能
    • Add():添加键值对参数
    • Get():获取指定键的参数值
    • Contains():检查是否包含指定键
  • HttpAssistant 模块:HTTP 相关辅助功能
    • GetMimeType():根据文件扩展名获取 MIME 类型
    • SendHttpResponse():统一的 HTTP 响应发送方法
    • FindByteSequence():在字节数组中查找特定序列

5. 配置选项与环境变量

  • 端口配置:默认端口 721,可通过界面自定义或通过 foldername.txt 配置
  • 服务文件夹设置:默认为当前目录下的 "files" 文件夹,可通过 foldername.txt 自定义
  • 图标路径配置:支持多位置图标查找,包括当前目录、服务目录和默认内置图标

6. 错误处理与调试机制

服务器实现了全面的错误处理和调试功能:

  • 异常捕获机制:所有关键操作均包含 try-catch-finally 块,确保异常不会导致服务器崩溃
  • 详细日志记录:错误发生时记录完整异常信息,包括堆栈跟踪,便于问题诊断
  • 用户友好错误页面:为常见错误提供清晰的错误页面和状态码,帮助客户端理解问题
  • 资源安全释放:使用 using 语句和 finally 块确保所有文件和网络资源正确释放

7. 安全考虑与最佳实践

  • 路径遍历防护:通过路径规范化和验证防止目录遍历攻击,确保只能访问服务目录内的文件
  • 请求验证:对 URL 参数和请求数据进行严格验证,防止注入攻击
  • 资源限制:实现请求处理超时和资源限制,防止恶意请求消耗过多系统资源
  • 最佳实践建议:建议在生产环境中部署时配合防火墙使用,限制访问来源,并定期检查日志

8. 扩展开发指南

要扩展服务器功能,开发者可以:

  • 在 ProcessClientRequest 方法中添加新的路由处理逻辑
  • 扩展 HttpAssistant 模块以支持更多 MIME 类型
  • 修改 InlinePages 模块自定义错误页面内容
  • 为 Log 类添加更多日志级别和功能

9. 技术规格与依赖项

  • 开发语言:Visual Basic .NET
  • 运行环境:.NET Framework
  • 核心依赖:System.Net.HttpListener, System.IO, System.Text
  • 网络协议支持:HTTP/1.1
  • 默认端口:14919

开发人员按钮...

GUI右上角区域有一个显示为"B"的按钮

按下会自动开放当前选定端口的防火墙,并自动启动服务器

不推荐在生产环境使用

版权与许可