代码之家  ›  专栏  ›  技术社区  ›  Tom

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

  •  3
  • Tom  · 技术社区  · 6 年前

    我正在使用Apollo客户端,我刚刚注意到,当XHR过滤器处于活动状态时,我的GraphQL查询不会出现在网络调用列表中。

    这怎么可能?gql只是普通的旧http之上的一组语义,对吧?js库并不能引入全新的网络功能。

    在下面的第一张图片中,您可以看到我在过滤带有“gra”的请求;出现两个:options调用,然后是post(这是真正的肉)。在第二张图片中,我另外使用xhr进行过滤;post不见了。

    enter image description here

    “xhr”过滤器说它捕获“xhr和fetch”。我能想到的唯一选择是动态添加 <script> 文件上的标签,我非常怀疑阿波罗客户端是如何管理的。

    我不知道“json”类型是什么。这个 docs for the DevTools 别提那种类型。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Tom    6 年前

    我认为这是因为Chrome fetch 能力不仅仅是老一套的糖 XMLHttpRequest 功能,devtools中的filter选项(称为“xhr”)不是构建的,也不是设计为伞形的“异步请求”过滤器。我希望他们能改变这一点,特别是因为网络面板中的type列仍然可以用来区分这两者。

    如果我不得不推测,我会说我们观察到的行为是从network选项卡连接到底层网络代码的方式开始的,并且 取来 调用不移动XHR所做的代码路径的相关部分。作为证据,我提议 this SO answer ,这突出了xhr&之间的功能差异 取来 这很容易解释为它们是完全独立的代码。(也有可能其中一些差异是 取来 规范显式调用与XHR不同的行为。)

    最后,我要补充的是,我们可能只注意到Apollo的GQL工具,因为Apollo客户机是在后XHR世界中创建的,并且可能是我们使用的第一批喜欢 取来 在xhr上而不是使用xhr polyfill。