Skip to content

Latest commit

 

History

History
55 lines (30 loc) · 3.57 KB

bep_0017-HTTP种子.md

File metadata and controls

55 lines (30 loc) · 3.57 KB

https://www.bittorrent.org/beps/bep_0017.html

元数据扩展

  • “ httpseeds”

在元数据文件的主区域中,而不是“ info”部分的一部分,将是一个新密钥“ httpseeds”。此项将引用URL列表,并将包含可检索种子数据的网址列表。如果客户端无法使用此密钥,则可以安全地忽略该密钥。

例子:

d ['httpseeds'] = ['http://www.whatever.com/seed.php']

这指定客户端可以通过使用以下协议规范中提供的参数访问给定的URL来检索数据:

d ['httpseeds'] = ['http://www.site1.com/source1.php', 'http://www.site2.com/source2.php']

可以指定多个网址;如果是这样,客户端将尝试访问两个URL来下载种子数据。

协议

客户端以以下格式调用给定的URL:

?info_hash = [哈希]&piece = [piece] {&ranges = [开始]-[结束] {,[开始]-[结束]} ...}

例子:

http://www.whatever.com/seed.php?info_hash=%9C%D9i%8A%F5Uu%1A%91%86%AE%06lW%EA%21W%23?5%E0&piece=3 http://www.whatever.com/seed.php?info_hash=%9C%D9i%8A%F5Uu%1A%91%86%AE%06lW%EA%21W%23?5%E0&piece=8&ranges=49152-131071 ,180224-262143

该URL将用于一个脚本,该脚本可以访问torrent中包含的文件以及元数据(.torrent)文件本身,以便可以计算从哪些文件中提取哪个字节范围。DeHackEd已经编写了一种这样的脚本,可以从http://bt.degreez.net获得

如果一切正常,脚本应以二进制格式返回状态200(OK)和一个数据块(如果没有给出范围,则返回整个数据块,或将该数据块请求的数据范围附加在一起)或503(服务暂时不可用),返回的主体为ASCII整数值,用于指定客户端在重试之前应等待的时间。客户应将任何其他返回码视为错误。在发生错误的情况下,客户端应重试,但如果仍然无法联系种子,则重试的频率应降低。

服务器端实施说明

http种子脚本的目的是限制对正在下载的数据的访问,以使Web服务器不会被请求数据的客户端所淹没。如果不是出于此限制,那么将无法阻止某人对客户端进行编码以尝试连续下载或多次下载,从而导致服务器负担沉重。限制下载速率还可以使http种子脚本在网络帐户上运行,在该帐户中,下载的数据总量受到限制或可能导致额外的服务费用。

该脚本必须提供三个主要功能:

  1. 将其平均上传限制在合理的水平。
  2. 聪明地告诉同龄人重试之前应该等待多长时间。
  3. 从信息哈希和片段号转换为一个文件或一组文件中的字节范围,然后返回这些字节。

另一个非常理想的功能是检查对等方是否经常重试,并自动禁止这些对等方。

其他理想的功能包括监视种子使用的跟踪器的方式,以及在存在足够的P2P种子的情况下停止上载数据的方式,以及反馈到跟踪器以显示种子的方式。

客户端实施说明

原型代码库的默认重试时间为30秒。重试3次后,每个周期都会延长时间。

原型代码在接收到来自该种子的数据之前,不会显示任何与http种子联系的错误(除非.torrent中提供的URL不正确)。(原型代码也不会为实际收到的任何HTTP回复显示任何错误。)

当前的行为是:索取您可以找到的整体中最丢失的最稀有物品。如果您没有部分下载的片段,则跳过一个重试周期,然后开始请求部分片段。如果收到503响应,则将重试时间设置为等于响应中收到的整数值。