njs 0.8.5 已发布,具体更新内容包括:
nginx modules:
- 更改:带有
upload
或download
事件类型的r.variables.var
、r.requestText
、r.responseText
、s.variables.var
和s.on()
回调的data
参数现在会将 UTF-8 编码无效的字节转换为替换字符。处理二进制数据时,建议改用r.rawVariables.var
、r.requestBuffer
、r.responseBuffer
、s.rawVariables.var
以及s.on()
的upstream
或downstream
事件类型。 - 功能:为 shared dictionary的
add()
、set()
和incr()
方法添加 了timeout
参数。 - 错误修复:检查重复的
js_set
变量。 - 错误修复:修复了端口为非标准端口时的 request
Host
header。 - 错误修复:修复了
ngx.fetch()
和r.subrequest()
中 zero-length request body 的处理 。 - 错误修复:修复了
Headers.get()
中的堆缓冲区溢出。 - 错误修复:修复
r.subrequest()
的错误处理。
Core:
- 功能:为
QuickJS
引擎增加了zlib
模块。 - 错误修复:已修复
zlib.inflate()
。 - 错误修复:修复了长度为零的参数
String.prototype.replaceAll()
。 - 错误修复:修复了
Array.prototype.toSpliced()
、Array.prototype.toReversed()
、Array.prototype.toSorted()
出现异常后的retval
处理。 - 错误修复:解决了
RegExp.prototype[@@replace]()
中包含$'
、$`
和 Unicode 字符的替换问题。 - 错误修复:修复了
decodeURI()
和decodeURIComponent()
中的一个 one-byte overread 问题 。 - 错误修复:修复了参数范围的跟踪。
- 错误修复:修复了
Date.parse()
中的整数溢出。
njs 以 nginx 插件的方式存在,它是 JavaScript/ECMAscript 的子集,实现了大部分的 JavaScript 语言功能,没有完全遵从 ECMAScript 标准,同时抛弃了 JavaScript 比较难懂的部分。njs 不通过 V8 引擎实现,而是通过一个更小、能耗更低、更符合 nginx 应用场景的小虚拟机实现,可以理解成 nginx 为其实现了一套自己的词法解析。
作为 nginx 的插件,njs 的安装方式是重新编译 nginx。
详情可查看:https://nginx.org/en/docs/njs/changes.html#njs0.8.5