为什么阿波罗客户端的GraphQL查询不会出现在Chrome的XHR网络过滤器中?

时间:2018-06-19 18:01:46

标签: xmlhttprequest google-chrome-devtools apollo-client

我正在使用apollo-client,我刚刚注意到当XHR过滤器处于活动状态时,我的GraphQL查询没有出现在网络呼叫列表中。

这怎么可能? GQL只是常规旧HTTP之上的一组语义,对吗?这不像JS库可以引入全新的联网功能。

在下面的第一张图片中,您看到我过滤了其中包含“ gra”的请求;出现两个:OPTIONS调用,然后是POST(这是真正的内容)。在第二张图片中,我还按XHR进行了过滤。 POST不见了。

enter image description here

“ XHR”过滤器表示它捕获“ XHR和提取”。我能想到的唯一选择是在文档中动态添加<script>标签,而我非常怀疑那是阿波罗客户管理事情的方式。

我不知道“ json”类型是什么。 docs for the DevTools没有提及该类型。

1 个答案:

答案 0 :(得分:0)

我认为这样做的原因是Chrome的fetch功能不仅仅是在古老的XMLHttpRequest功能之上的糖,而且还包括DevTools中的filter选项(显示为“ XHR”)不是构建或未设计为伞形“异步请求”过滤器。我希望他们能够对此进行更改,特别是因为“网络”面板中的“类型”列仍可用于区分两者。

如果不得不推测,我想说的是,我们观察到的行为是从“网络”选项卡挂接到基础网络代码的方式产生的,fetch调用不会传播XHR的代码路径的相关部分做。作为支持的证据,我提供了this SO answer,它着重说明了XHR和fetch之间的功能差异,这些差异可能完全由它们完全独立的代码来解释。 (这其中的一些差异也可能是fetch规范明确要求与XHR行为不同的结果。)

最后,我要补充一点,我们可能只在Apollo的GQL工具中注意到了这一点,因为apollo-client是在XHR后的世界中创建的,并且可能是我们与之合作的首批使用fetch的库之一通过XHR而不是使用XHR polyfill。