项目

通用

个人资料

操作

发布信息

  • 版本: 1.4.54
  • 上一版本: 1.4.53
  • 分支: 1.4
  • 状态: 稳定版
  • 发布目的: 错误修复
  • 发布经理: gstrauss
  • 发布日期: 2019-05-27

1.4.53版本的重要变更

  • 行为变更: 严格的 URL 解析和规范化 (可配置)
  • 性能增强,错误修复

下载

亮点

  • 行为变更: 严格的 URL 解析和规范化 (可配置)
  • 行为变更: mod_webdav 现在拒绝部分 PUT 请求 (可配置)
  • mod_auth: HTTP Auth Digest 算法=SHA-256
  • mod_webdav: 主要重写: 鲁棒性、性能、RFC 合规性
  • mod_maxminddb: 新增; 废弃了已停止开发的 mod_geoip

行为变更

lighttpd 现在对 HTTP 请求执行严格的 URL 解析和规范化。这是可配置的,但除非另行明确配置,否则默认现在是严格的。

默认启用严格的 URL 解析和规范化为 mod_redirect 和 mod_rewrite 提供了更一致的行为,它们与(URL 编码的)URL 请求匹配。然而,默认解码 %2F,虽然通常为了保持一致性是可取的,但对于那些在 URL 路径中编码 URL 并依赖字面量“/”作为分隔符的用户来说,可能是一个破坏性变更。对于这些用途,需要在 lighttpd 配置中显式设置“url-path-2f-decode”=>“disable”。

https://redmine.lighttpd.ac.cn/projects/lighttpd/wiki/Server_http-parseoptsDetails

server.http-parseopts 的推荐设置如下,除非特定用途需要更宽松的设置

      server.http-parseopts = (
        "header-strict"            => "enable",
        "host-strict"              => "enable",
        "host-normalize"           => "enable",
        "url-normalize"            => "enable",
        "url-normalize-unreserved" => "enable",
        "url-normalize-required"   => "enable",
        "url-ctrls-reject"         => "enable",
        "url-path-2f-decode"       => "enable",
        "url-path-dotseg-remove"   => "enable",
        "url-query-20-plus"        => "enable" 
      )

