【问题标题】:XMLHTTPRequest timeout is not time-to-first-byte?XMLHTTPRequest 超时不是第一个字节的时间?
【发布时间】:2017-12-01 10:36:38
【问题描述】:

我想为 TTFB 指定一个超时时间(到第一个字节的时间)。

Spec (https://xhr.spec.whatwg.org/#event-xhr-timeout) 说“在获取完成之前作者指定的超时已经过去。”,这不是我想要的。

用例;我可能会从服务器发送媒体,因此响应可能需要任意长的时间才能返回。

但返回 nothing 是一种错误情况,这意味着我想重试请求。

怎么做?

关于超时/ontimeout 的参考:https://stackoverflow.com/a/4958782/63621https://fetch.spec.whatwg.org/#concept-network-error

【问题讨论】:

    标签: javascript xmlhttprequest


    【解决方案1】:

    我想为 TTFB 指定一个超时时间(到第一个字节的时间)。

    由于第一个进度事件的 50 毫秒持续时间不可压缩,您无法完美地实现这一点。假设您不关心这种不精确性,reset the timeout property 或在进度处理程序中手动中止。

    但没有得到任何回报是一种错误情况,这意味着我想重试请求。

    如果您没有收到至少一个字节,则不会触发任何进度事件:

    …only invoked when new bytes are transmitted.

    【讨论】:

    • 你误会了我写的东西,我并没有自相矛盾。我不关心在运行时知道实际的 TTFB,只关心可以在 XHR 上设置以应用于服务器接受字节的超时。或者换句话说;也许连接很差;当我重试(或不重试)时,我所关心的只是数据是否定期发送......(崩溃到 TTFB 的案例)
    • 然后我回答了您的问题:“只需在进度处理程序中重置超时属性……”:即使用new Date().getTime() 计算自调用send 以来经过的时间。直接中止会更容易;但它不会触发 ontimeout 处理程序。
    • 我编辑了您的答案以反映这一点并将其标记为已回答。我不知道您可以通过回调覆盖客户端上的timeout。感谢您的回答。
    猜你喜欢
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 2016-04-08
    • 1970-01-01
    • 2017-01-10
    • 2018-01-23
    • 1970-01-01
    相关资源
    最近更新 更多