稳定是运维的基础,安全是运维的保障,优化是永恒的主题。
近期,一个叫bapi的接口返回了二进制数据,每日流量100GB,是个优化的好对象。
最开始的策略是,通过logcli发现该接口的日志中的download信息,然后调用123pan.py脚本上传到123pan,并更新本地nginx附加配置并上传,然后检查nginx配置并重新加载。
经过研发的检查,发现文件可以下载,但是文件名称错误,无法正常使用,导致APP也无法使用。
下班后,优化了return 301的写法,加入了$request_uri
。
第二天测试,依旧不行。
询问app下载的filename来源何处。答曰“Content-Disposition”。
擦,这个字段是http header头中的信息。连叹 厉害。居然有这种操作。下面是关于该头信息的详细解读。
在 HTTP 协议中,Content-Disposition 是一个头部字段,它用于在 HTTP 响应中指示资源的处理方式。这个头部主要用于 Web 服务器向浏览器传输数据时,告诉浏览器如何显示内容或者如何处理文件。
Content-Disposition 头部最常见的用法是在文件下载过程中,它可以指示浏览器下载文件而不是显示它。例如,当你点击一个链接下载 PDF 或者图片文件时,服务器会在响应中包含一个 Content-Disposition 头部,告诉浏览器这是一个需要下载的文件。
这个头部有两种主要的形式:
Inline(内联): 这表明响应的内容应该直接在浏览器中显示,如果可能的话。例如,如果响应是一个图片,它将直接在浏览器中显示出来。
示例: Content-Disposition: inline
Attachment(附件): 这表明响应的内容应该被视为下载的文件。通常,浏览器会弹出一个“另存为”对话框,让用户选择如何保存文件。
示例: Content-Disposition: attachment; filename="filename.jpg"
在 attachment 类型中,你可以使用 filename 参数指定一个默认的文件名。这个文件名会在用户下载文件时被提议使用,但用户可以选择更改它。
总的来说,Content-Disposition 是一个非常有用的工具,用于控制内容是被直接显示还是作为附件下载。
既然这样,使用123pan享受0.05元/GB流量的想法是泡汤了。123pan网站是下载分发站,不是CDN站。
此路不通,再找一路。
查询了华为云CDN对于该http头部信息的支持情况:
如此一来,甚是高兴呀。
使用华为云CDN服务,简单配置后,进行测试,果然看到了“Content-Disposition”字段。
后来又开启了https。吐槽一下,华为对于证书链的要求简直了,还得用证书链补全网站。
再后来,就看到了源站流量变小,CDN流量变大。
再后来,买了1TB全时流量。
再后来,用户电话干过来了。系统报错。
分析后,发现华为云CDN在支持https的时候,默认不支持TLS1.0。
无奈,先临时切到了源站服务。