【问题标题】:"CAUTION: provisional headers are shown" in Chrome debugger“注意:显示临时标头”在 Chrome 调试器中
【发布时间】:2014-02-06 06:44:42
【问题描述】:

在使用 Google chrome 检查器 (F12) 查看下载的资源时,我注意到一条奇怪的警告消息:

警告显示临时标题

我发现了一些可能相关的东西,Network Panel: add caution about provisional request headers,但我无法完全理解。相关问题可以在Chrome block requestsXMLHttpRequest cannot load. Unloaded resources show caution: Provisional headers are shown 找到。

first question类似,我的资源被阻塞了,但后来自动加载了相同的资源。与second question 不同,我不想修复任何东西;我想知道这条消息的含义以及我收到它的原因。

【问题讨论】:

  • 如果请求由于域切换而未发送,也会出现此问题,例如通过 ajax 从 www.domain.tld 向 domain.tld 发送数据,反之亦然。
  • @wvega 在此SO question 中发布了一个类似的问题,但对于此临时标头发送问题似乎没有任何可能的解释。有什么具体的解决方案吗?真烦人!我之前发布过这个问题。
  • @webblover wvega 有一个很好的解释。我实际上并不是在寻找解决方案。我很好奇一个原因。
  • 当我关闭它时它帮助了我:chrome://flags/#site-isolation-trial-opt-out
  • 阅读我的答案,它并不像看起来那么复杂:stackoverflow.com/questions/21177387/…

标签: google-chrome http http-headers google-chrome-devtools


【解决方案1】:

对于 chrome v72+,为我解决的只是这个:

转到 chrome://flags/ 并禁用这 3 个标志

  • 禁用站点隔离
  • 启用网络服务
  • 正在运行网络服务

或者您可以从命令行执行:

chrome --disable-site-isolation-trials --disable-features=NetworkService,NetworkServiceInProcess

为什么会这样?

Google 似乎正在将他们的 Chromium 引擎重构为模块化结构,其中不同的服务将被分成独立的模块和进程。他们称之为过程服务化。网络服务是第一步,Ui服务、Identity服务和Device服务接踵而至。谷歌在Chromium project site提供官方信息。

改变它有危险吗?

一个例子是网络:一旦我们有了网络服务,我们可以选择在进程外运行它以获得更好的稳定性/安全性,或者如果我们资源有限,则在进程内运行source

【讨论】:

  • 我能够通过“启用网络服务”和“在进程中运行网络服务”来实现此功能。
  • 我刚刚禁用了站点隔离,这对我有用。
  • 这在常规 Chrome (v74) 中有效,但是最新版本的 Chrome Canary (v76) 现在缺少“#network-service”标志...无法在 Canary 中使用没有它。
  • 我在localhost:8080google.com(!?) 都看到了这个问题。禁用站点隔离修复了 google.com,但不是 localhost。仅禁用其他两个选项可以解决所有情况。
  • 我只需要关闭它:chrome://flags/#site-isolation-trial-opt-out
【解决方案2】:

我在 AJAX URL 属性中发送参数时遇到了这个问题 http://10.165.10.160:82/services?param1=xxxx&param2=xxxx

如果要执行获取请求(例如发送参数化的 url),不要将它们添加到 url 属性中,而是在数据对象中执行

        <script>
        $.ajax({
        url: "http://10.160.10.160:82/services/STD_ERROR.php",
        data: {
            StatusText: StatusText,
            Status: Status,
            UserCode: UserCode,
            FUNC_CODE: FuncCode,
            ErrorDescription: ErrorDescription
        },
        type: "GET",
        crossDomain: true,
        cache: false
    }).done(data => {
        console.log(data)
    }).fail(function(xhr, status, error) {
        console.log(xhr.ErrorDescription)
    });
</script>

【讨论】:

    【解决方案3】:

    这可能是 CORS 问题。 尝试为你的 api 启用 CORS。

    对于 WebApi

      var cors = new EnableCorsAttribute("*", "*", "*");
                config.EnableCors(cors);
    

    【讨论】:

      【解决方案4】:

      这个header显示的原因是:你的请求没有发送到remote。

      通常是由

      1. 扩展程序阻止了您的请求
      2. Chrome 使用自己的缓存来获取您的资源

      Chrome 无法从尚未发出的请求中获取您的请求标头。

      最近的 chrome 版本表明这些:

      只有临时标头可用,因为此请求不是通过网络发送的,而是从本地缓存提供的, 它不存储原始请求标头。

      禁用缓存以查看完整的请求标头

      【讨论】:

        【解决方案5】:

        尝试使用 ctrl + shift +F5 重新加载页面,然后再次检查请求标头

        没有显示完整的标头,因为请求可能不会发送到服务器,而是直接从浏览器的缓存中提供服务,例如使用服务工作者

        【讨论】:

          【解决方案6】:

          我在 WordPress 中使用 LiteSpeed 缓存插件。在那里,我启用了浏览器缓存。禁用此功能对我有用。然后,后来我启用它以提高性能。

          【讨论】:

            猜你喜欢
            • 2019-09-01
            • 2014-02-28
            • 2014-02-18
            • 2014-03-05
            • 2014-04-01
            • 2019-08-08
            • 1970-01-01
            • 2014-11-16
            • 1970-01-01
            相关资源
            最近更新 更多