Loading... 稳定是运维的基础,安全是运维的保障,优化是永恒的主题。 近期,一个叫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][1] 如此一来,甚是高兴呀。 使用华为云CDN服务,简单配置后,进行测试,果然看到了“Content-Disposition”字段。 ![2024-01-10T03:15:19.png][2] 后来又开启了https。吐槽一下,华为对于证书链的要求简直了,还得用[证书链补全网站][3]。 再后来,就看到了源站流量变小,CDN流量变大。 再后来,买了1TB全时流量。 ![2024-01-10T03:19:59.png][4] 再后来,用户电话干过来了。系统报错。 ![2024-01-10T03:18:00.png][5] 分析后,发现华为云CDN在支持https的时候,默认不支持TLS1.0。 ![2024-01-10T03:18:16.png][6] 无奈,先临时切到了源站服务。 ![2024-01-10T03:18:32.png][7] [1]: https://www.sddts.cn/usr/uploads/2024/01/326358039.png [2]: https://www.sddts.cn/usr/uploads/2024/01/77878618.png [3]: https://myssl.com/chain_download.html [4]: https://www.sddts.cn/usr/uploads/2024/01/3570878516.png [5]: https://www.sddts.cn/usr/uploads/2024/01/984383228.png [6]: https://www.sddts.cn/usr/uploads/2024/01/2411870064.png [7]: https://www.sddts.cn/usr/uploads/2024/01/4250567677.png 最后修改:2024 年 05 月 11 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