cors - 在 Service Worker 中获取 CORS 请求

标签 cors service-worker

我正在编写一个服务 worker ,目的是监视网站的流量。我捕获请求和响应并将相关数据发送到我的后端

我试图避免监视 CORS 请求。 我的逻辑是这样的(删除不相关的行):

self.addEventListener("fetch", function (event) {
  event.respondWith(handleRequest(event));
});

const handleRequest = async event => {
  let response;
  let request = event.request.clone();
    if (! isCrossOrigin(event.request)) {  
      response = await fetch(event.request);
      storeData(request, response.clone());
      return response;
    } else {
      console.log(`Dropping request for ${event.request.url}`)
      return fetch(request);
    }
};

问题是,当我有 CORS 请求并且我通过 fetch(request) 获取它时,在不更改原始凭证状态的情况下,我得到:

Access to fetch at 'https://other-domain.com/test-post' from origin
'http://localhost:3000' has been blocked by CORS policy:
The value of the 'Access-Control-Allow-Origin' header in the response
must not be the wildcard '*' when the request's credentials mode is 'include'.

如果没有凭据,我无法发送请求,因为我的客户端(使用我的 Service Worker 的人)可能需要它。

我无法返回 * 以外的值在 header 中只是因为我不拥有第 3 方原始服务器。我不能要求更改他们的 API 以进行监控。

我的问题 - 有没有办法直接传递请求,就好像它没有被我的服务人员拦截一样?

我不介意忽略 CORS 请求,因为它们对于我正在监视的内容并不重要。

最佳答案

如果您从 FetchEvent 处理程序同步返回,则浏览器将继续像平常一样处理它。所以类似:

self.addEventListener("fetch", function (event) {
  if (isCrossOrigin(event.request)) {
    return;
  }
  event.respondWith(handleRequest(event));
});

const handleRequest = async event => {
  let response = await fetch(event.request);
  storeData(request, response.clone());
  return response;
};

这并不能真正解决您从服务工作人员调用 fetch(evt.request) 时遇到错误的原因。如果正常请求成功,那么一般来说应该可以工作。

关于cors - 在 Service Worker 中获取 CORS 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57134235/

相关文章:

javascript - Ionic v2 + CORS 预检访问控制允许方法

javascript - 获取 api 预检请求失败

Angular PWA 在没有 WorkBox 的情况下添加后台同步

javascript - ServiceWorker 中的 SharedWorker 端口等效吗?

javascript - 使用workbox的injectmanifest在vue.js中创建服务 worker 崩溃

javascript - 在服务 worker 文件中使用 ESM(导入/导出)

javascript - 在 AngularJS 中使用 POST 到 .net Web API 时出错

javascript - OpenFIGI API 和 CORS

json - 具有 Access-Control-Allow-Origin 正则表达式值的 ajax CORS 问题

facebook - 创建 React App Service Worker nginx 无缓存配置