稳定是运维的基础,安全是运维的保障,优化是永恒的主题。

近期,一个叫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头部信息的支持情况:
2024-01-10T03:13:58.png

如此一来,甚是高兴呀。

使用华为云CDN服务,简单配置后,进行测试,果然看到了“Content-Disposition”字段。
2024-01-10T03:15:19.png

后来又开启了https。吐槽一下,华为对于证书链的要求简直了,还得用证书链补全网站

再后来,就看到了源站流量变小,CDN流量变大。

再后来,买了1TB全时流量。
2024-01-10T03:19:59.png

再后来,用户电话干过来了。系统报错。
2024-01-10T03:18:00.png

分析后,发现华为云CDN在支持https的时候,默认不支持TLS1.0。
2024-01-10T03:18:16.png

无奈,先临时切到了源站服务。
2024-01-10T03:18:32.png

最后修改:2024 年 05 月 11 日
如果觉得我的文章对你有用,请随意赞赏