url - 不同的YouTube URL指向同一视频

标签 url youtube

当我反向工程它的视频ID生成器时,我在youtube中发现了一些错误。如果我更改了视频ID的最后一个字符,它将重定向到同一视频。这怎么可能?

例:

https://www.youtube.com/watch?v=9bZkp7q19f0
https://www.youtube.com/watch?v=9bZkp7q19f1
https://www.youtube.com/watch?v=9bZkp7q19f2
https://www.youtube.com/watch?v=9bZkp7q19f3

但是此网址不起作用:
https://www.youtube.com/watch?v=9bZkp7q19f4

最佳答案

videoId是8字节(64位)base64编码的。从this post:

For the videoId, it is an 8-byte (64-bit) integer. Applying Base64-encoding to 8 bytes of data requires 11 characters. However, since each Base64 character conveys exactly 6 bits, this allocation could actually hold up to 11 × 6 = 66 bits--a surplus of 2 bits over what our payload needs. The excess bits are set to zero, which has the effect of excluding certain characters from ever appearing in the last position of the encoded string. In particular, the videoId will always end with one of the following: { A, E, I, M, Q, U, Y, c, g, k, o, s, w, 0, 4, 8 }



就您而言,您的videoId为9bZkp7q19f0:
enc.  | 9      b      Z      k      p      7      q      1      9      f      | 0
value | 61     27     25     36     41     59     42     53     61     31     | 52
bin.  | 111101 011011 011001 100100 101001 111011 101010 110101 111101 011111 | 1101  00

如果您修改了最后一个字符,则如果修改了最高4位(MSB),则64位ID将发生变化:

9bZkp7q19f1:
enc.  | 9      b      Z      k      p      7      q      1      9      f      | 1
value | 61     27     25     36     41     59     42     53     61     31     | 53
bin.  | 111101 011011 011001 100100 101001 111011 101010 110101 111101 011111 | 1101  01

9bZkp7q19f2:
enc.  | 9      b      Z      k      p      7      q      1      9      f      | 2
value | 61     27     25     36     41     59     42     53     61     31     | 54
bin.  | 111101 011011 011001 100100 101001 111011 101010 110101 111101 011111 | 1101  10

9bZkp7q19f3:
enc.  | 9      b      Z      k      p      7      q      1      9      f      | 3
value | 61     27     25     36     41     59     42     53     61     31     | 55
bin.  | 111101 011011 011001 100100 101001 111011 101010 110101 111101 011111 | 1101  11

这将给出不同的视频ID(请注意,最后一个字节的4个MSB会从1101修改为1110):
enc.  | 9      b      Z      k      p      7      q      1      9      f      | 4
value | 61     27     25     36     41     59     42     53     61     31     | 56
bin.  | 111101 011011 011001 100100 101001 111011 101010 110101 111101 011111 | 1110  00
9bZkp7q19f4将提供不同的64位ID。请注意,如果存在这样的id,9bZkp7q19f49bZkp7q19f59bZkp7q19f69bZkp7q19f7将给出相同的ID。

您可以检查base64编码/值here

关于url - 不同的YouTube URL指向同一视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45403510/

相关文章:

asp.net-mvc - ASP.Net MVC - 处理错误的 URL 参数

javascript - 如何在动画 JavaScript anchor 滚动时编辑 URL 名称?

html - 嵌入在 UIWebview 上的 youtube 视频顶部的空白

ios - 如何在 ios 中本地播放 youtube 视频列表

javascript - YouTube上载小部件无法设置隐私

python - GAE Python 应用程序 - URL 对 SEO 重要吗?

c# - Web API : A potentially dangerous Request. 从客户端检测到路径值

python - 如何在 Python 中为需要文件名的函数提供 URL

android - 我们可以在Android App上从YouTube channel 获得通知或推送消息吗?

php - 删除所有Href和youtube URL并获取ID