2015-07-19 49 views
1

我对内部API的每个请求都需要一个授权标头。我正在使用许多Web组件构建基于聚合物的应用程序,包括私人和第三方。我通过<iron-ajax>元素几乎完成了所有的AJAX调用。我知道我可以创建一个自定义组件来实现我正在寻找的集中化,但是我想知道是否使用服务工作人员来拦截对我的api的请求并添加所需的标题和任何其他操作或验证,我可能会可行的,高性能的,甚至可能的。特别是因为Polymer 1.0不支持扩展其他组件。如何使用服务工作者为我的所有API请求添加授权标头?

+0

“我知道我可以创建一个自定义组件”---我认为这正是您的问题的答案,并且是一个完美的用例,用于创建包装您的调用的自定义组件。这是一个组件使用 1.静态特殊标头 2.执行验证 3.可在外部配置。 所有这些都让我大吃一惊,而且我认为服务工作者拦截这个等等的方式比我们需要做得更多。 “这是一个元素!” – mbunit

回答

3

将服务工作者脚本想象成一个(java-)可编写脚本的代理 - 只要服务工作者控制源,您肯定可以对您的调用进行任何操作(包括添加,删除和操作HTTP标头)。直到你的API调用是相同的。 Cross-Origin和其他不透明的请求会变得更加棘手,但我认为这不适用于您迄今为止描述它的用例。

该方法唯一的问题是,您基本上将您的应用程序的范围限制为单个浏览器:Google Chrome(版本40+)。如果你没有问题,随时可以继续使用,但是由于Firefox不支持请求捕获(fetch事件),(即使现在的服务人员似乎最终登陆Firefox 43),你不能填充工具服务人员 - 你会提供一些回退机制在你的页面的JS代码如果你想支持任何浏览器,Chrome以外的其他40多个至少数月来。

+1

为了加强这一点:服务工作者的目的是逐渐增强,设计一个只在服务人员注册时才会工作的页面几乎肯定是一个错误。即使对于Chrome用户,在用户第一次访问该网站时,SW也会(通常)不会处于活动状态,或者如果用户移位,则会重新加载您的某个网页。 –

+0

谢谢你们两位。这为他们的预期用途增加了一些清晰度。我认为使用它们并不合理。我意识到我可以很容易地劫持'xhr.open'方法来设置监听器并执行我需要的任何操作,而现在,我选择使用聚合物行为来做到这一点。 – bearfriend

相关问题