headerSent
1 2 3 |
|
这里的this._header是header内容发出后才有的, 内容为header的所有内容, 所以headerSent 只有在res.end()后才有值
options
compress中间件用了nodejs 内部模块 zlib
这里的options 参考 options
1 2 3 |
|
监听到 header
开始
- 如果没有compress 直接return;
var encoding = res.getHeader('Content-Encoding') || 'identity'
- 如果
encoding
不等于identity
说明已经编码了 直接 return - 如果需要压缩的文件 符合过滤条件 也即在给的文件列表中 就继续下一步, 否则 return
- 如果请求头文件 没有 accept-encoding 值 , return (why)
- 如果请求方法 为
HEAD
,return
- 默认压缩方法为
gzip
- 确定压缩方法 即给
method
赋值 - 此时
method
还是空的话 return - 压缩流文件
stream = exports.methods[method](options)
即zlib.createGzip
或zlib.createDeflate
得到 流stream
- 开始赋值
Content-Encoding
, 并去除Content-Length
明显压缩后 文件大小会变 此时stream
监听 到 发出去的数据 就 开始 res.writestream.write(new Buffer(chunk, encoding))
这里的 stream 监听 是node version 0.10
后的stream api
具体 参考 stream - 直到 流文件
"流出"
3种应用形式
- 简单输入 username , password
1
|
|
- 回调
1 2 3 4 |
|
- 异步回调
1 2 3 4 |
|
Authrization
页面需要授权的时候,浏览器会弹出一个登入窗口, 输入正确的帐号, 浏览器会发送一个HTTP请求, 但此时会包含这样的一个 Header:
1
|
|
这里的 bXl1c2VyOm15cGFzcw==
是 base64 encoded
。例如, base64_decode('bXl1c2VyOm15cGFzcw==')
–> myuser:mypass
理解头文件的 Authrization, 下面来看代码
1 2 3 4 |
|
下面解析出头文件的即 req.headers.authorization
解码出用户输入的用户名和密码得到 user
和 pass
最后调用callback
做验证 分一下两种情况
- 异步callback
1 2 3 4 5 6 7 8 9 |
|
- 同步callback
1 2 3 4 5 6 |
|
应用
1 2 |
|
参数
root
:
options
:
- 'maxAge' 浏览器缓存时间 默认为0
- 'hidden' 允许隐藏文件的转换 默认false
- 'redirect' 如果路径是一个文件夹, 指向 ‘/’ 默认 true
- 'index' 默认的文件名‘index.html’
代码主体就是
1 2 3 4 5 6 7 8 |
|
对于 send
模块分析见 send