《HTTP文件断点续传的原理》下文给大家分享有关HTTP文件断点
    Sunday, April 16, 2017
    8:48 PM
    《HTTP文件断点续传的原理》下文给大家分享有关HTTP文件断点 - 图1
    酷勤网-程序员的那点事
    06/28/2016
    《HTTP文件断点续传的原理》下文给大家分享有关HTTP文件断点续传的原理。http://t.cn/R5Hx74a(来自: 博客园 )
    ![0 本 文 来 自 : 博 客 园 版 权 归 届 原 作 者 HTTP文 件 断 点 续 传 的 原 理 0 @仃 程 厚 猿 & & 酷 勤 网 制 作 前 几 天 一 个 同 事 跑 过 来 找 我 说 , 我 们 在 广 告 素 材 视 频 这 块 想 做 断 点 续 传 , 就 是 这 次 某 个 视 频 缓 存 到 一 半 , 下 次 不 重 头 开 始 , 可 以 在 原 来 停 留 得 位 置 开 始 继 续 下 载 、 以 提 供 更 好 的 户 体 验 。 同 时 说 需 要 我 们 支 恃 吐 素 材 地 址 的 业 务 唼 口 告 诉 终 端 最 后 修 改 时 间 / 文 件 签 名 ( md5 ) , 这 个 来 判 断 我 当 前 要 下 的 文 件 有 没 有 变 化 , 同 时 告 诉 终 端 文 件 的 s ‘ze 大 小 、 我 一 细 想 , 这 个 问 题 压 根 不 需 要 通 过 改 变 觋 有 接 口 提 供 更 多 的 数 据 来 做 、 下 面 从 原 理 实 觋 上 简 单 说 下 关 腱 点 对 于 断 点 续 传 , 关 键 点 是 叻 个 1 、 终 端 知 道 当 前 的 文 件 和 上 一 次 加 载 的 文 件 是 不 是 内 容 发 生 了 变 化 , 如 果 有 变 化 , 需 要 重 新 从 offset 0 的 位 置 开 始 下 2 、 终 端 记 录 好 上 次 成 功 下 载 到 的 。 ffset , 告 诉 se rver server 支 恃 从 特 定 的 offset 开 始 吐 数 据 文 件 变 化 感 知 前 置 业 务 接 口 方 案 . 对 于 关 踺 点 1 , 对 于 决 定 大 部 分 产 品 的 业 务 场 景 , 可 以 通 过 前 置 业 务 接 口 解 决 ; 这 里 简 单 介 绍 一 下 对 于 非 下 载 工 具 类 的 产 品 , 如 视 频 APP ( 奇 艺 , 优 酷 ) , 视 频 罹 放 前 会 请 求 相 关 业 务 的 信 息 , 芏 要 返 回 片 子 叫 什 么 名 字 , 芏 要 演 员 等 等 一 些 列 信 息 , 同 时 会 返 回 一 个 对 于 罹 放 最 重 要 的 信 息 一 一 罹 放 地 址 。 罹 放 地 址 就 是 我 们 可 以 做 文 章 的 地 方 , 如 果 《 太 子 妃 第 一 集 》 这 个 片 子 更 新 了 ( 被 广 电 要 求 减 掉 某 个 污 的 画 面 以 后 端 系 统 让 这 个 业 务 唼 口 吐 不 同 的 罹 放 地 址 / 一 个 不 同 的 “ ] 参 数 ( ?ver : 1 、 1 ) / 位 置 参 数 ( # verl 、 1). 这 样 纯 天 然 的 URL 变 化 能 纯 天 然 的 让 终 端 认 为 不 是 同 一 个 片 子 , 而 需 要 重 新 加 载 。 HTPP 标 准 ETAGER 没 有 业 务 唼 口 的 下 载 工 具 类 的 如 何 解 决 呢 ? 下 载 工 具 类 的 没 有 前 置 接 口 可 以 使 HT T p 的 ETAG*F i 尸 是 否 文 件 已 修 改 。 ETAG 原 理 : 如 果 URL 上 的 源 内 容 改 变 , 一 个 新 的 不 一 样 的 ETag 会 被 分 配 。 这 种 方 法 使 ETagBP 类 似 于 指 纹 并 且 他 们 能 够 被 快 速 地 被 比 较 , 以 确 定 叻 个 版 本 的 资 源 是 否 相 同 。 ETag 的 比 较 口 对 同 一 个 URL 有 意 义 一 一 不 同 URL 上 的 资 源 的 ETag 值 可 能 相 同 也 可 能 不 同 , 从 他 们 的 ETag 的 比 较 中 无 从 惟 断 。 ETAGZHTTP的一个可选字段 , 且 没 有 范 他 的 实 觋 ; 实 际 上 业 内 的 比 较 多 的 就 是 使 MD5 签 名 的 方 式 来 生 成 (linux shell md5sum) 典 型 法 带 有 ETAG 的 module , 当 然 serverfi : Nglnx > 1 、 3 、 3 同 时 也 可 以 在 业 务 代 码 里 S e t Heade rs 加 一 个 ETAG 字 段 ( li e n t 端 第 一 次 请 求 时 Stnngetag 二 httpURLConnection.getHeaderField(“ETag”); ETag: “ b428eab9654aa7 ( 87091e “ 第 二 次 请 求 ( 断 点 续 传 时 ) httpURLConnection 、 setRequestProperty( “If-None- Match” “ b428eab9654aa7 ( 87091e 门 ; f-None-Match: “ b428eab9654aa7 ( 87091e “ 如 果 ETag 值 匹 配 , 这 就 意 味 着 资 源 没 有 改 变 , 服 务 器 便 会 发 送 回 一 个 极 短 的 响 应 , @åHTTP “ 304 耒 修 改 “ 的 状 态 。 3 0 4 状 态 告 诉 客 F 端 , 它 的 缓 存 版 本 是 最 新 的 , 并 应 该 使 它 。 而 , 如 果 ETag 的 值 不 匹 配 , 这 意 味 着 资 源 很 可 能 发 生 了 变 化 , 那 么 , 一 个 完 整 的 响 应 会 被 返 回 , 包 括 资 源 的 内 容 , 就 好 像 ETag 没 有 被 使 。 这 种 情 兄 下 , 客 F 端 可 以 新 返 回 的 资 源 和 新 的 ETag 替 代 先 前 的 缓 存 版 本 。 续 传 支 持 对 于 一 个 c / c + + 程 序 员 , 第 一 时 间 会 得 出 一 个 系 统 级 实 现 方 案 客 户 端 传 当 前 的 。 ffset 1 、 2 、 server%seek 到 文 件 特 定 的 offset 开 始读 取 Ghttp connection0±äE 不 过 我 们 深 处 在 一 个 开 放 方 案 和 标 准 不 断 完 善 的 时 代 , 不 需 要 己 实 觋 一 个 ( 这 也 是 像 我 这 样 的 C / C + + 研 发 工 程 师 越 来 越 没 落 的 原 因 ) 来 看 看 HT T P 协 议 是 怎 么 解 决 这 个 问 题 的 HTTP头 Range 字 段 Range 、 于 客 F 端 到 服 务 器 端 的 请 求 , 可 通 过 该 字 段 指 定 下 载 文 件 的 某 一 段 大 小 , 及 其 单 位 。 典 型 的 格 式 如 Range: 卸 ‘ e “ 499 下 芎 0 一 499 乒 范 0 内 容 Range / 5 二 500 一 999 ^ 芎 500 一 999 乒 冫 苕 的 内 容 刀 g 巳 卸 s 二 巧 00 ^ 最 后 500 乒 内 容 Range 卸 s 二 50 ^ 500 乒 开 到 文 件 分 的 内 容 来 个 简 单 粗 暴 的 例 子 curl —header “Range: bytes : 0 . 20000 “ xxx.com/memcache.pdf -0 partl curl —header “Range: bytes 二 20001 . 223651 “ xxx.com/memcache.pdf . 0 part2 cat partl part2 > > a.pdf 衍 生 阅 读 . 使 ETags 减 少 Web 应 带 宽 和 负 载 来 自 : http://t.cn/R5915N5
    查看源微博
    已使用 OneNote 创建。