我正在使用apollo-client,我刚刚注意到当XHR过滤器处于活动状态时,我的GraphQL查询没有出现在网络呼叫列表中。
这怎么可能? GQL只是常规旧HTTP之上的一组语义,对吗?这不像JS库可以引入全新的联网功能。
在下面的第一张图片中,您看到我过滤了其中包含“ gra”的请求;出现两个:OPTIONS调用,然后是POST(这是真正的内容)。在第二张图片中,我还按XHR进行了过滤。 POST不见了。
“ XHR”过滤器表示它捕获“ XHR和提取”。我能想到的唯一选择是在文档中动态添加<script>
标签,而我非常怀疑那是阿波罗客户管理事情的方式。
我不知道“ json”类型是什么。 docs for the DevTools没有提及该类型。
答案 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。