如何通过JavaScript获取服务器托管文件的lastModified日期?
这个需求完全可实现,你之前遗漏的核心逻辑是:同域托管的静态文件响应头默认会携带Last-Modified字段,存储服务器侧记录的文件最后修改时间,不需要拉取完整文件内容就能获取到。
核心实现要点
- 优先使用
HEAD方法发起请求,服务器只会返回响应头、不会返回文件内容,大幅减少不必要的流量开销 - 通过fetch返回的Response对象的
headers属性,即可读取到Last-Modified字段值,该值为标准GMT时间字符串,可以直接传入Date对象做格式化 - 若遇到极少数静态服务不支持HEAD请求的场景,可以降级使用普通GET请求,拿到响应头后不需要读取响应体内容,不会阻塞时间信息的获取
- 该方案的前提是托管服务器没有主动移除
Last-Modified响应头,Nginx、Apache、对象存储、静态页面托管平台默认都会返回该字段,不需要额外配置
可直接运行的实现代码
<!DOCTYPE html> <html> <script> async function printFileMtime() { // 优先发HEAD请求拿响应头 let response = await fetch("myfile.txt", { method: "HEAD", cache: "no-store" }); // 兼容不支持HEAD请求的服务,降级为GET if (response.status === 405 || !response.ok) { response = await fetch("myfile.txt", { cache: "no-store" }); } const mtimeStr = response.headers.get("last-modified"); if (!mtimeStr) { console.log("当前服务器未返回文件最后修改时间字段,请检查服务端配置"); return; } const mtime = new Date(mtimeStr); // 直接打印本地时区格式的修改时间,可按需自定义格式化逻辑 console.log("myfile.txt最后修改时间:", mtime.toLocaleString()); } printFileMtime(); </script> </body> </html>
特殊场景说明
如果你的服务器主动配置了移除Last-Modified响应头,纯前端静态代码就无法拿到文件修改时间了,需要调整服务端配置保留该字段,或者单独写后端接口返回对应文件的修改时间。
内容的提问来源于stack exchange,提问作者EuRobot
相关产品推荐
相关产品推荐

