Linux
分类: LINUX
2015-07-02 11:19:56
为了思考在有代理缓存服务器的情况下,url有哪几种状态存在,所以按照自己的理解画了一个图,不一定准确,仅作一部分的理解参考。下面很多内容是个人理解的,不保证准确,如有错漏,请指出。
上图:
几个状态的url在图中已经有大概的说明。cacheurl插件能够处理的是图中的url2,即缓存时候的url。
cacheurl插件能够解决资源对象多副本的问题,例如和 “两个”不同的资源对象a.jpg是同一个文件的时候,缓存服务器却不会这么认为的,因为在缓存对象对比的时候会把url信息作为一个判断依据,由于它们这个url信息不一致,所以缓存服务器默认是判定为不同的两个文件。为了让这种多副本资源对象能够缓存命中,所以需要cacheurl这样功能的插件进行处理,可以简单地认为cacheurl就是把缓存对象的缓存url信息进行了修改再存储,因此我们需要自定一些规则来匹配这类的多副本资源对象,然后指明需要转化成什么格式的url形式。
cacheurl的配置比较简单,前面一部分是匹配规则,后面一部分是转化规则。
http抓包工具有很多种,用哪一种都可以,这里举例firebug插件的抓取分析方式。下图为firebug插件的界面图。
需要点击“网络”选项卡,点击“所有”选项,第一次使用需要在此界面点击启用其功能。
从firebug工具图中可以看到http抓包信息类型:“URL”、“状态”、“域”、“大小”等等。
然后就可以开始观看一个视频,待有一定缓冲量之后观察firebug抓包面板,可以点击“大小”按照由大到小的顺序排列,文件大小超过M的一般就是视频分段文件了。如下图。
点开其中一条抓包信息查看。
(上图是在没有使用代理的情况下截图)可以看到请求头、响应头的详细信息,最重要的是可以获取到视频的真实url地址。右键上图中红色标示的地方可以复制出来完整的视频url地址。类似如下:
由于视频网站都是有运用CDN技术的,大型的CDN技术运用都使用了智能调度,所以用户的请求并不是固定从一个服务器上获取资源内容。例如多次观看同一个视频可能会出现的情况是视频url地址不一致,这也是属于资源多副本的一种情况。通过一段时间的重复观察与分析,抓住其不变并且唯一标示资源的部分,了解其变化的部分,就可以进行下一步的写转化规则了。
下面我构造一个例子,
和
其实是不同时候观看的同一个视频分段,分析后会发现其文件名是不变的,会变的是ip和中间的一段内容,但是其格式形式是不变的。
有了上面的分析之后,就剩下正则表达式的构造工作了。这里不解释正则表达式,正则不是一时半会就能解释清楚的,再说我也就懂那点简单的。
那根据cacheurl的配置方式前面写匹配规则,后面写转化规则就行了。
匹配规则写为:
http://[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}/youku/.*/(.*-.*-.*-.*-.*)
上面这个匹配规则就是相当告诉cacheurl如果能匹配上这个规则就按照后面的配置格式进行转化。那我们写转化规则如下:
$1 取的是前面匹配规则的第一个()里面的内容。
那上面一小节举例的url都会被转化为如下:
然后在缓存这个视频对象的时候url信息写的就是这条转化后的。后面的视频匹配规则之后进行了转化再跟缓存中的对比,这样就能够缓存命中了。
在实际运用中,在线视频的url形式没有此文例子的这么简单,而cacheurl只能处理图1中url2处的url信息,如果需要很好地处理在线视频缓存,个人分析认为还需要能够处理url3处(即回源url)信息功能的新插件。
注:为了便于讲解,如上规则都是挑比较简单的。剩下的事情就靠大家发挥了。