# Changelog

所有对本项目的显著更改都将记录在此文件中。
## [2.0.2] - 2026-01-28
### 修复
- 修复暗色模式下统计图表图例文字颜色不随主题变化的问题
- 优化主题切换时图表图例文字颜色的平滑过渡效果
- 调整环形图的粗细，使其显示更加突出

## [2.0.1] - 2026-01-27
### 新增
- 增加暗色模式支持
- 添加主题切换按钮，支持在亮色和暗色模式之间切换
- 实现主题偏好的本地存储，保持用户的主题选择

## [2.0.0] - 2026-01-18
### 重大重构
- **核心查询逻辑重构**：移除了所有响应合并相关代码，简化了DNS查询处理流程
- **并行查询模式重设计**：改为返回第一个成功响应，提高响应速度
- **fast-ip模式优化**：只向一个预先测试出的最快服务器发送请求，降低资源消耗
- **代码结构优化**：移除了冗余的响应合并机制，减少了内存占用和CPU消耗

### 移除
- 删除了 `mergeResponses` 函数：不再合并多个DNS响应
- 删除了 `recordKey` 结构体：不再需要唯一标识DNS记录
- 删除了 `getRecordKey` 函数：不再需要获取DNS记录的唯一标识
- 移除了所有响应合并相关的代码

### 改进
- **parallel模式**：向多个上游服务器并行发送请求，返回第一个成功响应
- **fast-ip模式**：通过ping测试选择最快服务器，只向一个服务器发送请求
- **默认模式**：采用新的并行查询逻辑，返回第一个成功响应
- **资源管理**：优化了连接池使用，减少资源消耗
- **DNSSEC验证**：只对将要返回的响应进行验证，减少不必要的计算

### 性能提升
- 减少了内存占用：不再存储多个响应进行合并
- 降低了CPU消耗：移除了复杂的响应合并算法
- 提高了响应速度：返回第一个成功响应，无需等待所有服务器响应
- 减少了网络流量：fast-ip模式只向一个服务器发送请求

## [1.2.7] - 2026-01-17
### 改进
- 实现服务器启动时远程屏蔽列表获取和DNS服务启动同时进行
- 新增`LoadLocalRulesOnly()`方法，只加载本地规则和hosts文件，确保服务器快速启动
- 在main.go中使用`LoadLocalRulesOnly()`替代`LoadRules()`，不再等待远程规则获取完成
- 添加异步加载远程规则的goroutine，服务器启动后在后台加载远程规则
- 优化缓存机制，本地有缓存时自动加载，服务器启动时只检查更新而不是重新获取
- 修改`fetchRemoteRules`方法，只有在缓存需要更新时才去远程获取规则，否则直接从缓存加载
- 完善错误处理，当从远程获取失败时，尝试使用过期的缓存
- 服务器和设置界面优化调整，增加缓存模式设置、缓存大小、缓存时间设置

## [1.2.6] - 2025-12-30
### 新增
- 实现查询日志详情的域名信息显示功能
- 实现GFWList功能，可以使用Steam++作为代理访问YouTube,谷歌等被屏蔽的网站
## [1.2.5] - 2025-12-26
### 新增
- 增加了对IPv6的支持配置项，默认关闭；
- 增加跟踪器状态显示（匹配tracker/trackers.json数据库）；
- 全局UX改进，包括但不限于：
  - 增加了页面滚动时，菜单栏和顶部标题栏保持固定的功能；
  - 优化了页面适应窗口大小的改变，确保在所有设备上都能正确显示；
  - 增加点击解析记录后弹窗日志详情的UI/UX，使用现代化设计和动画效果；
  - 增加了查询日志详情界面的滚动条，方便查看长日志。
### 改进
- 新增API接口，用于查询解析日志详情；
- 支持EDNS，在web界面查询日志详情的请求列表区域增加了EDNS标记显示。
### 修复
- 修复DNS服务器地址缺少端口号导致的Server Failed问题；
- 修复查询日志详情接口返回的日志格式错误问题，现在返回的日志包含完整的解析记录和解析时间；
- 修复查询日志详情接口返回的日志中，解析记录中缺少IP地址、类型、DNSSEC验证状态等信息的问题；
- web界面系统设置加载后不获取数据和保存配置不生效的问题；
- 修复了DNS查询超时设置过短导致的"Server failed"错误。
### 更新
- 更新Swagger API文档。

