Javascript 随机服务工作者响应错误
我正在使用Service Worker和Cache API缓存静态资源,但对REST API端点(未在SW中缓存)的随机http请求失败,我收到的唯一消息是Javascript 随机服务工作者响应错误,javascript,google-chrome,selenium,service-worker,Javascript,Google Chrome,Selenium,Service Worker,我正在使用Service Worker和Cache API缓存静态资源,但对REST API端点(未在SW中缓存)的随机http请求失败,我收到的唯一消息是xhr.statusText,带有textService Worker响应错误和响应代码500 我无法判断这个错误是否只发生在未被缓存的URL上。这两方面都没有足够的证据。这只发生在Chrome(50.0.2661.75-64b)上,在Firefox45上也可以 我无法手动复制它,因为它发生在硒测试中,而且似乎是随机的。此外,它发生在本地主机
xhr.statusText
,带有textService Worker响应错误和响应代码500
我无法判断这个错误是否只发生在未被缓存的URL上。这两方面都没有足够的证据。这只发生在Chrome(50.0.2661.75-64b)上,在Firefox45上也可以
我无法手动复制它,因为它发生在硒测试中,而且似乎是随机的。此外,它发生在本地主机上(在本地主机上,尽管使用纯http,软件仍应工作),但也发生在具有自签名证书的HTTPS域中,因此,软件甚至不应在该域中工作
Selenium测试经常刷新页面和关闭浏览器窗口,但我不知道这是否重要
你知道为什么会发生这种情况,或者如何获得更多信息吗
更新:
服务人员代码:
var VERSION = "sdlkhdfsdfu89q3473lja";
var CACHE_NAME = "cache" + VERSION;
var CACHE_PATTERN = /\.(js|html|css|png|gif|woff|ico)\?v=\S+?$/;
function fetchedFromNetwork(response, event) {
var cacheCopy = response.clone();
var url = event.request.url;
if (url.indexOf("/api/") === -1 // must not be a REST API call
&& url.indexOf(VERSION) > -1 // only versioned requests
&& VERSION !== "$CACHE_VERSION"
&& CACHE_PATTERN.test(url)) { //
caches.open(CACHE_NAME)
.then(function add(cache) {
cache.put(event.request, cacheCopy);
});
}
return response;
}
function unableToResolve() {
return new Response("Service Unavailable", {
status: 503,
statusText: "Service Unavailable",
headers: new Headers({
"Content-Type": "text/plain"
})
});
}
this.addEventListener("fetch", function (event) {
// cache GET only
if (event.request.method !== "GET") {
return;
}
event.respondWith(
caches.match(event.request)
.then(function (cached) {
if (cached) {
return cached;
} else {
return fetch(event.request)
.then(function (response) {
return fetchedFromNetwork(response, event);
}, unableToResolve)
.catch(unableToResolve);
}
}, function () { // in case caches.match throws error, simply fetch the request from network and rather don't cache it this time
return fetch(event.request);
}));
});
this.addEventListener("activate", function (event) {
event.waitUntil(
caches.keys()
.then(function (keys) {
return Promise.all(
keys.filter(function (key) {
// Filter out caches not matching current versioned name
return !key.startsWith(CACHE_NAME);
})
.map(function (key) {
// remove obsolete caches
return caches.delete(key);
}));
}));
});
有趣。如果有一些代码能够重现问题,那就太好了,即使它在一千次运行中只有一次失败。我已经添加了我正在使用的软件代码,如果我不知道问题出在哪里,就很难分享更多,所以很难隔离/创建最小设置。这条评论可能很有趣。你找到解决方案了吗?我也有同样的问题说不,我当时因为这个问题放弃了软件。昨天我发现了这个,也许遵循这些提示会有所帮助。老实说,我希望随着软件的成熟,这个问题会得到缓解