0

我正在尝试浏览器缓存 API 机制,但是要缓存的 api 正在使用 cookie 身份验证。并且收到“未授权 401”错误消息。当我从 cache.add(apiurl) 调用时,我怀疑应该为所有 api 请求发送的 http cookie 没有发送

         if ('caches' in window) {
                caches.open('cachename').then(cache => {
                    cache.add(apiUrl).then(() => {
                        //done!
                    })
                });
            }
4

2 回答 2

0

我找到了解决这个问题的方法。不要在 add() 方法中添加 URL,而是使用“credentials:include”或“credentials:same-orgin”创建一个 Request 对象,具体取决于您的 CORS 设置。

 if ('caches' in window) {
            caches.open('cachename').then(cache => {
                cache.add(new Request('apiurl', {credentials: 'include'}).then(() => {
                    //done!
                })
            });
        }

//或者

if ('caches' in window) {
            caches.open('cachename').then(cache => {
                cache.add(new Request('apiurl', {credentials: 'same-origin'}).then(() => {
                    //done!
                })
            });
        }
于 2019-06-10T06:45:12.307 回答
0

不建议cache.addnew Request. 至少它是对服务器的新请求,并且可以缓存不相关的数据。相反,我建议使用cache.put+res.clone()

if ('caches' in window) {
  if (navigator.onLine) {
    return fetch(request)
        .then(res => {
            const resClone = res.clone();
            caches.open(KEY).then((cache) => cache.put(request, resClone));

            return res;
        })
        .catch(err => console.error(err));
  }

  // some other logic
}

在此处输入图像描述

https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#recovering_failed_requests

于 2021-04-24T17:01:16.757 回答