我理解的url的几个状态

为了思考在有代理缓存服务器的情况下,url有哪几种状态存在,所以按照自己的理解画了一个图,不一定准确,仅作一部分的理解参考。下面很多内容是个人理解的,不保证准确,如有错漏,请指出。

上图:

urls

几个状态的url在图中已经有大概的说明。cacheurl插件能够处理的是图中的url2,即缓存时候的url。

关于cacheurl插件

cacheurl插件能够解决资源对象多副本的问题,例如http://a.com/a.jpg和http://b.com/a.jpg “两个”不同的资源对象a.jpg是同一个文件的时候,缓存服务器却不会这么认为的,因为在缓存对象对比的时候会把url信息作为一个判断依据,由于它们这个url信息不一致,所以缓存服务器默认是判定为不同的两个文件。为了让这种多副本资源对象能够缓存命中,所以需要cacheurl这样功能的插件进行处理,可以简单地认为cacheurl就是把缓存对象的缓存url信息进行了修改再存储,因此我们需要自定一些规则来匹配这类的多副本资源对象,然后指明需要转化成什么格式的url形式。 cacheurl的配置比较简单,前面一部分是匹配规则,后面一部分是转化规则。

在线视频真实url的抓取分析

http抓包工具有很多种,用哪一种都可以,这里举例firebug插件的抓取分析方式。下图为firebug插件的界面图。

ats1

需要点击“网络”选项卡,点击“所有”选项,第一次使用需要在此界面点击启用其功能。 从firebug工具图中可以看到http抓包信息类型:“URL”、“状态”、“域”、“大小”等等。 然后就可以开始观看一个视频,待有一定缓冲量之后观察firebug抓包面板,可以点击“大小”按照由大到小的顺序排列,文件大小超过M的一般就是视频分段文件了。如下图。

ats2

点开其中一条抓包信息查看。

ats3

(上图是在没有使用代理的情况下截图)可以看到请求头、响应头的详细信息,最重要的是可以获取到视频的真实URL地址。右键上图中红色标示的地方可以复制出来完整的视频URL地址。类似如下:
http://60.217.245.14/youku/6771E93049E4E8434ED97D5E87/030008030051D77DF9D3B408BD8A9815151B3D-6B58-547B-517E-01E8B2BB5FC1.mp4

视频url特点的分析

由于视频网站都是有运用CDN技术的,大型的CDN技术运用都使用了智能调度,所以用户的请求并不是固定从一个服务器上获取资源内容。例如多次观看同一个视频可能会出现的情况是视频URL地址不一致,这也是属于资源多副本的一种情况。通过一段时间的重复观察与分析,抓住其不变并且唯一标示资源的部分,了解其变化的部分,就可以进行下一步的写转化规则了。 下面我构造一个例子,

http://60.217.245.14/youku/6771E93049E4E8434ED97D5E87/030008030051D77DF9D3B408BD8A9815151B3D-6B58-547B-517E-01E8B2BB5FC1.mp4

http://52.27.25.46/youku/65BGE93FD667FFDKI87735DSM0/030008030051D77DF9D3B408BD8A9815151B3D-6B58-547B-517E-01E8B2BB5FC1.mp4

其实是不同时候观看的同一个视频分段,分析后会发现其文件名是不变的,会变的是ip和中间的一段内容,但是其格式形式是不变的。

在线视频url正则的基本构建方法

有了上面的分析之后,就剩下正则表达式的构造工作了。这里不解释正则表达式,正则不是一时半会就能解释清楚的,再说我也就懂那点简单的。 那根据cacheurl的配置方式前面写匹配规则,后面写转化规则就行了。 匹配规则写为:

http://[[:digit:]]{1,3}\.[[:digit:]]{1,3}/youku/.*/(.*-.*-.*-.*-.*)

上面这个匹配规则就是相当告诉cacheurl如果能匹配上这个规则就按照后面的配置格式进行转化。那我们写转化规则如下: http://www.youku.com/$1 $1 取的是前面匹配规则的第一个()里面的内容。 那上面一小节举例的url都会被转化为如下:

http://www.youku.com/030008030051D77DF9D3B408BD8A9815151B3D-6B58-547B-517E-01E8B2BB5FC1.mp4

然后在缓存这个视频对象的时候url信息写的就是这条转化后的。后面的视频匹配规则之后进行了转化再跟缓存中的对比,这样就能够缓存命中了。

cacheurl插件对处理视频缓存的局限

在实际运用中,在线视频的url形式没有此文例子的这么简单,而cacheurl只能处理图1中url2处的url信息,如果需要很好地处理在线视频缓存,个人分析认为还需要能够处理url3处(即回源url)信息功能的新插件。

注:为了便于讲解,如上规则都是挑比较简单的。剩下的事情就靠大家发挥了。

如何分析并构造cacheurl正则实现视频缓存的更多相关文章

  1. 详解使用双缓存解决Canvas clearRect引起的闪屏问题

    这篇文章主要介绍了详解使用双缓存解决Canvas clearRect引起的闪屏问题的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. HTML5 播放 RTSP 视频的实例代码

    目前大多数网络摄像头都是通过 RTSP 协议传输视频流的,但是 HTML 并不标准支持 RTSP 流。本文重点给大家介绍HTML5 播放 RTSP 视频的实例代码,需要的朋友参考下吧

  3. 利用Node实现HTML5离线存储的方法

    这篇文章主要介绍了利用Node实现HTML5离线存储的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. 浅析HTML5中的download属性使用

    这篇文章主要介绍了浅析HTML5中的download属性使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  5. HTML5 Web缓存和运用程序缓存(cookie,session)

    这篇文章主要介绍了HTML5 Web缓存和运用程序缓存(cookie,session),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  6. HTML5 Blob 实现文件下载功能的示例代码

    这篇文章主要介绍了HTML5 Blob 实现文件下载功能的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  7. 详解前端HTML5几种存储方式的总结

    本篇文章主要介绍了前端HTML5几种存储方式的总结 ,主要包括本地存储localstorage,本地存储sessionstorage,离线缓存(application cache),Web SQL,IndexedDB。有兴趣的可以了解一下。

  8. web字体加载方案优化小结

    这篇文章主要介绍了web字体加载方案优化小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  9. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  10. ios – 加载空白页面的SFSafariViewController

    我正在使用SFSafariViewController在我的iOS应用程序中打开一个URL..它在iOS9上完美运行但在将我的设备更新到iOS10后,它只是在地址栏中加载了一个没有URL的空白页面.甚至safariViewController(控制器:SFSafariViewController,didCompleteInitialLoaddidLoadSuccessfully:Bool)在控制器

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部