服务工作者可以响应同步XHR请求吗?

16 javascript html5 xmlhttprequest service-worker fetch-api

我想使用Service Workers来增强现有的网站.特别是,我想通过让Service Workers在实际资源不可用时使用占位符资源响应请求来添加更好的离线支持.这种方法一直有效,但我遇到了一个障碍.站点中有一些地方使用同步 XHR请求来加载某些资源,而我的服务工作者在Chrome中没有收到它们的事件.(请不要建议消除同步XHR请求.这是期望的,但超出范围.)

是否应该让服务工作者能够响应同步XHR请求?我可以想象这实现起来很复杂,并且会理解它是否不受支持.W3C服务工作者规范(工作草案)WHATWG获取规范(生活标准)之间应该存在"正确"的答案,但我还没有完成对它们的解密.我希望解释规范如何描述是否应该支持这一点,和/或对有关指定或实现此行为的讨论的任何引用.

Sal*_*lva 6

根据XMLHttpRequest规范,同步和异步请求获取过程相同的,因此理论上它应该被拦截但是同步XHR已经被弃用,因此我不希望Chrome解决这个问题.


小智 6

理论上

是的,服务工作者应该能够响应同步 XHR 请求。这是不明确的规格说明,但没有异常会导致区别对待同步XHR请求,而W3C Web平台测试(WPT)套房有一个测试案例来验证它的支持:wpt/service-workers/service-worker/fetch-request-xhr-sync.https.html

在实践中

截至 2019 年 1 月,Service Workers 可以在 Firefox 和 Edge 中响应同步 XHR 请求,但不能在 Chrome 或 Safari 中响应。Chrome计划很快添加支持,但我们不知道 Safari 是否会。

WPT.fyi提供最新的浏览器支持矩阵。您可以在自己的浏览器中运行 WPT 测试用例,网址https://w3c-test.org/service-workers/service-worker/fetch-request-xhr-sync.https.html