当前位置: 首页 > 知识库问答 >
问题:

对服务人员的抓捕似乎没有触发

薛华奥
2023-03-14

当浏览器从服务器请求图像时,后端的API控制器将接收该调用。在那里,在返回映像之前必须进行授权检查,以检查请求是否被允许。

所以我需要添加授权头,当搜索最佳解决方案时,我发现了这篇文章:https://www.twelve21.io/how-to-access-images-securely-with-oauth-2-0/,我对使用Service Worker的解决方案4非常感兴趣。

我自己实现了,我注册了一名服务人员:

if ('serviceWorker' in navigator) {
    console.log("serviceWorker active");
    window.addEventListener('load', onLoad);
}
else {
    console.log("serviceWorker not active");
}

function onLoad() {
    console.log("onLoad is called");
    var scope = {
        scope: '/api/imagesgateway/'
    };
    navigator.serviceWorker.register('/Scripts/ServiceWorker/imageInterceptor.js', scope)
        .then(registration => console.log("ServiceWorker registration successful with scope: ", registration.scope))
        .catch(error => console.error("ServiceWorker registration failed: ", error));
}

这是在我的imageInterceptor中:

self.addEventListener('fetch', event => {
    console.log("fetch event triggered");
    event.respondWith(
        fetch(event.request, {
            mode: 'cors',
            credentials: 'include',
            header: {
                'Authorization': 'Bearer ...'
            }
        })
    )
});

当我运行我的应用程序,我看到在我的控制台注册似乎是成功执行,因为我看到console.logs打印(ServiceWorker活动,onLoad是调用和成功的注册与正确的范围:https://localhost:44332/api/imagesgateway/

但当我加载图像时(https://localhost:44332/api/imagesgateway/...)通过网关,我仍然得到400,当在后端设置断点时,我看到身份验证头仍然为空。另外,我在控制台中没有看到“Fetcheventtriggered”消息。在另一篇文章中指出,我可以通过此设置看到注册的服务人员:chrome://inspect/#service-工人们,但我也没有看到我的工人在那里。

我的问题是:为什么不添加授权头?是不是因为,虽然注册似乎成功了,但事实并非如此,因此我也没有在inspect#service workers中看到工人?

共有1个答案

盖辉
2023-03-14

您在浏览器控制台中未看到触发的获取事件,因为不允许您的服务人员脚本拦截图像请求。这是因为您的服务工作者脚本位于您感兴趣的请求范围之外的目录中。

为了拦截在/api/imagesgateway/上处理资源的请求,软件脚本需要位于//api//api/imagesgateway/中。它不能位于/some/other/directory/service worker中。js

这就是您的服务人员成功注册的原因!注册软件没有问题。问题在于它能做什么。

更多信息:了解服务人员范围

 类似资料:
  • 我使用的是Spring 2.0.1。使用spring云总线发布并安装所有项目(2个服务和云配置服务器) 配置服务器还具有spring云配置监视器 我在我的Git reposroty中编辑文件(使用具有Spring Cloud Config本机配置文件的本地文件)。检测到更改,我在Cloud Config Server中看到以下行: 但是,其他服务都不会收到有关更新密钥的通知。 另一方面,如果我手动

  • 这是我的功能: 我有十个测试,完全是这样的: 因此,根据我的计算,一次测试只会产生1/10,000次重复运行,10次测试只会产生1/1000次重复运行。然而,它在大约50%的运行中创建了副本,我不知道为什么。

  • 我们正在进行一项实验,以衡量服务工作者的利益。作为其中的一部分,我们正在记录pageLoadTime和服务工作者状态。其思想是,控制器状态为激活状态的数据将被视为通过服务工作者提供的页面,未安装服务工作者的数据将控制器视为空,因此没有服务工作者状态。这样我们就可以将pageLoadTime与 这是知道该页面由SW提供服务的正确方法吗?我想到的一个问题是,如果SW在两者之间被杀死,并向我们提供错误的

  • 我有一个用于缓存图像的服务人员,这个服务人员只在前端模板中注册,但它仍会不断扩展到我的管理模板中。 这导致我的表单在验证令牌受到影响时表现得不可预测。 用一些安慰。日志我认为安装事件是在进入请求页面之前触发的,但我无法确定当前/下一个URL。 如何防止服务人员扩散到管理面板并干扰页面?我只想缓存资产。 就相关而言,这是我的服务人员:

  • 我在这个链接的页面中实现的service worker演示有一些问题。我试着为这个演示尽可能地减少代码,但是粘贴到这里太长了。 一个问题是,当页面完全加载时,我转到Chrome devtools的“应用程序”选项卡,我在缓存中看到了很多内容: 不清楚为什么有这么多缓存...可能是我正在加载的字体,但仍然...似乎很大。 更令人担忧的是,当我单击该部分中的按钮(所有选项均已打勾)时,饼图中红色的部分

  • 问题内容: 我有两个从jquery到Web服务的ajax调用。 第一次调用()在javascript ()中开始一个间隔,并返回存储在会话变量中的消息的字符串数组。 第二个调用()上传用户并将状态保存在要返回的会话中。因此,UploadUsers将消息添加到Session,而GetMessages检索消息并将其显示给客户端。 问题是即使我异步调用这两个方法,也要等到完成。它只是加载。 我什至在要添