3

我编写了一个在域上运行并从其他各种域(第三方资源)获取图像的脚本。

我正在尝试对window.performance.getEntriesByType('resource')事物进行一般健康检查。看来,由于这些资源位于其他域上,因此响应需要Timing-Allow-Origin在响应标头中设置才能通过window.performance.getEntriesByType().

这是真的?

此外,当我运行我的脚本时,Chrome 浏览器确实会返回有用的信息。事实上,如果我能以编程方式获取这些数据,我就可以使用它。但是 Chrome 显示的数据和返回的数据window.performance.getEntriesByType()不同。

我附上了一个屏幕截图,它显示了 Chrome 加载资源的有用时间分解。由于性能条目对象的数据不匹配。

例如,查看右侧时序图中的 DNS Lookup 时间,然后查看性能条目对象中的 domainLookupStart 和 domainLookupEnd 值。这些值彼此不匹配。

为什么会出现差异?如何获取 Chrome 的数据?如何从性能条目对象中获取 Chrome 显示的内容?

谢谢!

Chrome 资源加载时序图

4

1 回答 1

3

您现在可能已经弄清楚了,但是我有一个类似的问题并找到了这个。

根据规范,对于未设置标头PerformanceResourceTiming的跨域资源,对象中最详细的字段报告为零:Timing-Allow-Origin

connectStart 必须返回零,除非时间允许检查算法通过。

对于其他字段也是如此,例如 DNS 查找字段。

至于为什么开发者控制台即使不能通过编程方式访问也能看到这些信息,只是Chrome的一个功能可以让你看到这些信息。隐藏它更多的是一种礼貌,而不是一种安全功能;规范规定了可以通过 Resource Timing API 共享的内容,但浏览器仍然可以访问信息,并且可能决定以其他方式与用户共享,正如您所见。

于 2016-02-02T23:32:14.703 回答