qhs增强对websocket帧的检测，避免特殊的websocket帧形成拒绝服务(DOS)攻击。这些特殊的web
socket帧一般由非浏览器类型的客户端生成，例如：payload的长度等于0而FIN位等于0的text帧或
binary帧，payload的长度等于0的continuation帧等等。

                                                                     2024/4/18

qhs发送http答复、ws答复的操作更可靠。需要说明的是，跨线程对正在睡眠的http连接发送的ws数据
有可能丢失。如果浏览器等客户端不对qhs发送http请求及ws请求，http连接就进入睡眠状态。在睡眠
状态，qhs对http连接调用java.nio.channels.Selector类型对象监听来自浏览器等客户端的请求。
java.nio.channels.Selector类型对象要求http连接属于非阻塞(nonblock)连接，对非阻塞连接
写入的数据在传输到客户端的过程中有可能丢失。

                                                                     2024/2/27

允许请求URI(Request-URI)的path部件及query部件包含0x80至0x10ffff之间的unicode代码点
(code point)。0x80至0x10ffff之间的代码点可以对应世界上的很多文字。允许path部件包含上述
代码点意味着qhs检索的静态资源文件路径可以包含上述代码点以及HTTP服务模块ID可以包含上述代码点。
允许query部件包含上述代码点意味着浏览器生成的属于application/x-www-form-urlencoded媒
体类型的表单数据可以包含上述代码点。在浏览嚣发送包含上述代码点的数据给qhs以前，浏览嚣使用
utf-8编码方法把代码点编码成为字节数组(即utf-8数组)，qhs接收到utf-8数组以后，qhs对utf-8
数组进行分析。如果utf-8数组的格式出错或者解码出的代码点大于0x10ffff，qhs就认为出现错误。

                                                                     2023/12/26

1、重新实现qhs.interfaces.Connection.close()方法，调用close()方法并不立即关闭http连接，
   而是提示qhs适时关闭http连接，这样有效的保护了qhs的运行时刻数据。
2、在qhs.interfaces.URLRewriter接口，增加了getAppendedResponseHeaders()方法，
   getAppendedResponseHeaders()的实现方法返回的多个用户定制的答复头域，用于增加到
   发送静态资源文件的http答复。
3、完善WebSocket功能，qhs可以接收大于1MBytes的WebSocket帧。
4、全面支持流(Stream)的并发传输。在qhs的多线程模型，使用一个http连接在同一时刻，qhs可以
   同时接收多个http请求、发送多个http答复、接收多个ws请求、发送多个ws答复。

                                                                     2023/12/1

qhs不再要求浏览嚣支持服务器推送(ServerPush)，最新版本的chrome111可以无障碍地与qhs通信。

                                                                     2023/3/20
