首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Angular 7服务工作者缓存音频文件导致safari中的range头问题

Angular 7服务工作者(Service Worker)是一种用于实现离线缓存和提供更好性能的技术。在使用Angular开发的Web应用中,可以利用Service Worker来缓存音频文件以提高加载速度和用户体验。

在Safari浏览器中,由于其对Range请求的限制,可能会导致服务工作者缓存的音频文件无法在某些情况下正常播放。Range请求是一种用于请求文件的一部分内容的HTTP请求,Safari对于在范围请求中使用非0起始位置的情况有限制。

解决这个问题的方法是使用服务工作者拦截音频文件的请求,并在每个请求中移除Range头。这样可以避免Safari浏览器对Range请求的限制,并确保音频文件可以正常加载和播放。

以下是一个实现的示例代码:

代码语言:txt
复制
// app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HttpClientModule, HttpClientXsrfModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { ServiceWorkerModule, SwUpdate } from '@angular/service-worker';
import { environment } from '../environments/environment';

import { AppInterceptor } from './app.interceptor';

@NgModule({
  imports: [
    BrowserModule,
    HttpClientModule,
    HttpClientXsrfModule,
    ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production })
  ],
  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: AppInterceptor,
      multi: true
    }
  ],
  bootstrap: [AppComponent]
})
export class AppModule {
  constructor(private swUpdate: SwUpdate) {
    if (this.swUpdate.isEnabled) {
      this.swUpdate.available.subscribe(() => {
        if (confirm('New version available. Load New Version?')) {
          window.location.reload();
        }
      });
    }
  }
}
代码语言:txt
复制
// app.interceptor.ts
import { Injectable } from '@angular/core';
import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';

@Injectable()
export class AppInterceptor implements HttpInterceptor {
  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const clonedRequest = req.clone({
      headers: req.headers.delete('Range')
    });

    return next.handle(clonedRequest).pipe(
      tap((event: HttpEvent<any>) => {
        if (event instanceof HttpResponse && event.url.endsWith('.mp3')) {
          // 缓存音频文件逻辑
        }
      })
    );
  }
}

在上面的示例中,我们创建了一个名为AppInterceptor的拦截器,它会拦截所有的HTTP请求。在拦截器中,我们通过克隆请求并移除Range头,以解决Safari中的问题。同时,我们可以在拦截器中添加其他逻辑来实现对音频文件的缓存。

请注意,示例代码中的缓存音频文件逻辑需要根据具体的需求进行实现,并不是Angular框架提供的功能。

对于腾讯云相关的产品和服务,可以考虑使用腾讯云对象存储(COS)来存储和分发音频文件,使用腾讯云CDN来加速音频文件的加载。具体关于腾讯云COS和CDN的详细介绍和使用方法,请参考以下链接:

以上是关于Angular 7服务工作者缓存音频文件导致Safari中的Range头问题的答案。希望对您有帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

关于请求被挂起页面加载缓慢问题追查

这也正是本文将要展开。 下面是另外一些被提出来可能性。 Angular Angular首当其冲。为什么,因为这个问题出现在后台MIS系统,且这些系统多用Angular开发。...Angular :怪我咯。 因为问题多出现在基于AngularMIS系统,并且Angular性能一直是被诟病,所以听到不少声音将矛头指向Angular。这似乎没什么好庇护。...于是就产生了上面题主遇到情况。 所以他解决方法就很明朗了,对请求加个时间戳让其变得唯一,或者服务器响应设置为无缓存。Both will work! 那么我们问题也会是这样么?...在第三次尝试时候正常了,于是正确返回,我们才看到了被解析响应被展示在了下面。也就是说在出问题时候要么响应未拿到,要么响应非法导致解析不成功。而原因就是链接被重置。...「进一步解读日志文件」部分,来自Chromium开发者回复对日志文件解读更加合理些,浏览器与服务连接不正常断开是导致问题根源,以至于影响了后面对连接重用 21秒等待仍然是个未知数,不知道有何不可抗拒外力促使浏览器

4.8K20

