当前位置:   article > 正文

服务器响应头cache设置,javascript,node.js_node静态文本服务器设置响应头响应时添加Expires头和Cache-Control: max-age头失败,javascript,...

res.setheader 多个cache-control

node静态文本服务器设置响应头响应时添加Expires头和Cache-Control: max-age头失败

我自己尝试写了一个node的静态文本服务器,可是设置响应头响应时添加Expires头和Cache-Control: max-age头老是失败。

这个是server.js

const http = require('http');

const parse = require('url').parse;

const _path = require('path');

const fs = require('fs');

let port = 4000;

const mime = require('./server/mime.js').types;

const config = require('./server/config.js');

let root = __dirname;

let server = http.createServer((req, res)=> {

// 实现路由, 得到URL的pathname,以确定被请求文件的路径

let url = parse(req.url).pathname;

let path = _path.join(root, url);

let ext = _path.extname(path);

ext = ext ? ext.slice(1) : 'unknown';

//响应之前判断后缀名是否符合要添加过期时间头的条件。

if (ext.match(config.Expires.fileMatch)) {

let expires = new Date();

expires.setTime(expires.getTime() + config.Expires.maxAge * 1000);

res.setHeader("Expires", expires.toUTCString());

res.setHeader("Cache-Control", "max-age=" + config.Expires.maxAge);

}

let contentType = mime[ext] || 'text/plain';

fs.stat(path, (err, stats)=> {

//注册error事件处理器,可以捕获任何可以预见或无法预见的错误

if (err) {

if ('ENOENT' == err.code) {

res.statusCode = 404;

res.end('Not Found');

} else {

res.statusCode = 500;

res.end('Internet Server Error');

}

} else {

res.writeHead(200, {'Content-Type': contentType});

//用STREAM.PIPE()优化数据传输

let stream = fs.createReadStream(path);

stream.pipe(res);

stream.on('error', (err)=> {

res.statusCode = 500;

res.end('Internet Server Error')

})

}

})

});

server.listen(port, ()=> {

console.log('server has connected :' + port);

});

这个是config.js

exports.Expires={

fileMatch: /^(gif|png|jpg|js|css)$/ig,

maxAge: 60 * 60 * 24 * 365

};

这个是mime.js

exports.types = {

"css": "text/css",

"gif": "image/gif",

"html": "text/html",

"ico": "image/x-icon",

"jpeg": "image/jpeg",

"jpg": "image/jpeg",

"js": "text/javascript",

"json": "application/json",

"pdf": "application/pdf",

"png": "image/png",

"svg": "image/svg+xml",

"swf": "application/x-shockwave-flash",

"tiff": "image/tiff",

"txt": "text/plain",

"wav": "audio/x-wav",

"wma": "audio/x-ms-wma",

"wmv": "video/x-ms-wmv",

"xml": "text/xml"

};

我重复刷新页面后Expires头和Cache-Control: max-age头没有发生变化

初学node,写静态文本服务器,希望大神能帮帮我。

不好意思,当时代码贴错了。。。

相关阅读:

写vuejs的时候,用到es6的箭头函数,浏览器chrome 53可以直接运行吗?

Sortable.js 插件 怎么保存排序后的顺序?

怎么实现访问网站文件白名单功能

JS拼接HTML基本语法join()怎么理解?

在写Hexo Theme / 在Hexo的博客内容被渲染时中,如何不让HTML字符串被转义?

稀疏矩阵的存储和计算的问题?

react子组件的render方法执行了两遍

mongodb 显示不出中文,都是方块,该如何解决?

elementUI中的select组件,文档没有提供默认选中的方法,有什么别的办法能够做到默认选中的状态吗?

推荐一下验证码识别的python代码

手机滚动条问题

微信长按base64图片,先弹出复制,后出现保存

chrome的问题

.htaccess 隐藏index.php 并使用pathinfo 资源文件路径错误不报错

vue 在页面加载的时候会重绘app区域内所有节点吗?

高级程序设计 插件检测中的疑惑

Bootstrap中导航条滚动时的动画效果

java这么烂为什么还有那么多人用?

docx4j word转pdf 中文宋体(中文正文)类型转换乱码

有没有不需要配置模板的短信API

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/516022
推荐阅读
相关标签
  

闽ICP备14008679号