操作
发布信息¶
- 版本: 1.4.56
- 上一版本: 1.4.55
- 分支: 1.4
- 状态: 稳定版
- 发布目的: 错误修复
- 发布经理: gstrauss
- 发布日期: 2020-11-29
1.4.55版本的重要变更¶
HTTP/2, TLS 库选项, brotli, 错误修复
下载¶
- https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.56.tar.gz
- GPG 签名: https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.56.tar.gz.asc
- SHA256:
bcb477cc06aa22246f540a02f946529ad03ba7c4d60d9bff142fb213b43307f9
- https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.56.tar.xz
- GPG 签名: https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.56.tar.xz.asc
- SHA256:
e4ce84cd79e8ae8ba193c7a7cc79c4afba9a076b443ef9f8d4bcd13a3354df77
- SHA256 校验和: https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.56.sha256sum
亮点¶
- HTTP/2 支持
- 必须在 lighttpd 1.4.56 的 lighttpd.conf 中启用;
在未来的版本中可能会默认启用 -
server.feature-flags += ("server.h2proto" => "enable", "server.h2c" => "enable")
- 必须在 lighttpd 1.4.56 的 lighttpd.conf 中启用;
- TLS 库选项: OpenSSL, mbedTLS, wolfSSL, GnuTLS, NSS
- mod_openssl (现有)
- mod_mbedtls (实验性)
- mod_wolfssl (实验性)
- mod_gnutls (实验性)
- mod_nss (实验性)
- TLS OCSP 装订
(mbedTLS 除外; mbedTLS 当前不支持) - TLS 会话票据密钥轮换控制
(NSS 除外; NSS 中有 API 限制) - mod_deflate brotli 支持
- mod_proxy 向后端发送 HTTP/1.1 请求 (从 HTTP/1.0 更改)
- 支持后端 (脚本) 生成的 103 Early Hints (RFC 8297)
- 平滑重启选项,用于转移监听文件描述符 (暂停时间最短)
server.systemd-socket-activation = "enable"
server.feature-flags += ("server.graceful-restart-bg" => "enable", "server.graceful-shutdown-timeout" => "15")
行为变更¶
- mod_openssl
- 默认 MinProtocol TLSv1.2
TLSv1 和 TLSv1.1 已弃用,不再受主流浏览器支持。
https://news.netcraft.com/archives/2020/03/03/browsers-on-track-to-block-850000-tls-1-0-sites.html
如果需要先前的行为,请配置
ssl.openssl.ssl-conf-cmd = ("MinProtocol" => "TLSv1")
如果使用 openssl <= 1.0.2 (生命周期结束)
ssl.openssl.ssl-conf-cmd = ("Protocol" => "-ALL, TLSv1, TLSv1.1, TLSv1.2")
- (内部) TLS 会话缓存默认禁用,
已被 lighttpd 强大的 TLSv1.2 会话票据支持取代
如果需要向后兼容性
server.feature-flags += ("ssl.session-cache" => "enable")
- (内部) openssl 为每个 SSL_CTX 创建一个会话票据加密密钥。
lighttpd 1.4.56 及更高版本为 lighttpd 服务器 (跨所有 SSL_CTX) 分配单个会话票据加密密钥
以保持一致性。 - ssl.ca-dn-file 的行为变更 (不常见); 适用于客户端
证书验证和 ssl.ca-dn-file (不常见)
如果客户端证书验证已启用
(ssl.verifyclient.activate = "enable"),
所有用于客户端证书验证的 CA 都必须存在于
ssl.ca-file 中。这是启用客户端证书
验证时的典型用例。(可选) ssl.ca-dn-file 中的证书
用于在服务器发送客户端证书请求时向客户端发送颁发者名称。
这些名称由客户端用于
证书选择,服务器要求客户端发送的
证书由 ssl.ca-dn-file 中的一个主题
颁发。
(之前的行为是将 ssl.ca-file 和 ssl.ca-dn-file 合并用于受信任的 CA。
新行为要求所有受信任的 CA 都列在 ssl.ca-file 中,
并将子集复制到 ssl.ca-dn-file 中以指定允许的
客户端证书颁发者。)
- 默认 MinProtocol TLSv1.2
- mod_deflate: 构建中默认禁用 bzip2 支持
- (使用
./configure --with-bzip2
启用)
bzip2 Content-Encoding 不受广泛支持
优先构建--with-brotli
brotli Content-Encoding 比 bzip2 受更广泛的支持
- (使用
未来计划的行为变更¶
- HTTP/2 支持将在未来版本中默认启用
- 平滑重启/关闭默认超时将从
0 (无限/无超时) 变为 5 秒 (或类似非零时间)
配置替代选项:
server.feature-flags += ("server.graceful-shutdown-timeout" => 5)
- mod_compress 已弃用; 请使用 mod_deflate
mod_compress 已被 mod_deflate 取代
注意: mod_compress 配置选项可能会在未来版本中移除 - mod_geoip 已弃用; 请使用 mod_maxminddb
注意: mod_geoip 将在未来的 lighttpd 版本中移除 - mod_authn_mysql 已弃用; 请使用 mod_authn_dbi
注意: mod_authn_mysql 将在未来的 lighttpd 版本中移除 - mod_mysql_vhost 已弃用; 请使用 mod_vhostdb_dbi 或 mod_vhostdb_mysql
注意: mod_mysql_vhost 将在未来的 lighttpd 版本中移除 - mod_cml 已弃用; 请使用 mod_magnet
注意: mod_cml 将在未来的 lighttpd 版本中移除
1.4.55版本变更¶
- [core] 性能: 请求处理
- [core] http_header_str_contains_token()
- [mod_flv_streaming] 解析查询字符串而不复制
- [mod_evhost] 使用局部数组分割值
- [core] 移除 srv->split_vals
- [core] 将 User-Agent 添加到 http_header_e 枚举
- [core] 在 struct connection 中存储 struct server *
- [core] 使用函数返回值指示头部读取完成
- [core] 用赋值替换 connection_set_state
- [core] 不将 srv 传递给 HTTP 头部解析函数
- [core] 冷区代码 buffer_string_prepare_append_resize()
- [core] chunkqueue_compact_mem()
- [core] connection_chunkqueue_compact()
- [core] 在请求中传递 con,而不是 srv 和 con
- [core] 减少 struct parse_header_state 的使用
- [core] 性能: 使用 \n 偏移量解析 HTTP 头部
- [core] 无需将 srv 传递给 connection_set_state
- [core] 性能: connection_read_header_more()
- [core] 性能: connection_read_header_hoff() 热区代码
- [core] 内联 connection_read_header()
- [core] 将 ptr 传递给 http_request_parse()
- [core] request.c 原型中更多的 'const'
- [core] 处理 alnum 或 - 字段名的常见情况
- [mod_extforward] 简化代码: 使用 light_isxdigit
- [core] 性能: array.c 性能增强
- [core] 将一些 data_* 函数标记为冷区代码
- [core] http_header.c 内部内联函数
- [core] 移除未使用的 array_reset()
- [core] 在 base.h 中优先使用 uint32_t 而非 size_t
- [core] struct buffer 大小使用 uint32_t
- [core] 移除 struct server 中未使用的成员
- [core] 清除 request.headers 的短路路径
- [core] 键值列表中数组键非空
- [core] 保持 a->data[] 有序; 移除 a->sorted[]
- [core] attribute_returns_nonnull
- [core] 区分 array_get_* 用于只读和读写
- [core] (const buffer *) 在 (struct burl_parts_t) 中
- [core] con->server_name 使用 (const buffer *)
- [core] 性能: 使用 memcpy() 初始化 con->conf
- [core] 减少 config_setup_connection() 的运行次数
- [core] 隔离 data_config.c, vector.c
- [core] 将 con->conditional_is_valid 视为位字段
- [core] const array 上的 http_header_hkey_get()
- [core] 内联缓冲区作为 DATA_UNSET 键的一部分
- [core] *_patch_connection() 的内联缓冲区键
- [core] 来自 array_get_element_klen 的 (data_unset *)
- [core] 内联缓冲区作为 data_string 值的一部分
- [core] 为 http_header_*_get() 的调用者添加 const
- [core] 内联数组作为 data_array 值的一部分
- [core] data_config 中的 const char *op
- [core] data_config 中的缓冲区字符串
- [core] 简化 config_check_cond()
- [core] 保持 a->data[] 有序 (还原)
- [core] 数组 a->sorted[] 为指针而非位置
- [core] 将头部和 env 数组内联到 con
- [mod_accesslog] 避免解析 cookie 值时分配内存
- [core] 更简单的 config_check_cond()
- [mod_redirect,mod_rewrite] 存储 context_ndx
- [core] struct plugin 中的 const char *name
- [core] srv->plugin_slots 作为紧凑列表
- [core] 重新排列 server_config, server 成员
- [core] 宏 CONST_LEN_STR 和 CONST_STR_LEN
- [core] struct plugin_data_base
- [core] 改进条件缓存性能
- [core] config_plugin_values_init() 新接口
- [mod_access] 使用 config_plugin_values_init()
- [core] 来自 strftime_cache_get() 的 (const buffer *)
- [core] 将 config_setup_connection 移动到 connections.c
- [core] 在配置文件解析中使用 (const char *)
- [mod_staticfile] 使用 config_plugin_values_init()
- [mod_skeleton] 使用 config_plugin_values_init()
- [mod_setenv] 使用 config_plugin_values_init()
- [mod_alias] 使用 config_plugin_values_init()
- [mod_indexfile] 使用 config_plugin_values_init()
- [mod_expire] 使用 config_plugin_values_init()
- [mod_flv_streaming] 使用 config_plugin_values_init()
- [mod_magnet] 使用 config_plugin_values_init()
- [mod_usertrack] 使用 config_plugin_values_init()
- [mod_userdir] 将策略从 userdir 路径构建中分离
- [mod_userdir] 使用 config_plugin_values_init()
- [mod_ssi] 使用 config_plugin_values_init()
- [mod_uploadprogress] 使用 config_plugin_values_init()
- [mod_status] 使用 config_plugin_values_init()
- [mod_cml] 使用 config_plugin_values_init()
- [mod_secdownload] 使用 config_plugin_values_init()
- [mod_geoip] 使用 config_plugin_values_init()
- [mod_evasive] 使用 config_plugin_values_init()
- [mod_trigger_b4_dl] 使用 config_plugin_values_init()
- [mod_accesslog] 使用 config_plugin_values_init()
- [mod_simple_vhost] 使用 config_plugin_values_init()
- [mod_evhost] 使用 config_plugin_values_init()
- [mod_vhostdb*] 使用 config_plugin_values_init()
- [mod_mysql_vhost] 使用 config_plugin_values_init()
- [mod_maxminddb] 使用 config_plugin_values_init()
- [mod_auth*] 使用 config_plugin_values_init()
- [mod_deflate] 使用 config_plugin_values_init()
- [mod_compress] 使用 config_plugin_values_init()
- [core] 如果 xdocroot 为 NULL,则添加 xsendfile* 检查
- [mod_cgi] 使用 config_plugin_values_init()
- [mod_dirlisting] 使用 config_plugin_values_init()
- [mod_extforward] 使用 config_plugin_values_init()
- [mod_webdav] 使用 config_plugin_values_init()
- [core] 在 pcre_keyvalue_buffer 中存储附加数据
- [mod_redirect] 使用 config_plugin_values_init()
- [mod_rewrite] 使用 config_plugin_values_init()
- [mod_rrdtool] 使用 config_plugin_values_init()
- [multiple] gw_backends config_plugin_values_init()
- [core] config_get_config_cond_info()
- [mod_openssl] 使用 config_plugin_values_init()
- [core] 使用 config_plugin_values_init()
- [core] 将更多配置逻辑收集到 configfile.c
- [core] config_plugin_values_init_block()
- [core] gw_backend config_plugin_values_init_block
- [core] 移除旧的 config_insert_values_*() 函数
- [multiple] plugin.c 处理通用 FREE_FUNC 代码
- [core] 运行所有触发器和 sighup 处理程序
- [mod_wstunnel] 将 DEBUG_LOG 更改为使用 log_error()
- [core] stat_cache_path_contains_symlink 使用 errh
- [core] 隔离 data_config, configfile.h 的使用
- [core] 将条件缓存与条件匹配分离
- [mod_auth] http_auth_require_t 中的内联数组
- [core] array_init() 的初始大小参数
- [core] gw_exts_clear_check_local()
- [core] gw_backend 减少指针追逐
- [core] connection_handle_errdoc() 独立函数
- [multiple] 优先使用 (connection *) 而非 (srv *)
- [core] 在栈上创建 HTTP 块头部
- [multiple] 连接钩子不再获取 (srv *)
- [multiple] plugin_stats 数组
- [core] 在 fionread 之前读取固定大小的块
- [core] 默认块大小 8k (原为 4k)
- [core] 在 gw_backend 中传递 con 而非 srv
- [core] log_error_multiline_buffer()
- [multiple] 减少 srv->cur_ts 的直接使用
- [multiple] 外部 log_epoch_secs
- [multiple] 减少 srv->errh 的直接使用
- [multiple] stat_cache 单例
- [mod_expire] 将配置解析为结构化数据
- [multiple] 通用配置数组类型检查
- [multiple] 将 r 重命名为 rc rv rd wr 以示区别
- [core] (次要) config_plugin_keys_t 数据打包
- [core] log_error_st errh 中的内联缓冲区
- [multiple] 将 srv->tmp_buf 存储在 tb 变量中
- [multiple] 消除 clang 编译器警告
- [core] http_status_set_error_close()
- [core] http_request_host_policy 与 http_parseopts
- [multiple] con->proto_default_port
- [core] 在 (log_error_st *) 中存储日志文件名
- [core] 分离 log_error_open* 函数
- [core] fdevent 使用 uint32_t 而非 size_t
- [mod_webdav] 大缓冲区复用
- [mod_accesslog] 在 8k 大小处刷新文件日志缓冲区
- [core] 在使用处包含 settings.h
- [core] mtime_cache 的静态缓冲区
- [core] 检查请求方法的便利宏
- [core] 支持多个错误日志
- [multiple] 省略将 srv 传递给 fdevent_handler
- [core] 移除 fdevent_fcntl_set_nb* 的未使用参数
- [core] 稍微简化 server_(over)load_check()
- [core] 隔离 fdevent 子系统
- [core] 隔离 stat_cache 子系统
- [core] 移除未使用的 base.h 包含
- [core] 每 64 秒重启一次死亡的管道日志记录器
- [mod_webdav] 如果可用,使用 copy_file_range()
- [core] 性能: 缓冲区复制和追加
- [core] 将部分 srv->srvconf 复制到 con->conf
- [core] 将 keep_alive 标志移动到 request_st
- [core] 将 scheme 端口传递给 http_request_parse()
- [core] 在 request.c 中传递 http_parseopts
- [core] 将 specific_config 重命名为 request_config
- [core] 将 request_st, request_config 移动到 request.h
- [core] 将 (request_st *) 传递给 request.c 函数
- [core] 移除未使用的 request_st 成员 'request'
- [core] 将 content_length 重命名为 reqbody_length
- [core] t/test_request.c 使用 (request_st *)
- [core] http_header_**_get() 中的 (const connection **)
- [mod_accesslog] log_access_record() 格式化日志记录
- [core] 将请求开始时间戳移动到 (request_st *)
- [core] 移动额外的请求特定结构成员
- [core] 移动额外的请求特定结构成员
- [core] 将 plugin_ctx 移动到 (request_st *)
- [core] 移动额外的请求特定结构成员
- [core] 将请求状态移动到 (request_st *)
- [core] 在 p->data 中存储 (plugin *)
- [core] 存储 subrequest_handler 而非模式
- [multiple] 复制小结构体而不是 memcpy()
- [multiple] 拆分 con, request (非常大的更改)
- [core] r->uri.path 总是设置,尽管可能为空字符串
- [core] C99 对某些基本函数的限制
- [tests] 在 test_mod_* 中禁用配置函数
- [tests] t/test_mod_userdir
- [core] 在 handle_request 函数中分派处理程序
- [core] http_request_parse_target()
- [mod_magnet] 使用 "uri.path-raw" 修改 r->target
- [core] 移除 r->uri.path_raw; 按需生成
- [core] http_response_comeback()
- [core] http_response_config()
- [tests] 使用 buffer_eq_slen() 进行字符串比较
- [core] http_status_append() 短路 200 OK
- [core] 将一些 chunk.c 函数标记为 pure
- [core] 在 http_header.[ch] 中使用 uint32_t
- [core] 性能: 优化某些热区代码
- [core] 在行尾之前解析头部标签
- [doc] 在 doc/outdated/ssl.txt 中添加维基链接
- [doc] src/t/README
- [mod_auth] "nonce_secret" 选项用于验证 nonce (修复 #2976)
- [build] 修复 MacOS X Tiger 上的构建问题
- [doc] lighttpd.conf: lighttpd 选择事件处理程序
- [config] 如果 server.tag 仅含空格,则设为空
- [mod_proxy] 使用 HTTP/1.1 分块传输流请求 (修复 #3006)
- [multiple] 更正注释中的拼写错误
- [multiple] 修复 32 位和 powerpc 上的某些 cc 警告
- [tests] 修复没有 php-cgi 的 mod-fastcgi 中的跳过计数
- [multiple] ./configure --with-nettle 以使用 Nettle
- [core] 定义 FD_CLOEXEC 时跳过多余的 close()
- [mod_cgi] 移除设置 FD_CLOEXEC 的冗余调用
- [core] 如果 stat_cache_get_entry 没有 / 则返回 EINVAL
- [mod_webdav] 如果未定义 PATH_MAX 则定义它
- [mod_accesslog] 处理格式中的反斜杠转义
- [mod_openssl] 如果 ALPN acme-tls/1 则禁用证书验证
- [core] 在 openssl RAND_pseudo_bytes() 之前添加种子
- [mod_mbedtls] mbedTLS 作为 TLS 选项
- [core] 优先使用 getxattr() 而非 get_attr()
- [multiple] 与 ctypes 一起使用 *(unsigned char *)
- [mod_openssl] 除非调试,否则不记录 ECONNRESET
- [mod_openssl] SSL_R_UNEXPECTED_EOF_WHILE_READING
- [mod_gnutls] GnuTLS 作为 TLS 选项 (修复 #109)
- [mod_openssl] 轮换会话票据加密密钥
- [mod_openssl] 在 1.0.2+ 中从回调设置证书 (修复 #2842)
- [mod_openssl] 在 1.0.2+ 中从回调设置链 (#2842)
- [core] 严格按照 RFC 解析 Content-Length
- [build] 将 ./configure --help 指向支持论坛
- [core] 更严格地解析数字
- [multiple] 为某些模块顶部添加摘要
- [core] sys-crypto-md.h 带有内联消息摘要函数
- [mod_openssl] 如果设置,在 SNI 后启用预读
- [mod_openssl] 对已弃用选项发出警告
- [mod_openssl] 如果可用,使用 SSL_OP_NO_RENEGOTIATION
- [mod_openssl] 为 ALPN 使用 openssl 功能定义
- [mod_openssl] 更新默认 DH 参数
- [core] _WIN32 上的 SecureZeroMemory()
- [core] 安全的 memset 调用通过 volatile 进行 memset()
- [doc] 更新 doc/config/modules.conf 中的注释
- [core] 更精确地检查请求流标志
- [mod_openssl] 轮换会话票据加密密钥
- [mod_openssl] ssl.stek-file 指定加密密钥
- [mod_mbedtls] ssl.stek-file 指定加密密钥
- [mod_gnutls] ssl.stek-file 指定加密密钥
- [mod_openssl] 禁用会话缓存; 优先使用票据
- [mod_openssl] 与 LibreSSL 兼容
- [mod_openssl] 与 WolfSSL 兼容
- [mod_openssl] 设置 SSL_OP_PRIORITIZE_CHACHA
- [mod_openssl] 将 SSL_CTX 曲线配置移动到新函数
- [mod_openssl] 替代 TLS 库的基本 SSL_CONF_cmd
- [mod_openssl] OCSP 装订 (修复 #2469)
- [TLS] cert-staple.sh - 刷新 OCSP 响应 (#2469)
- [mod_openssl] 与 BoringSSL 兼容
- [mod_gnutls] 覆盖 GnuTLS 优先级的选项
- [mod_gnutls] OCSP 装订 (#2469)
- [mod_extforward] 模块顺序的配置警告
- [mod_webdav] 将 webdav.opts 存储为位标志
- [mod_webdav] 限制 webdav_propfind_dir() 递归
- [mod_webdav] unsafe-propfind-follow-symlink 选项
- [mod_webdav] webdav.opts "propfind-depth-infinity"
- [mod_openssl] 检测标记为 OCSP Must-Staple 的证书
- [mod_gnutls] 检测标记为 OCSP Must-Staple 的证书
- [mod_openssl] 默认设置为 MinProtocol TLSv1.2
- [mod_nss] NSS 作为 TLS 选项 (修复 #1218)
- [core] fdevent_load_file() 共享代码
- [mod_openssl,mbedtls,gnutls,nss] fdevent_load_file
- [core] 如果 s->socket_perms chmod() 失败则报错
- [mod_openssl] 优先使用一些 WolfSSL 本地 API
- 消除 clang 分析器 scan-build 警告
- [core] uint32_t 对于路径名足够大
- [mod_mysql_vhost] 已弃用; 请使用 mod_vhostdb_mysql
- [core] splaytree.h 中的 splaytree_djbhash() (重用)
- [cmake] 更新 src/t/test_* 的依赖
- [cmake] 更新 src/t/test_* 的依赖
- [build] 从构建中移除 tests/mod-userdir.t
- [build] 修复 src/Makefile.am EXTRA_DIST 中的拼写错误
- [core] 移除未使用的 mbedtls_enabled 标志
- [core] 在设置期间将 fd 存储在 srv->stdin_fd 中
- [multiple] 解决 Coverity 警告
- [mod_webdav] 修复理论上的 NULL 解引用
- [mod_webdav] 更新 PROPFIND allprop 的 rc
- [mod_webdav] 构建修复: ifdef live_properties
- [multiple] 解决 Coverity 警告
- [meson] 修复 libmariadb 依赖
- [meson] 添加缺失的 libmaxminddb 部分
- [mod_auth,mod_vhostdb] 添加缓存选项 (修复 #2805)
- [mod_authn_ldap,mod_vhostdb_ldap] 添加超时选项 (#2805)
- [mod_auth] 接受 "nonce-secret" 和 "nonce_secret"
- [mod_openssl] 修复 MacOS X 上的构建警告
- [core] 如果缓冲区长度大于摘要大小,Nettle 会断言()
- [mod_authn_dbi] 使用 DBI 的认证后端
- [mod_authn_mysql,file] 使用 crypt() 节省栈空间
- [mod_vhostdb_dbi] 允许配置中使用字符串和整数
- 添加 ci-build.sh
- 将 ci-build.sh 移动到 scripts
- [build] AIX 的构建修复
- [mod_deflate] Brotli 支持
- [build] 构建中 bzip2 默认不启用
- [mod_deflate] 修复配置选项中的拼写错误
- [mod_deflate] 从内部函数传播错误
- [mod_deflate] deflate.cache-dir 压缩缓存
- [mod_deflate] mod_deflate 取代 mod_compress
- [doc] mod_compress -> mod_deflate
- [tests] mod_compress -> mod_deflate
- [mod_compress] 移除 mod_compress
- [build] 将 --with-brotli 添加到 CI 构建
- [core] server.feature-flags 可扩展配置
- [core] 连接层 plugin_ctx 与请求分离
- [multiple] 连接钩子在 con->plugin_ctx 中存储 ctx
- [core] 分离函数以重置 (request_st *)
- [multiple] 将 connection_reset 钩子重命名为 request
- [mod_nss] 函数重命名以保持一致性
- [core] 检测并拒绝 TLS 连接到明文
- [mod_deflate] 更快地检查 Content-Encoding
- [mod_openssl] 使用 BIO_new_mem_buf 读取秘密数据
- [core] 从 gw 解码 Transfer-Encoding: chunked
- [mod_fastcgi] 解码 Transfer-Encoding: chunked
- [core] 更严格地解析 POST 分块块头部
- [mod_proxy] 向后端发送 HTTP/1.1 请求
- [tests] test_base64.c 清除缓冲区与重置
- [core] http_header_remove_token()
- [mod_webdav] 修复无意中的字符串截断
- [core] 添加一些缺失的标准包含
- [mod_extforward] 尝试消除 Coverity 警告
- [mod_authn_dbi,mod_authn_mysql] 修复 Coverity 问题
- [build] 修复 SCons 构建以检测 brotli
- [build] 在 *BSD 上,使用 brotli 的 SCons 构建需要 -lm
- [build] SCons 构建 mod_deflate 时 brotli 需要 libm
- [build] SCons brotli 需要 pkg-config --static
- [build] 避免 accept_filter_arg 编译器警告
- [build] SCons 修复空格/制表符不一致问题
- scons: 修复检查环境
- 在 doc/avahi/ 下添加 avahi 服务文件
- [mod_webdav] 修复 linkat() 失败时的回退
- [mod_proxy] 不转发 Expect: 100-continue
- [core] chunkqueue_compact_mem() 必须更新 cq->last
- [core] 为 FAMNoExists() 使用 dlsym 以兼容 fam
- [core] 将 settings.h 分散到适当的头文件
- [core] 内联 buffer_reset()
- [mod_extforward] 每个连接保存协议
- [mod_extforward] 在 HANDLER_COMEBACK 后跳过
- [core] server.feature-flags 以启用 h2
- [core] HTTP_VERSION_2
- [multiple] 如果 "server.h2proto",则允许 TLS ALPN "h2"
- [mod_extforward] 为 h2 连接保留更改的地址
- [core] 如果 h2,则不发送 Connection: close
- [core] h2 的响应头字段名小写
- [core] 识别状态: 421 Misdirected Request
- [core] 解析 h2 伪头部
- [core] request_headers_process()
- [core] connection_state_machine_loop()
- [core] 每个连接重置连接计数器
- [mod_accesslog,mod_rrdtool] HTTP/2 基本记账
- [core] connection_set_fdevent_interest()
- [core] HTTP2-Settings
- [core] 调整 http_request_headers_process()
- [core] http_header_parse_hoff()
- [core] 移动 http_request_headers_process()
- [core] reqpool.[ch] 用于 (request_st *)
- [multiple] 模块通过函数指针读取请求体
- [multiple] 在 connections.c 中隔离更多连接代码
- [multiple] 在 response.c 中隔离更多响应代码
- [core] h2.[ch] 带存根函数 (未完成)
- [core] 在两个作业列表之间交替
- [core] 连接过渡到 HTTP/2; 未完成
- [core] 用冷区属性标记一些错误路径
- [core] 丢弃来自后端的 100 102 103 响应
- [core] 对 100 Continue 跳过写入节流
- [core] 调整 (已禁用) 调试代码
- [core] 更新注释
- [core] 链接 ls-hpack (实验性)
- [core] 使用 LiteSpeed ls-hpack 的 HTTP/2 HPACK
- [core] h2_send_headers() 专门用于响应头
- [core] http_request_parse_header() 专门化
- [core] 注释可能的未来 ls-hpack 优化
- [mod_status] 分离函数以打印请求表
- [mod_status] 调整以打印 HTTP/2 请求
- [core] 使用相对路径重定向到目录
- [core] 忽略来自后端的空字段名
- [build] 修复 Meson 构建
- [mod_auth] 修复 auth.require 配置错误导致的崩溃 (修复 #3023)
- [core] 修复默认 server.tag 的 1 字符截断
- [core] request_acquire(), request_release()
- [core] 为 HTTP/2 维护 (request_st *) 池
- [mod_status] r->state 标签的专用函数
- [core] 将 connections_get_state 移动到 connections.c
- [core] 修复平滑重启后主进程崩溃问题
- [core] 推迟优化以读取小文件
- [core] k,v 头部解析不需要 '\0' 终止符
- [scripts] cert-staple.sh 增强功能
- [core] 记录 lighttpd etag 中使用的算法
- [core] ls-hpack 优化
- [core] 如果请求行为空,修复主进程崩溃问题
- [build] 修复 wolfSSL 选项描述中的拼写错误
- [core] 在 gw_backend 中使用 djbhash 选择主机
- [core] 将 md5.[ch] 重命名为 algo_md5.[ch]
- [core] 将 djbhash(), dekhash() 移动到 algo_md.h
- [core] 将 splaytree.[ch] 重命名为 algo_splaytree.[ch]
- [core] 导入 xxHash v0.8.0
- [build] 修改 xxHash v0.8.0 的构建和包含
- [build] 移除 ls-hpack/deps
- [core] xxhash 无内联提示; 让编译器选择
- [mod_dirlisting] 修复配置解析崩溃
- [mod_openssl] 澄清带弃用选项的跟踪
- [doc] 刷新 doc/config/*/*
- [core] 代码大小: 禁用 XXH64, XXH3
- [doc] 更新 README 和 INSTALL
- [build] 在 autogen.sh 提示中添加所需包列表
- [core] 使用 ';' 组合 Cookie 请求头
- [core] 使用 debug.log-state-handling 记录流 ID
- [core] 在 h2.c 中设置 r->state
- [mod_ssi] shell 输出重定向后更新块
- [mod_webdav] 合并块时保留 bytes_out
- [multiple] 内联 chunkqueue_length()
- [core] 冷区代码 h2_log_response_header*() 函数
- [core] 从 IANA 更新 HTTP 状态码列表
- [mod_wolfssl] 独立模块
- [core] http_response_send_file() 中的 Content-Length
- [core] 调整响应头准备以适应常见情况
- [core] light_isupper(), light_islower()
- [core] r->{rqst,resp}_htags 的 tst,set,clr 宏
- [core] 将 http_header_e 与 _htags 位掩码分离
- [core] HTTP/2 的 http_header_hkey_get_lc()
- [core] array.[ch] 使用 uint32_t 而非 size_t
- [core] 扩展 (data_string *) 以存储头部 ID
- [multiple] 扩展枚举 http_header_e 列表
- [core] http_header_e <=> lshpack_static_hdr_idx
- [core] 跳过 lighttpd 未使用的 ls-hpack 解码工作
- [TLS] 如果从全局继承空 TLS 配置则报错
- [core] connection_check_expect_100()
- [core] 支持来自后端的多个 1xx 响应
- [core] 在 chunkqueue_compact_mem() 后重新加载 c
- [core] 通过 HTTP/2 从后端中继 1xx
- [core] 通过 HTTP/1.1 从后端中继 1xx
- [core] chunkqueue_{peek,read}_data(), 压缩
- [multiple] TLS 模块使用 chunkqueue_peek_data()
- [mod_magnet] magnet.attract-response-start-to
- [multiple] 代码重用 chunkqueue_peek_data()
- [core] 将 r->start_hp.tv_sec 重用于 r->start_ts
- [core] config_plugin_value_tobool() 接受 "0","1"
- [core] 平滑和立即重启选项
- [mod_ssi] 在 waitpid() 之前初始化状态变量
- [core] 平滑关闭超时选项
- [core] lighttpd -1 支持管道 (例如 netcat)
- [core] 性能调整以避免加载遗漏
- [multiple] 在更多地方使用 sock_addr_get_family
- [multiple] 始终分配的 chunkqueue 内联
- [core] 写入后传播状态
- [core] server_run_con_queue()
- [core] 推迟处理 FDEVENT_HUP 和 FDEVENT_ERR
- [core] 处理读取 FILE_CHUNK 时意外的 EOF
- [core] 短路 connection_write_throttle()
- [core] 在 connection_write_chunkqueue() 中遍历队列
- [core] connection_joblist 全局
[core] 更精确地检查流标志 - [core] fdevent_load_file_bytes()
- [TLS] STEK 文件使用 fdevent_load_file_bytes()
- [core] 允许 /dev 下的符号链接用于随机设备
- [multiple] 使用 light_btst() 进行 hdr 存在检查
- [mod_deflate] 修复错误情况下的潜在 NULL 解引用
- [core] 如果 fstat() 失败,在 close() 附近保存 errno
- [mod_ssi] 使用 stat_cache_open_rdonly_fstat()
- [core] fdevent_dup_cloexec()
- [core] 分割 FILE_CHUNK 时复制 FILE_CHUNK fd
- [core] stat_cache_path_isdir()
- [multiple] 使用 stat_cache_path_isdir()
- [mod_mbedtls] 连接重置后消除 CLOSE_NOTIFY
- [mod_gnutls] 连接重置后消除 CLOSE_NOTIFY
- [core] 限制 Range 请求中的范围数量
- [core] 移除未使用的 r->content_length
- [core] http_response_parse_range() 常量文件大小
- [core] 将打开的 fd 传递给 http_response_parse_range
- [core] stat_cache_get_entry_open()
- [core,mod_deflate] 利用打开 fd 的缓存
- [doc] 注释掉禁用 .pdf Range 的配置
- [core] 在 Range 请求中合并附近的范围
- [tests] 更快地模拟慢速、小数据包
- [mod_fastcgi] 解码分块是冷区代码路径
- [core] 修复 chunkqueue_compact_mem 与部分块的问题
- [core] 读取文件、发送分块时的分配优化
- [core] 重用 chunkqueue_compact_mem*()
- [mod_cgi] 使用 splice() 将输入发送到 CGI
- [multiple] 忽略 openssl 3.0.0 弃用警告
- [mod_openssl] 将 ticket cb 迁移到 openssl 3.0.0
- [mod_openssl] 在栈上构造 OSSL_PARAM
- [mod_openssl] 合并 ssl_tlsext_ticket_key_cb 实现
- [multiple] openssl 3.0.0 摘要接口迁移
- [tests] 检测多个 SSL/TLS/加密提供者
- [core] sys-crypto-md.h 一致接口
- [wolfssl] wolfSSL_CTX_set_mode 与其他不同
- [multiple] 如果没有其他加密可用,则使用 NSS 加密
- [multiple] stat_cache_path_stat() 用于 struct st
- [TLS] 忽略 ssl-conf-cmd 中的空 "CipherString"
- [multiple] 移除块 file.start 成员
- [core] 修改 getrlimit() 的使用方式,使其非致命
- [mod_webdav] 添加对 cq 记账的缺失更新
- [mod_webdav] worker_init 后更新默认值
- [mod_openssl] 使用较新的 openssl 3.0.0 函数
- [core] config_plugin_value_to_int32()
- [core] 平滑重启期间最小化暂停
- [mod_deflate] 使用大型 mmap 块进行压缩
- [core] stat_cache_entry 引用计数
- [core] FILE_CHUNK 可以持有 stat_cache_entry 引用
- [core] http_chunk_append_file_ref_range()
- [multiple] 使用 http_chunk_append_file_ref()
- [core] 始终使用共享 fd 进行 lseek()
- [core] 消除 Coverity 警告 (误报)
- [core] 消除 ls-hpack 中的 Coverity 警告
- [core] 消除 Coverity 警告 (再次尝试)
- [core] 修复分割文件块时的 fd 共享问题
- [mod_mbedtls] 消除未使用的变量警告
- [core] 在 sys-crypto-md.h 中使用内联函数
- [core] 添加 NSS rand 的缺失声明
- [core] 为基本加密算法初始化 NSS 库
- [doc] 将 mod_compress 引用更改为 mod_deflate
- [doc] 将 bzip2 引用替换为 brotli
- [build] 从 versionstamp 规则中移除 svnversion
- [doc] /var/run -> /run
- [multiple] 测试 nss 包含
- [mod_nss] 更多 nss 包含修复
- [build] 更可移植的 autogen.sh shell 脚本
- [mod_webdav] 在 NetBSD 上定义 _NETBSD_SOURCE
- [core] 消除 Coverity 警告 (再次尝试)
- [mod_mbedtls] 较新的 mbedTLS 版本支持 TLSv1.3
- [mod_accesslog] 循环日志后更新默认值
- [multiple] 添加一些缺失的配置清理
- [core] 修复 configparser.y 中的 (启动时) 内存泄漏
- [core] 在 OpenBSD 上将 STAILQ_* -> SIMPLEQ_*
- [tests] OpenBSD crypt() 支持仅限于 bcrypt
- [build] 标记加密库对 MD5 的依赖
- [build] 将 pkg-config 与 wolfssl 一起使用
- [mod_wolfssl] 使用更多 wolfssl/options.h 定义
- [mod_wolfssl] 如果未构建 OPENSSL_ALL 则禁用 SNI
- [mod_wolfssl] ALPN 需要构建 --enable-alpn
- [mod_secdownload] 修复 FreeBSD 上 NSS 的编译问题
- [build] 修复 GnuTLS, NSS 的库路径
- [build] 将 --with-brotli 添加到 meson.build
- [build] CMake mod_openssl, mod_wolfssl 可以共存
- [build] CMake 使用 pkg_check_modules() 与 wolfssl
- [build] 为 NSS 检测 nss3/nss.h 或 nss/nss.h
- [build] 代码中的 WITHOUT_LIB_CRYPTO 选项
- [build] 调整 meson.build 以供 OpenWRT 使用
- [mod_mbedtls] 在预处理定义中封装附加代码
- [TLS] server.feature-flags "ssl.session-cache"
- [core] 解决 wolfssl types.h 中脆弱代码的变通方法
- [core] 将错位的错误跟踪移动到匹配选项
- [core] 调整 wolfssl 变通方法以适应另一种情况
- [multiple] 加密库选择的一致顺序
- [multiple] 选择后包含 mbedtls/config.h
- [multiple] 选择后包含 wolfssl/options.h
- [core] 加密库选择后设置 NSS_VER_INCLUDE
- [core] 如果可用,使用系统 xxhash 库
- [build] 修复 configure.ac 中的拼写错误
- [build] 使用系统提供的 libxxhash 的选项
- [build] meson --with-xxhash 选项
- [doc] 刷新 doc/config/conf.d/mime.conf
- [meson] 为 lua 库版本添加匹配的 -I
- [build] 优先搜索 lua 5.4 版本
- [core] 在 Linux 上 stat_cache.[ch] 中使用 inotify
- [build] 检测 inotify 头文件 <sys/inotify.h>
- [mod_nss] 更新会话票据 NSS 开发注释
- [core] 在从后端读写时设置 last_used (修复 #3029)
- [core] gw_recv_response 错误情况的冷区函数
- [core] 在 *BSD 上使用 kqueue() 而非 FAM/gamin
- [core] OpenBSD, NetBSD 不支持 graceful-restart-bg
- [mod_openssl] 添加 LIBRESSL_VERSION_NUMBER 检查
- [core] 在 stat_cache 中使用栈上的 struct kevent
- [core] stat_cache 预处理器偏执
- [mod_openssl] 调整 LIBRESSL_VERSION_NUMBER 检查
- [mod_maxminddb] 修复配置验证拼写错误
- [tests] 允许 LIGHTTPD_EXE_PATH 覆盖
- [multiple] 在 *_env_add 中将 NULL 值视为空 (修复 #3030)
- [core] 接受来自后端的 "HTTP/2.0", "HTTP/3.0" (修复 #3031)
- [build] 以更多方式检查 xxhash
- [core] 接受来自后端的 "HTTP/2.0", "HTTP/3.0" (#3031)
- [core] http_response_buffer_append_authority()
- [core] 如果缺失则定义 SHA*_DIGEST_LENGTH 宏
- [doc] 更新 INSTALL 中可选的包依赖项
- [mod_alias] 验证给定顺序,而不是排序顺序
- [core] 过滤重复模块
- [mod_cgi] 修复 CGI 初始写入失败时的崩溃问题
- [mod_cgi] 确保在 splice() 之前打开临时文件
- [multiple] 添加背压网关数据泵 (修复 #3033)
- [core] 修复 HTTP/2 帧跨块时的 bug
- [multiple] 更宽容的配置字符串到布尔值转换 (修复 #3036)
- [core] 检查 __builtin_expect() 可用性
- [core] 除非调试,否则消除更多请求解析错误
- [core] 合并块大小检查
- [mod_flv_streaming] 使用 stat_cache_get_entry_open
- [mod_webdav] 将完整路径传递给 webdav_unlinkat()
- [mod_webdav] 如果 _ATFILE_SOURCE 不可用则回退
- [mod_fastcgi] 将 src/fastcgi.h 移动到 src/compat/
- [mod_status] 添加额外的 HTML 编码
- [core] server.v4mapped 选项
- [mod_webdav] gvfs 目录重定向 bug 的变通方法