1.4.53 版本以来的变更

  • [mod_evhost] 处理 IPv6 字面地址; 添加测试
  • [核心] 分离 server_main_loop() 函数,标记为热点
  • [核心] 标记启动/关闭函数为冷点
  • [核心] server_main_loop() 的一些清理
  • [核心] fdevent_process()
  • [核心] srv->max_fds_lowat 和 srv->max_fds_hiwat
  • [核心] 移除 server.h
  • [mod_staticfile] 如果 ext 数组非空则搜索
  • [核心] 在栈上存储 joblist 指针
  • [核心] 快速清空请求缓冲区以供复用
  • [核心] connection_state_machine() 的辅助函数
  • [核心] 性能: 优化 connection_read_header()
  • [核心] 在 connection_read_header() 中解析请求
  • [核心] log_request_header_on_error 集中在一处
  • [核心] 仅在需要日志记录时才复制请求
  • [核心] 使 parse_request, request.request 使用相同的缓冲区
  • [核心] 优先使用 buffer_caseless_compare()
  • [核心] 将请求头缓冲区传递给 http_request_parse
  • [核心] 替换 con->response.keep_alive
  • [核心] 标记 log_error_write*() 函数为冷点
  • [核心] http_request_parse() 标记错误路径为冷点
  • [核心] 将代码从请求行解析循环中提取
  • [核心] get_http_method_key() 首先按字符串长度匹配
  • [核心] RFC7230 HTTP 版本解析
  • [mod_accesslog] 尝试重建请求行
  • [多处] 次要: 移除重复条件
  • [mod_deflate] 遵守对 x-gzip, x-bzip2 的请求
  • [mod_auth] 次要: 调整配置验证
  • [核心] 丢弃过大的尾部
  • [核心] 如果 POLLRDHUP,且读取队列为空则不保持活动
  • [核心] 修复错误中 gw_backend 指令的拼写
  • [多处] 减少列表重置大小时的代码重复
  • [核心] con->is_ssl_sock
  • [核心] connection_handle_write() 更新连接状态
  • [核心] 如果未初始化,则跳过 plugins_call_cleanup
  • [核心] 更简单的循环来运行插件钩子
  • [核心] 修复 srv->split_vals 数组的混合使用 (修复 #2932)
  • [核心] 从事件框架内部调度事件
  • [核心] 不要多次调用 fd 事件处理器,它们可能已经消失 (修复段错误)
  • [核心] poll: fdarray 使用 fd 作为索引,而不是 fde_ndx
  • [核心] 将 FDEVENT_* 映射到操作系统事件框架
  • [核心] 优先使用 memchr() 而非 strchr()
  • [核心] 使用 openssl 读取和丢弃请求体
  • [mod_openssl] 从全局作用域继承密码列表
  • [mod_openssl] 默认: ssl.cipher-list = "HIGH"
  • [mod_proxy] 如果 Content-Length > 0 则传递给后端
  • [核心] 允许带请求体的 GET 请求的配置选项
  • [核心] 一些 fdevent 代码的精简
  • [核心] 移除 fdevents 外部的 fde_ndx 成员
  • [核心] 移除对 allow_http11 的冗余检查
  • [mod_openssl] 使用 16k 静态缓冲区而不是 64k
  • [核心] 将服务器负载检查移出主循环
  • [核心] 隔离 fdevent 处理
  • [核心] 未读取任何内容时释放空块缓冲区
  • [核心] 性能: 将 (fdnode *) 传递给 epoll 和 kqueue
  • [核心] 修改配置解析器以处理多个 }
  • [核心] 为已注册的 fdevent fd 传递 (fdnode *)
  • [mod_auth] http_auth_digest_hex2bin()
  • [mod_auth] http_auth_info_t 摘要抽象
  • [mod_auth] 传递 http_auth_require_t 用于 401 未授权
  • [核心] QNX 7.0 上禁用 SOCK_NONBLOCK
  • [mod_auth] HTTP Auth Digest 算法=SHA-256
  • [核心] 消除 coverity 警告
  • [mod_magnet] 修复脚本返回类型无效导致的崩溃 (修复 #2938)
  • [构建] 移除 -Wdeclaration-after-statement
  • [核心] 在更多地方传递 conf.follow_symlink
  • [核心] 修复使用 server.error-handler 选项时断言失败的问题 (修复 #2941)
  • [核心] 扩展目录重定向以接受 HTTP 状态
  • [文档] 次要调整 create-mime.conf.pl 正则表达式匹配 (#2942)
  • [核心] 用于 GCC 7.0 的 attribute((fallthrough))
  • [核心] fdevent_mkstemp_append() (共享)
  • [核心] off_t upload_temp_file_size
  • [核心] 如果没有 POLLRDHUP 则清除 FDEVENT_RDHUP
  • [mod_wstunnel] 修复大端序的 ping-interval (修复 #2944)
  • [核心] 修复 http-parseopts 中的中止问题 (修复 #2945)
  • [核心] 移除 http-parseopts 中重复的斜杠
  • [核心] 修复 1.4.52 版本 POST 请求内存使用退化问题 (修复 #2948)
  • [多处] SETDEFAULTS_FUNC 中更清晰的 calloc 使用
  • [核心] 为一些 etag 原型添加 const
  • [核心] attribute((format ...))
  • [核心] 用于错误日志记录的 struct log_error_st
  • [核心] log_error, log_perror 使用 printf 风格的格式
  • [核心] 新增 worker_init 钩子以跟随父进程 fork
  • [核心] 将 open() 替换为 fdevent_open_cloexec()
  • [mod_webdav] 主要重写 (修复 #1818)
  • [核心] 对 OPTIONS /non-existent/path HTTP/1.1 返回 200 (修复 #2939)
  • [mod_webdav] 用 "<...>" 环绕 Lock-Token
  • [mod_webdav] 修复 uuid 检测宏
  • [mod_webdav] 修复 PROPPATCH 中空白节点的不当行为
  • [mod_webdav] 在 do{}while(0) 后清理资源
  • [mod_webdav] 检查 If-Match, If-Unmodified-Since (#1818)
  • [mod_webdav] 废弃不安全的局部 PUT 兼容性
  • [mod_webdav] 在更多响应中提供 ETag
  • [mod_webdav] 平台可移植性修复
  • [mod_webdav] 在 FreeBSD 上禁用 elftc_copyfile()
  • [mod_webdav] 特殊处理 If: (<DAV:no-lock>)
  • [mod_webdav] 检查 If-None-Match (#1818)
  • [stat_cache] 符号链接策略检查的独立函数
  • [stat_cache] 将符号链接策略与数据结构分离
  • [stat_cache] 存储不带尾部斜杠的条目
  • [stat_cache] 传递 age 参数用于 stat 缓存清理
  • [stat_cache] 移除 splaytree 插入/删除调试代码
  • [stat_cache] FAM: 减少字符串复制
  • [stat_cache] FAM: 检查 FAMNextEvent() 返回码
  • [stat_cache] FAM: 使用条目哈希索引作为用户数据
  • [stat_cache] FAM: 改进修改文件处理
  • [stat_cache] FAM: 忽略跟随符号链接配置
  • [stat_cache] FAM: 添加前检查哈希冲突
  • [stat_cache] FAM: 忽略没有有效匹配的事件
  • [stat_cache] FAM: 使条目失效的函数
  • [stat_cache] 使条目失效的接口
  • [mod_webdav] 文件修改后更新 stat_cache
  • [核心] 在 etag 中使用高精度 stat 时间戳
  • [scons] CentOS 下静态构建的调整
  • [核心] 在清除路径前使用路径发出跟踪
  • [核心] http_chunk_append_file_fd()
  • [多处] 在某些情况下更早打开目标文件
  • [stat_cache] 不再为 stat 调用 stat() 和 open()
  • [stat_cache] FAM: 改进监控,缓存 16 秒
  • [stat_cache] FAM: FDEVENT_IN 的独立例程
  • [stat_cache] FAM: 仅空白符的更改
  • [mod_webdav] 消除 coverity 警告
  • [文档] 强调模块加载顺序的重要性 (修复 #2946)
  • [核心] 行为变更: 更严格的 URL 规范化
  • [stat_cache] 修复 cmake 编译错误
  • [cmake] 帮助 cmake 在 FreeBSD 上找到 sys/event.h
  • [scons] 帮助 scons 在 FreeBSD 上找到 sys/event.h
  • [构建] 检测 FreeBSD elftc_copyfile()
  • [mod_openssl] 使用 SSL_CTX_set_client_hello_cb()
  • [核心] 支持带有 If-None-Match 的弱 etags
  • [核心] 在栈上存储 log_state_handling 标志
  • [核心] 在失效前检查 splay_tree 是否为 NULL
  • [mod_webdav] 规避 Microsoft-WebDAV-MiniRedir
  • [mod_webdav] 记录 Microsoft-WebDAV-MiniRedir 的 bug
  • [mod_webdav] 使 stat_cache 中的父目录失效
  • [文档] systemd socket 激活配置示例
  • [核心] chunkqueue 性能: 代码复用
  • [核心] chunkqueue 性能: 专门化的 buffer.h 函数
  • [核心] chunkqueue 性能: 跳过打开 0 长度文件
  • [核心] chunkqueue 性能: 将小文件读入内存
  • [核心] buffer_reset() 不应传入 NULL
  • [测试] has_feature() 辅助函数
  • [测试] 跳过 mod-secdownload HMAC-SHA1, HMAC-SHA256
  • [核心] 在 OS X 上使用高精度 stat 时间戳
  • [mod_magnet] 向 lua 暴露服务器地址 (本地 IP)
  • [核心] 调整 http_chunk read() 重试循环
  • [mod_maxminddb] MaxMind GeoIP2 支持
  • [mod_authn_ldap] ldap_set_option LDAP_OPT_RESTART (修复 #2940)

外部参考

更新者 gstrauss 大约 6 年前 · 1 次修订