前几天和同事在讨论一个问题,用户若是利用 Flashget 等分割软体下载档案,这样对主机的负担不是很重,是不是要考虑禁止用户这样使用呢?估且先不管使用上的问题,想了一下若是真的要禁止分割下载,该用什么方式来做呢?
简单点就是利用 mod_limitipconn 来限制每个 IP 所能同时对各网站的连线数,但若是你设 1 ,就会影响到用户若一边下载,不就无法一边继续浏览网站,这个方式虽然有调整的范围,但是要这么累的针对各种情况去做设定,实在是很没有效率。因此换各方向看,HTTP/1.1 协定本身的 Range ,就是用来提供分割下载的主要部份,Byte Ranges 指的就是整个 Html Body 的某个 sequence,而利用 Range Retrieval Request 向 HTTP Server 请求冇个 Range 的资料,来达到分割下载,所以为了要让主机不理会或处理这种请求,可以使用 mod_header,,利用 mod_header 设定 Header unset Accept-Ranges 不送这个 Header,或是 Header set Accept-Ranges: none 来将它设为 none。这样一来 Http Server 本身就不会再处理这种分割下载的请求,但也不会影响用户一般网站浏览的动作了。
Http/1.1 中 Range 的部份可以参考 RFC 这里。