React 16 加载性能优化指南(上)

有人可能要质疑,把 css 打入 js 包里,会丢失浏览器很多缓存好处(比如你只改了 js 代码,导致构建出 js 内容变化,但连带 css 都要一起重新加载一次),这样做真的值得吗?...头中设置一个过期时间,在这个过期时间之前,浏览器请求都不会发出,而是自动从缓存读取文件,除非缓存被清空,或者强制刷新。...缺陷在于,服务器时间和用户端时间可能存在不一致,所以 HTTP/1.1 加入了 cache-control 来改进这个问题。..."D5FC8B85A045FF720547BC36FC872550" 原理类似,服务器端返回资源时,如果头部带上了 etag,那么资源下次请求时就会把值加入到请求 if-none-match 服务器可以对比这个值...componentD 这就保证了所有公用模块,都会被抽出成为独立包,几乎完全避免了多页应用,重复加载相同模块问题

1.7K50
  • 10 种 JavaScript 最常见错误

    接下来,让我们深入到每一个错误,来了解是什么会导致它,以及如何避免这个问题。...您可以在 Safari Developer Console 轻松测试。这与第一点提到 Chrome 错误基本相同,但 Safari 使用了不同错误消息提示语。 ?...3、 TypeError: null is not an object 这是在 Safari 读取属性或调用空对象上方法时发生错误。...原因应该是清楚,即执行上下文不理解导致指向错误。 7、 Uncaught RangeError 当你调用一个不终止递归函数就会发生这种错误。您可以在 Chrome 开发者控制台中进行测试。 ?...Vue 相关文章输出计划 最近总有朋友问我 Vue 相关问题,因此接下来我会输出 10 篇 Vue 相关文章,希望对大家有一定帮助。我会保持在 7 到 10 天更新一篇。

    8.6K20

    2020前端性能优化清单(五)

    目前,服务器还没有一种简单方法得知被推送资源是否已经在用户某个缓存[39],因此每次用户访问时,资源都会被继续推送。所以,您可能需要创建一个缓存感知 HTTP/2 服务器推送机制[40]。...如果被获取,您可以尝试根据缓存已经存在内容索引从缓存获取它们,从而避免服务二次推送。...有一段时间,缓存摘要规范[41]被认为可以免除手动构建"缓存感知"服务需要,大体上,我们只需要在 HTTP/2 声明一个新框架类型来通知该主机名缓存已经存在内容。...Basel 探索了 Angular 连接感知组件[66] Theodore Vorilas 分享了如何使用 Vue 网络信息 API 为自适应组件提供服务[67] 46....有了 service worker 之后,我们需要注意 Safari range 请求[94](如果您为 service worker 使用了 Workbox,它有一个 range 请求模块)。

    2K20

    2018-06-20 HTTP相关知识关于Content-TypePOST常见数据提交类型关于HTTP关于MIME类型

    POST请求可能会导致资源建立和/或已有资源修改。 4 PUT 从客户端向服务器传送数据取代指定文档内容。 5 PATCH 用于对资源进行部分修改。...6 DELETE 请求服务器删除指定页面。 7 CONNECT HTTP/1.1协议预留给能够将连接改为管道方式代理服务器。 8 OPTIONS 允许客户端查看服务性能。...Cache-Control Cache -Control指定请求和响应遵循缓存机制。在请求消息或响应消息设置 Cache-Control并不会修改另一个消息处理过程缓存处理过程。...各个消息指令含义如下:Public指示响应可被任何缓存缓存;Private指示对于单个用户整个或部分响应消息,不能被共享缓存处理。...Range:用来告知服务器请求返回实体一个或者多个子范围。在一个 Range 首部,可以一次性请求多个部分,服务器会以 multipart 文件形式将其返回。

    1.9K20

    2020前端性能优化清单(四)

    但是,我们最终需要花费更长服务解析时间导致第一个字节到达时间也会加长,并且我们没有利用现代应用程序响应式功能和丰富其他功能。...在 Angular ,我们可以用 `@nguniversal`[19]把客户端请求转换成完全由服务端渲染你HTML页面。...出于安全性考虑,为了避免产生指纹,浏览器已实现了分区缓存[47],该技术在2013年 Safari 和去年 Chrome 引入。...因此,如果两个站点指向完全相同第三方资源 URL,则每个域都将代码下载一次,并且由于隐私问题缓存将存在关联域名“沙盒”(感谢David Calhoun!)。...经过604800秒后,缓存将重新获取请求内容,从而导致页面加载速度变慢。

    3.3K20

    HTTP_POST请求数据格式

    304代码,参数为服务器先前发送Etag,与服务器回应Etag比较判断是否改变 If-None-Match: “737060cd8c284d8af7ad3082f209582d” If-Range...参数也为Etag If-Range: “737060cd8c284d8af7ad3082f209582d” If-Unmodified-Since 只在实体在指定时间之后未被修改才请求成功 If-Unmodified-Since.../71.html TE 客户端愿意接受传输编码,并通知服务器接受接受尾加信息 TE: trailers,deflate;q=0.5 Upgrade 向服务器指定某种传输协议以便服务器进行转换(如果支持...表明服务器是否支持指定范围请求及哪种类型分段请求 Accept-Ranges: bytes Age 从原始服务器到代理缓存形成估算时间(以秒计,非负) Age: 12 Allow 对某网络资源有效请求行为...: Q2hlY2sgSW50ZWdyaXR5IQ== Content-Range 在整个返回体本部分字节位置 Content-Range: bytes 21010-47021/47022 Content-Type

    1.1K20

    CVE-2017-7529 Nginx整数溢出漏洞分析

    则是最后一个字节 Range:0-1024 #表示第0字节到第1024字节 Range:-300 #表示最后300字节 Nginx Cache nginx还可以当作一个缓存服务器,将web服务内容保存到服务..., 如果客户端请求内容已经有缓存了,那么可以直接将缓存内容返回,就需要再次请求服务器了,可降低应用服务负载 想开启这个功能,修改配置文件,反向代理某网站即可 http{ include mime.types...HIT,未命中则为MISS proxyignoreheaders由于百度对图片请求也会Set-Cookie设置,而Nginx不会缓存带有Set-Cookie返回,因此我们这里设置忽略该HTTP 那么我们用...去 /tmp/nginx查看缓存文件,可以看到,cache key内容保存在了里面,此外还有服务器信息,这些都是不会返回给客户端,但是因为这次漏洞而导致这些信息也被返回,导致信息泄露 ?...漏洞利用 这个漏洞由于负数偏移量,导致头部信息也给返回,导致信息泄露,也就是,构造一个恶意range值 先计算一个range值 查看文件值大小为, 7877 ?

    4.2K30

    前后端分离时代SEO实践经验

    ,这个插件是一个webpack插件,可以帮助我们在打包过程通过无浏览器去渲染我们页面,并生成对应HTML。...逐个路由预渲染:对于每个在配置中指定路由,我们插件都会执行下面的步骤:使用无浏览器打开路由:插件会将路由加载到无浏览器,就像一个真实浏览器会加载页面一样。...渲染引擎陈旧:PhantomJS使用渲染引擎基于WebKit,而现代浏览器已经使用了更先进渲染引擎。这可能导致一些网页在PhantomJS显示不正常。...性能开销:服务器渲染通常会导致更高服务器负载和性能开销,需要考虑缓存等性能优化策略。Next.js:Next.js 是一个React框架,用于构建服务器渲染React应用程序。...缺点:对初学者不友好:Next.js是基于React,如果不熟悉React,学习曲线可能会较陡峭。服务器负载:服务器渲染通常会导致更高服务器负载和性能开销,需要缓存等性能优化。

    79010

    浏览器缓存机制详解

    响应告诉缓存器不要保留缓存缓存器就不会缓存相应内容; 如果请求信息是需要认证或者安全加密,相应内容也不会被缓存; 校验参数非常重要,如果回应1个参数都不存在,并且没有任何信息说明保鲜期(Expires...缓存控制 Cache-Control Cache-Control 是最重要规则。这个字段用于指定所有缓存机制在整个请求/响应链必须服从指令。...另外,由于浏览器行为基本相同,这个属性是处理跨浏览器缓存问题最有效方法。 过期 (Expires) Expires 头部字段提供一个日期和时间,响应在该日期和时间后被认为失效。...不同浏览器有不同配置行为。表 7-10 表明针对不同用户操作不同浏览器行为。 表 7....另外,有些不该缓存内容如果被缓存,将会导致安全问题。 不同浏览器有不同行为。表 11 展示了不同浏览器行为。 表 11.

    65920

    .Net Web开发技术栈

    Winform MVVM 在.Net(主要应用于WPF、Silverlight、WP7) Prism - Brian Lagunas微软产品经理,微软MVP,一个跨平台桌面和移动MVVM开发框架,开源...Catel核心包含一个IoC容器,模型,验证,纪念,消息中介,参数检查等。 ... 在前端 Angular Vue Knockout React ......MIME信息) Accept:text/plain(指定客户端能够接收内容类型) Range:bytes=0-999(常用作断点续传,设置请求指定范围,服务器则返回Content-Range: bytes.../537.36(当前客户端信息) Expect:100-continue(握手失败,请求域类型不匹配,由此导致API接口调用失败) Response返回头 Connection: keep-alive...MVVM框架 实现一个简单js模板引擎 Angular 路由、模块化、控制器、指令、作用域、模板、链式函数、过滤器、服务、依赖注入...

    4.9K30

    谈谈前端性能优化

    作为一个前端开发者,前端性能优化问题是无可避免。比如,你使用 vue 去开发一个运营活动项目,首屏加载缓慢,你应该怎么办呢?又比如,你开发官网,你选择 ssr 还是 spa 呢?...我们以 Angular 前端框架为例: 编程,触发更改内容应该在 ngOnChanges 调用,而不是在 ngDoCheck 调用 订阅操作,应该在组件销毁时候 ngOnDestroy 取消订阅...接口处理 接口方面,可以考虑下面的处理方案: 避免同个接口多次发起请求 避免不必要接口请求 需要缓存数据,进行缓存,不需要发起二次请求 列表接口采用分页处理,避免一次性加载数据,从而造成系统卡顿...减少重绘和重排,他们会导致页面重新渲染 DOM 节点元素需要语义化,不能都一股脑使用 DIV 元素,这样不利于 SEO;起码在对外系统上要注重语义化处理 老生常谈点了:样式需要放在 ...Safari 浏览器对应时间轴面板,看个人爱好选择调试。其他浏览器对应性能分析面板自查。

    33220

    PHP网络技术(一)——HTTP协议

    常见UA: 搜狗浏览器-windows 7 X86:Mozilla/5.0(Windows NT 6.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome...区别客户端里可以有多个Cookie值,服务器只能有一个值。具体Cookie与Session问题,后面的章节再提。 5)Cache-Control 指定请求和响应遵循缓存机制。...HTTP缓存指我们用浏览器访问网站时,根据服务器返回HTTP缓存响应设置,缓存相应数据,下次访问就可以直接使用,或者去服务器验证数据是否过期。...7)Content-Length 该字段表示内容长度。 8)Content-Range 该字段表示响应资源范围,即断点续传,从文件已经下载地方开始继续下载。...在以前版本 HTTP 协议是不支持断点,HTTP/1.1 开始就支持了。一般断点下载时才用到 Range 和 Content-Range 实体

    1.2K60

    Python网络爬虫(一)- 入门基础1.通用爬虫 VS 聚焦爬虫2.HTTP & HTTPS3.urllib24.常用响应报头(了解)

    Cookie是在浏览器寄存小型数据体,它可以记载和服务器相关用户信息,也可以用来实现会话功能,以后会详细讲。 7....7.服务端HTTP响应 HTTP响应也由四个部分组成,分别是: 状态行、消息报头、空行、响应正文 4.常用响应报头(了解) 理论上所有的响应信息都应该是回应请求。...Expires:Sun, 1 Jan 2000 01:00:00 GMT 这个响应也是跟缓存有关,告诉客户端在这个时间前,可以直接访问缓存副本,很显然这个值会存在问题,因为客户端和服务时间不一定会都是相同...,如果时间不同就会导致问题。...所以这个响应是没有Cache-Control:max-age=*这个响应准确,因为max-age=datedate是个相对时间,不仅更好理解,也更准确。 7.

    1.6K40

    记录工作遇到各种问题(Bug,总结,记录)

    页面使用Angular.js(1),页面iframe初始设置src属性的话,会导致页面重新加载一次 例如设置一个初始值,某些操作之后再更改src <iframe src="#" class="export-iframe...在数据量大<em>的</em>时候,<em>Angular</em>.js(1)<em>中</em><em>的</em>input只要放到了$scope相关域之中,就一卡一卡<em>的</em> 知道了原因,是因为大数据量<em>的</em>页面<em>中</em>绑定太多,很多数据需要ng-bind,<em>导致</em>input一用上双向绑定就得检查所有数据...原因是<em>Safari</em>下<em>的</em>特殊性,<em>导致</em>解析失效,也是格式不标准<em>的</em><em>问题</em> 解决方法:日期和时间用 T 分隔即可,即把中间<em>的</em>空格换成T  更多 更多 56....入口主要是这个文件 当然,也可以不下载,直接使用mozilla提供<em>的</em>来使用,不过需要解决一下跨域<em>问题</em> 60. iframe <em>的</em> visibility hidden属性在<em>safari</em><em>中</em>失效 一个bug,解决办法是用...Mac<em>的</em><em>Safari</em><em>中</em>触发input[type="file"]点击失效 safari下会有很多安全性问题,关于文件选择项触发,原生文件选择框样式不太好修改,一般会隐藏掉然后用一个输入框代替,点击后再触发文件选择

    18.1K12

    ​​Android平台GB28181历史视音频文件回放规范解读及技术实现

    、快放、慢放、随机拖放等操作;6、Android GB28181设备侧在文件回放结束后发送会话内Message消息,通知SIP服务器回放已结束;7、国标平台侧收到媒体通知消息后做相应处理,之后国标服务侧向...媒体播放命令:客户端发送 PLAY 请求消息,请求服务器发送媒体。应支持 Range ,在 Range 头中给出播放时间范围,播放指定时间段媒体,时间范围应支持npt、smpte相对时间戳范围。...应答命令:客户端、服务器端应支持应答命令状态码200、4xx以及5xx。见IETFRFC2326。Scale和 Range域取值范围 Scale应支持基本取值为0.25、0.5、1、2、4。...Range 值为播放录像起点相对值,取值范围为 0 到播放录像终点时间,参数以s为单位,不能为负值。...比如Range 值为0,则表示从起点开始播放,Range值为100,则表示从录像起点后100s处开始播放,Range 取值为now表示从当前位置开始播放。

    1K70

    React 16 加载性能优化指南

    有人可能要质疑,把 css 打入 js 包里,会丢失浏览器很多缓存好处(比如你只改了 js 代码,导致构建出 js 内容变化,但连带 css 都要一起重新加载一次),这样做真的值得吗?...头中设置一个过期时间,在这个过期时间之前,浏览器请求都不会发出,而是自动从缓存读取文件,除非缓存被清空,或者强制刷新。...缺陷在于,服务器时间和用户端时间可能存在不一致,所以 HTTP/1.1 加入了 cache-control 来改进这个问题。... "D5FC8B85A045FF720547BC36FC872550" 原理类似,服务器端返回资源时,如果头部带上了 etag,那么资源下次请求时就会把值加入到请求 if-none-match 服务器可以对比这个值...现在,新 SplitChunksPlugin 会把它们打包成以下几个包: 这就保证了所有公用模块,都会被抽出成为独立包,几乎完全避免了多页应用,重复加载相同模块问题

    63210
    领券