我正在为我的项目开发一个媒体服务器,用于提供流式音频文件。我已经设置了一个缓存系统,这样就不会对Google云端存储进行太多限制。
但我注意到Chrome发送了两个正确流式传输的请求,第一个请求开始流式传输整个文件,但Chrome忽略了这一点,因为服务器发送了Accept字节标头,并发送了另一个字节范围为{{1的请求这意味着再次流式传输整个文件。
直接从Google云端存储中传输流(未缓存时),但我担心这种行为可能会造成浪费,我想找到一种规避它的方法。
我尝试了以下内容:
在第一个请求中,如果不存在字节范围标头,则只需发送空数据,不要启动流。这似乎在Chrome中有效,但是像Firefox这样的其他浏览器无法传输音频。
如果没有字节范围标头,则在第一个请求中仅传输一小部分。这也无效,导致Chrome认为该流已损坏。我假设这是因为mp3标题。
目前处理请求的代码看起来像这样(从不相关的代码中提取):
0-
请注意,此后调用的中间件是发送流的内容。
有没有办法检测Chrome何时放弃第一个请求然后停止流,这是否会影响到Google云端存储的网络使用?
答案 0 :(得分:2)
Google Cloud Storage only charges for network egress that was actually sent over the wire. If the client cancels a download and ends the TCP connection, the Cloud Storage server will detect that and stop sending bytes, so no additional network usage will be incurred.