## [1.2.4] - 2025-12-25
### 改进
- 修复DNS解析记录显示，现在显示完整格式："A: 104.26.24.30 (ttl=193)" 而不仅仅是IP地址
- 移除了查询日志列表中的"屏蔽规则"列，但在详情弹窗中仍保留
- 在弹窗日志详情中，只有被屏蔽或者有自定义规则时才显示规则信息
- 改进了日志详情弹窗的UI/UX，使用现代化设计和动画效果
- 移除了右上角的服务器状态卡片（CPU、查询统计等）
- 实现了页面滚动时，菜单栏和顶部标题栏保持固定
- 优化了页面适应窗口大小的改变，确保在所有设备上都能正确显示
### 修复
- 修复了移动端侧边栏在打开时遮挡页面内容的问题
- 修复了侧边栏布局，分离了桌面端和移动端侧边栏，使用CSS媒体查询控制显示

## [1.2.3] - 2025-12-25
### 修复
- 修复DNS服务器地址缺少端口号导致的Server Failed问题
- 添加normalizeDNSServerAddress函数，确保DNS服务器地址始终包含端口号，默认添加53端口
- 修改所有resolver.Exchange()调用，确保传递的服务器地址包含端口号
- 优化DNSSEC服务器合并逻辑，确保DNSSEC服务器地址也包含端口号

## [1.2.2] - 2025-12-25

### 新增
- 增加查询日志详情界面点击域名列表，显示解析日志的详细信息。
- 增加DNSSEC上游服务器的配置项。

### 修复
- web界面系统设置加载后不获取数据和保存配置不生效的问题。


## [1.2.1] - 2025-12-25

### 改进
- 增加IPv6支持配置项，默认关闭
### 修复
- 修复了DNS查询超时设置过短导致的"Server failed"错误
- 将默认DNS请求超时时间从5毫秒调整为1000毫秒

## [1.2.0] - 2025-12-24

### 添加
- 在查询日志详情的域名左侧添加DNSSEC状态锁图标和跟踪器状态图标
- 实现跟踪器状态显示（匹配tracker/trackers.json数据库）
- 添加跟踪器详情浮窗（鼠标悬停在眼睛图标上时显示跟踪器名称、类别、URL、来源等信息）
- 实现日志页面页码跳转功能（输入框+"前往"按钮）
- 实现日志页面显示数量选择功能（下拉框）

### 修改
- 异步加载跟踪器数据库并缓存，优化性能
- 将日志渲染逻辑改为支持异步操作的for...of循环
- 修复跟踪器浮窗CSS样式语法错误
- 在后端添加/tracker目录静态文件服务路由

## [1.1.4] - 2025-12-21

### 修复
- 修复规则优先级问题：确保自定义规则优先于远程规则
- 修复添加自定义规则后需要重启服务器的问题：通过在添加或删除规则后清空DNS缓存实现

## [1.1.3] - 2025-12-19

### 移除
- 移除search domain功能，不再支持自动添加域名前缀进行查询
- 移除DNSConfig结构体中的PrefixDomain字段
- 移除配置文件中的prefixDomain配置项

## [1.1.2] - 2025-12-19

### 添加
- 添加不验证DNSSEC的域名功能，支持通过配置文件指定需要跳过DNSSEC验证的域名模式
- 在DNSConfig结构体中增加NoDNSSECDomains字段，用于存储不验证DNSSEC的域名模式列表

### 修改
- 在forwardDNSRequestWithCache函数中添加域名匹配逻辑，检查域名是否包含不验证DNSSEC的模式
- 在所有查询模式（parallel、fastest-ip、default）中实现跳过DNSSEC验证的功能

## [1.1.1] - 2025-12-19

### 修改
- 修复NXDOMAIN响应传播逻辑，确保上游DNS服务器返回的NXDOMAIN响应能正确传递给客户端
- 优化fastest-ip和parallel查询模式下的NXDOMAIN响应选择机制
- 确保不存在的域名能被正确识别并返回NXDOMAIN状态码
- 修复服务器绑定地址配置，确保IPv4兼容性

## [1.0.0] - 2025-12-16

### 添加
- 在web界面查询日志详情的请求列表区域增加了EDNS标记显示
- 后端QueryLog结构体扩展，新增EDNS字段以记录查询是否使用EDNS
- 前端日志渲染逻辑支持EDNS标记的显示

### 修改
- 更新了`addQueryLog`函数签名，增加edns参数
- 调整了所有`addQueryLog`调用，确保传递正确的EDNS值
- 优化了日志表格的状态显示格式，使EDNS标记与DNSSEC、缓存状态等标记一致显示

## 格式说明

本CHANGELOG遵循[Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/)格式。

版本号遵循[语义化版本](https://semver.org/lang/zh-CN/)规范。
