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