美文网首页NodeJS笔记
web开发中的压缩、range范围请求

web开发中的压缩、range范围请求

作者: JTR354 | 来源:发表于2018-01-06 11:31 被阅读0次

压缩

//定义要压缩的文件类型
compress: /\.(js|css|html|md)/
//压缩函数引用zlib
const {createGzip,createDeflate} = require('zlib')
module.exports = (rs ,req ,res)=>{
   const acceptEncoding = req.headers['accept-encoding']
   if(!acceptEncoding || !acceptEncoding.match(/\bgzip|deflate\b/)){
       return rs
   }else if(acceptEncoding.match(/\bgzip\b/)){
       res.setHeader('Content-Encoding','gzip')
       return rs.pipe(createGzip())
   }else if(acceptEncoding.match(/\bdeflate\b/)){
       res.setHeader('Content-Encoding','deflate')
       return rs.pipe(createDeflate())
   }
}
//将压缩的文件流导入res
const press = require('../handle/compress')
let rs = fs.createReadStream(filePath)
if (filePath.match(compress)) {
   rs = press(rs, req, res)
}
rs.pipe(res)

range范围请求

  • range:bytes=[start]-[end]
  • Accept-Ranges:bytes
  • Content-Range:bytes start-end/total
//定义range函数
module.exports = (totalSize, req, res) => {
    const range = req.headers['range']
    if (!range) {
        return {code: 200}
    }

    const sizes = range.match(/bytes=(\d*)-(\d*)/)

    const end = sizes[2] || totalSize - 1
    const start = sizes[1] || totalSize - end

    if (start - end < 0 || start < 0 || end > totalSize) {
        return {code: 200}
    }
    res.setHeader('Accept-Ranges', 'bytes')
    res.setHeader('Content-Range', `bytes ${start}-${end}/${totalSize}`)
    res.setHeader('Content-Length', end - start)

    return {
        code: 206,
        start: parseInt(start),
        end: parseInt(end)
    }

}
//设置206并导出至res
const range = require('../handle/range')
const {code,start,end} = range(stats.size,req,res)
switch (code){
    case 200:{
        rs = fs.createReadStream(filePath)
        break
    }
    case 416:{
        rs = fs.createReadStream(filePath)
        break
    }
    case 206:{
        rs = fs.createReadStream(filePath,{start,end})
        break
    }
    default:{
        rs = fs.createReadStream(filePath)
    }
}
rs.pipe(res)

相关文章

  • web开发中的压缩、range范围请求

    压缩 Web服务器处理HTTP压缩之gzip、deflate压缩 【Web优化】Yslow优化法则(四)启用Gzi...

  • CKEDITOR.dom.walker

    多功能的类“行走”在DOM的范围边界中(range boundaries)。如果范围(range)起始或终止在文本...

  • web MVC简介

    1、web开发中的请求响应模式 如图,在web的世界里,大多都是Web客户端发起请求,Web服务器接收、处理并产生...

  • 19.断点续传的秘密

    http请求的header中的range字段标识本次要求服务器返回的数据范围,另外在响应头中,content-ra...

  • 范围Range

  • 如何获取响应头信息

    最近七牛云服务器频繁报 HTTP 416 请求范围无法满足错误,出现改错误的原因是request请求Range设置...

  • 2019-01-14

    12.4 范围 为了让开发人员更方便的控制页面,“DOM2级遍历和范围”模块定义了“范围”(range)接口。通过...

  • 2016-10-11 内置对象

    [TOC] 内置对象及其应用场合 JSP内置对象是应用JSP进行Web开发时,通过它们可以对Web开发中的请求、响...

  • SpringMVC源码分析1:SpringMVC概述

    转自:跟开涛学SpringMVC Web MVC简介 Web开发中的请求-响应模型: 在Web世界里,具体步骤如下...

  • 01web开发的四大作用域

    web开发的四个域对象(范围由小到大)page:jsp有效request:一次请求session:一次会话appl...

网友评论

    本文标题:web开发中的压缩、range范围请求

    本文链接:https://www.haomeiwen.com/subject/hffynxtx.html