最近几个月我发现挂cloudflare的网站没法像以前那样随便在线观看视频了🤔而在别的软件上,cloudflare视频也呈现出极其不乐观的效果,比如mpv里尽管能看但没法拖进度条,aria2c会报错:
-> [HttpResponse.cc:86] errorCode=8 Invalid range header. Request: 985661440-1016070143/3888677743, Response: 0-3888677742/3888677743
只有wget暂时正常🤔
thonk
我对此的猜测是cloudflare故意干扰了Range这个http header的实现,比如就像上述的aria2c报错提示那样,它的某个线程需要文件里的某段,但cloudflare居然无视这个Range请求,返回了整个文件🤔这样,基本上可以认为走cloudflare代理下载的文件和搜书盘一样,多线程名存实亡了(悲🤔当然,搜书盘靠一个php向浏览器或者别的http客户端不停喂文件内容,那就更别想用Range了(🤔
但为什么cloudflare要这么做?在我拿aria2c的报错搜索的时候,我发现了这个帖子,大致意思是cloudflare不再允许用户直接cache视频了,除非买他们的付费服务🤔大草,看来这玩意八成只能这样了,因为它完全砍掉了白嫖用户的Range支持(悲🤔还好如果网络条件足够好的话(比如双方都是在美国的vps),cloudflare单线程传输文件也是没啥问题的,实测wget都能达到⑨0MB/s,这说明它至少不屑于限速🤔
barbruh
与此同时我发现搜书盘那个小学文化的站长,居然会改程序,这样那些使用空间爆掉的账号,它上传文件的时候再也收不到返回文件上传到哪儿了的json结果🤔现在好了,白嫖搜书盘的好时代,真tm结束了(悲🤔
另外纯静态blog现在理论上来说可以用搜书盘实现了🤔比如它可以用aes加密文章内容,然后将解密的js函数和加密后的玩意扔进一个html文件里面,然后将这个html扔进搜书盘(当然你要是能用rsa也可以🤔但解密用的密钥可以放进cloudflare worker的脚本里面🤔当用户每次访问这个纯静态blog时,cloudflare worker脚本只需要像我们之前撸的搜书盘脚本一样获取这个文件,然后对里面的内容做一次替换,将html里的某个占位符替换成解密用的密钥,再返回即可(确信🤔
现在最难的是如何确保它能在返回前对里面的内容完成替换?🤔
thonkbitte
我大致了解了下,目前流行的静态blog系统是种怎样的玩意🤔具体来说,它们的思路是将源文件以md的形式本地存储,然后用某种渲染工具将其渲染成html,套上某种主题模板(相当于wp主题里的相关词条),然后用git的方式将这一系列渲染好的html文件上传到github pages里,然后在那儿绑域名,完成展示🤔当然,也有更加高级的版本,利用github本身来存放源文件,然后用github action来完成渲染并上传的任务,它可以被设置成存放源文件的repo完成一次提交(修改或者新增一次源文件),就开始渲染一次,这样,它的使用体验就和wp这种动态blog没啥区别了,毕竟github可以在线使用,而且好像也有集成md编辑器(确信🤔
至于评论?用第三方评论平台实现,或者接着白嫖github🤔
但这和我上面说的静态blog貌似不太一样,我想实现的玩意是将几百篇文章塞进一个html文件里面,然后用js函数来控制哪些文章被展示出来,甚至完成文章关键词检索🤔换句话说,可能相当于用js来实现一遍动态blog,它从服务器交互方面看是静态的,但从实际能做的事来看是动态的(比如那些渲染好html的静态blog就没法实现全站检索,但我这个可以🤔
反正现在浏览器已经变得极其强大了,估计塞100MB的文章都能随便检索🤔
https://iainbean.com/posts/2020/your-blog-doesnt-need-a-javascript-framework/
thonk2
我对上次写的用来搞搜书盘的cloudflare worker脚本做了一些改进:
- 和之前将文件url解析出来之后直接return那个url的请求不同,这次我用了一个response变量接受了它返回的结果🤔
-
然后我再对它执行了一次await,提取出了它的text部分🤔具体来说text()这个函数返回的是一个promise,所以前面需要await一次🤔
-
然后对这个text(现在也许已经是string对象了罢)进行替换,比如将某个占位符替换成密钥啥的🤔
当然,如果这个静态blog上面的文章刚好是用来介绍这种技术的,而且出现了示例代码,那么它会不会把示例代码里的占位符也给替换了?🤔面对这种meta情形,恐怕只能整个其他占位符了🤔或者,可以把占位符设置成某个文件的sha512值,只要这个文件不是那种全网都有的玩意,它就没什么可能会出现在文章的任何位置🤔算了吧我上文都在放屁,文章本身在html文件里面的存在形式是aes加密后的密文,怎么可能会出现和占位符一毛一样的字符串(确信🤔 -
接下来用这个替换之后的text变量和上一个response构造一个新的response对象,如果我没记错的话应该是
response2 = new Response(text, response)
,非常简单🤔 -
对这个新的response做些header处理,比如删掉content-disposition头(不然它肯定会作为附件来强行下载,而非作为html被浏览器解析),删掉它如果有的content-type头,加一个代表html的content-type头,然后return🤔
这样,它就能用搜书盘来做源,然后完成加密html的处理了🤔最后实现的效果是存放在搜书盘的东西是一坨加密后的代码,和一个密钥为占位符的js解密脚本,而读者打开的html文件是一坨加密后的代码,和一个填了正确密钥的js解密脚本🤔
但这样的话,不禁让人产生另外一个疑问:如果我在cloudflare worker脚本里面写解密过程呢?🤔也是可以的,而且这样我还可以免得学js了(因为css就可以做到将几百篇文章塞进一个html里面🤔只不过文件一大的话,恐怕它运行会超时,还不如让用户的浏览器来做这事🤔