无法将超过 4096 个字节写入自定义 IIS 日志字段
Cant write more than 4096 bytes into custom IIS log field
根据this documentation,您可以在Windows Server 2016 上配置IIS 10 来写入自定义字段,只要“自定义字段中添加的数据总量不能超过65,536字节"
我已经配置了一个自定义字段来将 Header 中的 cookie 和服务器变量中的另一个 cookie 写入日志,这工作得很好。
但无论我在 maxCustomFieldLength 中输入什么值,都只会将 4096 字节写入日志。
当我在 cookie 中发送 8k 数据时,我:
- 将 maxCustomFieldLength 设置为 4096 我在日志文件中只得到 2048 字节。
- 将 maxCustomFieldLength 增加到 65536,我在日志文件中只得到 4096 字节。
我已经使用 fiddler 验证了浏览器请求正在发送完整的 8k cookie 值,并且它们没有在客户端将该值截断为 4096。
知道为什么 IIS 将 cookie 值截断为 4096 并且不遵守大于 4096 的 maxCustomFieldLength 吗?
现在对此进行了广泛的研究,我发现将所有小于 4k 的 cookie 记录到标准 IIS 日志文件的唯一方法是编写一个自定义 HttpModule:
- 挂钩到 Begin_Request
- 从请求中读取原始 cookie 字符串 Headers
- 将其拆分为 < 4k 的块(将整个 cookie 保留为完整的项目、名称和值)
- 将块写入自定义请求headers
- 使用一堆新的自定义字段配置 IIS 以将新请求 headers 放入 iis 日志中
根据this documentation,您可以在Windows Server 2016 上配置IIS 10 来写入自定义字段,只要“自定义字段中添加的数据总量不能超过65,536字节"
我已经配置了一个自定义字段来将 Header 中的 cookie 和服务器变量中的另一个 cookie 写入日志,这工作得很好。
但无论我在 maxCustomFieldLength 中输入什么值,都只会将 4096 字节写入日志。
当我在 cookie 中发送 8k 数据时,我:
- 将 maxCustomFieldLength 设置为 4096 我在日志文件中只得到 2048 字节。
- 将 maxCustomFieldLength 增加到 65536,我在日志文件中只得到 4096 字节。
我已经使用 fiddler 验证了浏览器请求正在发送完整的 8k cookie 值,并且它们没有在客户端将该值截断为 4096。
知道为什么 IIS 将 cookie 值截断为 4096 并且不遵守大于 4096 的 maxCustomFieldLength 吗?
现在对此进行了广泛的研究,我发现将所有小于 4k 的 cookie 记录到标准 IIS 日志文件的唯一方法是编写一个自定义 HttpModule:
- 挂钩到 Begin_Request
- 从请求中读取原始 cookie 字符串 Headers
- 将其拆分为 < 4k 的块(将整个 cookie 保留为完整的项目、名称和值)
- 将块写入自定义请求headers
- 使用一堆新的自定义字段配置 IIS 以将新请求 headers 放入 iis 日志中