我想在网页上从Google驱动器复制音乐文件。我有每个文件的链接,但调用的响应缓存头是“无缓存,无存储,max-age = 0,必须重新验证”,因此它永远不会保存在浏览器缓存中。有什么办法将缓存添加到Google驱动器文件请求?
问题:
当您将驱动器链接用于音乐文件(mp3)https://drive.google.com/a/pucp.pe/uc?id=1kYYS9FZ9Vxif5WJM9ZQcY4SR35NMgoIE&export=download时,GET API调用会收到302代码,该代码生成到另一个URL(在本例中为“ https://doc-0o-28-docs.googleusercontent.com/docs/securesc/bgp95l3eabkkpccn0qi0qopvc4e7d4mq/us95e8ush1v4b7vvijq1vj1d7ru4rlpo/1556330400000/01732506421897009934/01732506421897009934/1kYYS9FZ9Vxif5WJM9ZQcY4SR35NMgoIE?h=14771753379018855219&e=download”)的重定向。每个调用的标头中都有no-cache
。
我尝试使用工作箱(缓存API),但找不到缓存重定向的方法,可能我需要缓存两个调用(第一个GET和重定向)。但是,如果我使用重定向的URL,则可以进行缓存,但是在进行首次调用之前,我无法访问该URL。
我试图从NodeJS服务器使用代理服务器
app.get("/test", (req, res) => {
try {
https.get(
URL,
function(response) {
res.writeHead(response.statusCode, {...response.headers,
"Cache-Control": "public, max-age=120",
"Expires": new Date(Date.now() + 120000).toUTCString() })
response.pipe(res);
}
);
} catch (e) {
console.log(e);
}
});
我尝试使用第一个没有运气的URL。 我尝试使用重定向URL,但收到“状态码:找到302”
一种解决方案是下载文件并直接从我的服务器提供文件,但是我将失去使用驱动器存储的意义。我真的很想使用Google驱动器存储,而不要复制服务器上的所有文件。
是否有推荐的方法来进行这种情况的缓存?也许我缺少一些Google驱动器配置。还是您知道在这种情况下可以采取的另一种方法?
答案 0 :(得分:0)
您应该能够使用Workbox(通常是Cache Storage API)来缓存重定向的响应。 HTTP 30x重定向会自动by default进行跟踪,您只需路由原始的非重定向URL。
这是一个Glitch项目的实时示例,该项目使用Workbox缓存该MP3文件:https://glitch.com/edit/#!/horn-sausage?path=sw.js:9:0
相关的代码段也说明了在提供文件时不使用CORS的事实(因此您将获得状态为0
的{{3}}):
workbox.routing.registerRoute(
new RegExp('https://drive.google.com/'),
new workbox.strategies.CacheFirst({
plugins: [
new workbox.cacheableResponse.Plugin({statuses: [0, 200]})
],
})
);