我如何使用 Service Worker 为我所有的 API 请求添加授权 header,这是否有意义?

How can I, and does it make sense to, use a Service Worker to add an Authorization header to all my API requests?

我向内部 API 发出的每个请求都需要授权 header。我正在使用许多 Web 组件构建一个 Polymer-based 应用程序,包括私有组件和 third-party。我几乎所有的 AJAX 调用都是通过 <iron-ajax> 元素进行的。我知道我可以创建一个自定义组件来实现我正在寻找的集中化,但我想知道是否使用服务工作者来拦截对我的 api 的请求并添加所需的 headers 和任何我可能想要的其他操作或验证是可行的、高效的,甚至是可能的。特别是因为 Polymer 1.0 还不支持扩展其他组件。

将 Service Worker 脚本视为 (java-) 可编写脚本的代理——您当然可以对调用进行任何操作(包括添加、删除和操作 HTTP Headers),只要因为 service worker 控制着原点。直到你的 API 个电话是 same-origin。 Cross-Origin 和其他不透明的 request-y 东西变得更棘手,但我认为这不适用于你的 use-case 从你到目前为止的描述来看。

该方法的唯一问题是您基本上将应用程序的范围限制在单个浏览器中:Google Chrome(版本 40+)。如果你觉得这没问题,请随意继续,但由于 Firefox 目前还不支持请求捕获(fetch 事件),(尽管此时的服务人员似乎最终登陆 Firefox 43),并且你不能 polyfill 服务工作者 — 你将 必须 提供一些 fallback-mechanism 你页面的 JS 代码,如果你想支持 任何 浏览器,而不是 Chrome 40+ 至少在未来几个月。