【问题标题】:How is the range(content-length) of the last set of bytes in the byte-range requests identified?如何识别字节范围请求中最后一组字节的范围(内容长度)?
【发布时间】:2017-12-13 19:41:40
【问题描述】:

我使用 mozilla 的 pdf.js 库在我的应用程序中呈现 pdf。它使用相同的字节范围请求。我知道对第一组和最后一组字节的请求首先是出于元数据的目的。但是最后一组字节的范围与 pdf 不同。最后一组字节的范围是如何识别和设置的?第一组字节也是以 200 OK 状态获得的。我想知道为什么是 200 而不是 206 部分内容状态。

【问题讨论】:

    标签: range byte pdfjs


    【解决方案1】:

    我知道对第一组和最后一组字节的请求首先是出于元数据目的。

    它部分不正确:即使它到达外部参照/元数据,它也在加载 PDF 的最后一块。文件在逻辑上被分割成 65536 字节的块(见https://github.com/mozilla/pdf.js/blob/master/src/display/api.js#L32

    但最后一组字节的范围与 pdf 不同。

    PDF.js 仅加载整个块(为了提高效率),可能除了最后一个不完整的块。因此,对于不同的 PDF 大小,最后一个块大小的范围可能会有所不同。

    还以 200 OK 状态获得第一组字节。我想知道为什么是 200 而不是 206 部分内容状态。

    取决于您正在谈论的浏览器。对于支持流式传输的浏览器(目前只有 Firefox),PDF.js 除了范围请求外,还会继续获取数据。某些浏览器(Safari 和旧版 Chrome)存在缓存缺陷:它报告缓存文件为 200,即使对于范围范围请求也是如此。

    【讨论】:

    • 对第一个块的请求排在第一位,最后一个块排在第二位。为什么按特定顺序?元数据的第一个/最后一个块在哪里?此外,在 chrome (ver 59 ) 和 firefox 字节 0-65535 中单独呈现 200 OK 状态.. 其他我得到 206 Partial Content 状态。为什么会这样? @asyn5
    • 第一个请求确定HTTP服务器是否支持范围请求,它是200,但是如果文件足够大以通过范围请求有效处理,PDF.js会中断传输。元数据指针/偏移量位于文件末尾,“元数据”内容可以位于文件的任何位置。此外,浏览器的网络工具可能会谎报状态,请使用网络嗅探器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 2011-05-18
    • 2015-04-10
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多