天天看点

Failed to find a valid digest in the ‘integrity‘ attribute for resource解决办法

Failed to find a valid digest in the ‘integrity‘ attribute for resource解决办法

被这个错误坑了好多天

前提:框架Blazor

项目在本地运行没问题,发布到服务器后,报错在资源的“完整性”属性中找不到有效摘要

找解决办法的过程中开始以为是跨域资源共享和子资源完整性问题,详见:https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity#cross-origin_resource_sharing_and_subresource_integrity

使用以下

<script>

元素来告诉浏览器,在执行

https://example.com/example-framework.js

脚本之前,浏览器必须首先将脚本与预期的哈希进行比较,并验证是否存在匹配项。

在报错的_frameworkjs里设置了integrity值和跨域请求

<script src="_framework/blazor.webassembly.js" integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"

        crossorigin="anonymous"></script>

但是没有效果,遂删

又试了其他博主的办法:

    <!-- Bootstrap CSS -->

  <link rel="stylesheet" href="assets/css/bootstrap.min.css" target="_blank" rel="external nofollow" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">

去掉 integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous"

全局搜了下,项目里没有设置integrity的地方且不可能一个个去设置

最后解决办法:

在项目csproj下属性PropertyGroup下加一句属性BlazorCacheBootResourcess设置为false,禁用非PWA应用程序的完整性检查

<PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <BlazorCacheBootResources>false</BlazorCacheBootResources>
  </PropertyGroup>
           

BlazorCacheBootResources

也禁止Blazor的高速缓存的缺省行为

.dll

.wasm

根据他们的SHA-256散列和其他文件,因为属性指示SHA-256散列不能在正确性依赖。即使使用此设置,浏览器的常规HTTP缓存仍可能会缓存那些文件,但是是否发生这种情况取决于您的      Web服务器配置及其所

cache-control

服务的标头。

解决文档地址:https://docs.microsoft.com/en-us/aspnet/core/blazor/host-and-deploy/webassembly?view=aspnetcore-5.0

如此设置后,成功解决。