首页 文章

“小心:Chrome调试器中显示了临时 Headers ”

提问于
浏览
296

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

注意显示临时 Headers

enter image description here

我找到了可能相关的东西,但我无法完全理解它 . 相关问题可以在Chrome block requests以及XMLHttpRequest cannot load. Unloaded resources show caution: Provisional headers are shown找到 .

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

30 回答

  • 0

    使用HSTS保护网站时,可能会出现此消息 . 然后,当有人链接到HTTP的HTTP版本时,浏览器(如HSTS的指示)不会发出HTTP请求,而是在内部安全地重定向到HTTPS资源 . 这是为了避免HTTPS降级攻击,例如sslstrip .

  • 8

    资源可能被扩展程序阻止(在我的情况下是AdBlock) .

    消息是存在的,因为从未进行过检索该资源的请求,因此显示的 Headers 不是真实的 . 如您引用的问题中所述,实际标头在服务器响应时会更新,但如果请求被阻止则没有响应 .


    我发现阻止我的资源的扩展的方式是通过Chrome中的net-internals工具:

    • 在地址栏中输入 chrome://net-internals 并按Enter键 .

    • 打开显示问题的页面 .

    • 返回net-internals,单击 events (###) 并使用文本字段查找与您的资源相关的事件(使用URL的部分) .

    • 最后,点击事件,看看显示的信息是否告诉你一些事情 .

  • 1

    我相信在没有发送实际请求时会发生这种情况 . 通常在加载缓存资源时发生 .

  • 1

    我遇到了这个问题,我设法确定了一个具体的原因,上面没有在答案或问题中提到 .

    我在SSL上运行完整的js堆栈,角度前端和节点后端,并且API在端口8081上运行的不同域上,所以我正在执行CORS请求和withCredentials,因为我从API中删除会话cookie

    具体来说,我的方案是:POST请求,withCredentials到端口8081导致检查器中出现“小心:显示临时 Headers ”消息,当然也阻止了所有请求 .

    我的解决方案是设置apache来代理将请求从443的通常SSL端口传递到8081的节点SSL端口(节点必须位于更高的端口上,因为它不能在prod中以root身份运行) . 所以我猜Chrome不喜欢SSL请求非常规SSL端口,但也许他们的错误信息可能更具体 .

  • 1

    HTTP/2 Pushed resources 将在检查器中生成 Provisional headers are shown ,其理论与his answer above中发布的@wvega相同 .

    e.g: 由于服务器将资源推送到客户端(在客户端请求它们之前),浏览器将缓存资源,因此客户端永远不会发出/需要请求;因为......

    ...在服务器响应时更新真实标头,但如果请求被阻止则没有响应 .

  • 1

    我怀疑我的答案是及时帮助你,但其他人可能会觉得它有帮助 . 我遇到了与我创建的jQuery Ajax Post脚本类似的问题 .

    事实证明我在A标签的href属性中有一个拼写错误,我用它来发布帖子 . 我输入了href =“ javacsript :;” (反转's'和'c')..这导致脚本在帖子尝试触发时尝试刷新页面 . 纠正了错字,它对我来说非常好 .

  • 3

    我的情况是 cross-origin 相关 .
    Situation: 浏览器在发送真实请求(如 GETPOST )之前发送 OPTIONS 请求 . 后端开发人员忘记处理 OPTIONS 请求,让它通过服务代码,使处理时间过长 . 比我在 axios 初始化中写的超时设置长,这是5000毫秒 . 因此,无法发送实际请求,然后我遇到了 provisional headers are shown 问题 .
    Solution: 当涉及 OPTIONS 请求时,后端api只返回结果,它使请求更快,并且可以在超时之前发送实际请求 .

  • 0

    我遇到了一个永远无法完成的AJAX调用 . 我遵循了wvega的建议并提示调试 chrome://net-internals 以最终确定页面中的另一个 click 事件处理程序,监听父节点,导致浏览器导航到同一个URL(因此不容易注意到) .

    解决方案是在表单提交按钮的 click 处理程序中添加 event.stopPropagation() ,以防止点击冒泡DOM并取消正在进行的AJAX请求(通过 form 上的 submit 处理程序启动) .

  • 0

    我最近(事实上今天)我已经有了这个,我有一个AJAX呼叫转到服务器,Chrome将触发“警告:显示临时标头” . 在服务器端PHP脚本中,根据给定的场景,有几个MySQL查询可以非常即时或需要几秒钟 . 在查询完成之前,我的服务器响应不会发送回浏览器 . 我发现只有在耗时的查询(总共几秒钟)完成时才会收到此错误并阻止响应被发回 .

    我的场景涉及通过添加/删除数百个天气模型输出列来改变表格的极少数可能性...因此,迭代通过ALTER TABLE查询循环的响应滞后 .

  • 1

    在我的情况下,它只是一个错误的设置路径到资源(svg / img)

  • 1

    当我发送无效的HTTP授权标头时,我遇到此问题 . 我忘了base64编码了 .

  • 2

    这可能是因为您发出了Ajax请求,但现在您使用location.href或类似的东西将页面跳转到另一个页面 . 因此预览请求失败 .

  • 2

    如果响应无效并因此被浏览器删除,则也会出现此警告消息 .

    在我的情况下,请求被正确发送到服务器,服务器端代码然后产生错误,我的自定义错误处理返回HTTP状态消息字段中的错误消息 . 但是由于错误消息中的无效字符(此处描述为http://aspnetwebstack.codeplex.com/workitem/1386)导致响应标头损坏,因此客户端未收到此错误 .

  • 1

    我遇到了这个,当我从https切换到http时它就消失了 . 我们在开发中使用的SSL证书未经第三方验证 . 他们只是本地生成的开发证书 .

    同样的调用在Chrome Canary和Firefox中运行得很好 . 这些浏览器似乎不像Chrome那样严格控制SSL证书 . 使用“注意:临时 Headers ...”消息,Chrome中的调用将失败 .

    我认为/希望当我们在舞台和prod中使用合法的SSL证书时,我们将不再在Chrome中看到这种行为 .

  • 274

    当我因为错误而进行更改后第二次尝试为require js加载main.js时,我遇到了这个问题 . 我刚刚在开发人员工具设置“禁用缓存(当DevTools打开时)”中打开了 . 这样做的魅力 .

  • 0

    我见过的另一种可能的情况 - 几毫秒之后再次发送完全相同的请求(很可能是由于客户端的错误) .
    在这种情况下,您还将看到第一个请求的状态为"canceled",并且延迟仅为几毫秒 .

  • 88

    这种情况发生在我身上,当我有一个下载链接并点击它之后我还试图用jquery捕获点击并发送一个ajax请求 . 问题是因为当您点击下载链接时,您将离开该页面,即使它看起来不是这样 . 如果没有文件传输,你会看到请求的页面..所以我设置了一个target =“_ blank”来防止这个问题 .

  • 0

    当我尝试在弹出窗口中打印页面时出现此错误 . 打印对话框显示,它仍在等待我接受或取消弹出窗口中的打印,而在母版页中也在后台等待,当我尝试单击另一个链接时显示消息 CAUTION provisional headers are shown .

    在我的情况下,解决方案是删除它在弹出窗口的 <body> 上执行的 window.print (); 脚本,以防止打印对话框 .

  • 19

    发生这种情况的一个常见原因是,如果您正在跟踪事件而您没有阻止默认操作 . 例如,如果您有点击事件,那么您将要包括:

    e.preventDefault();
    

    要么

    return false;
    

    如果不这样做,您将在Web控制台的“网络”选项卡中看到临时 Headers 警告以及“已取消”状态 .

  • 2

    我看到当我的服务器的连接数超过Chrome的每服务器最大连接数限制为6时就会发生这种情况 .

  • 1

    使用此代码的代码:

    header('Cache-Control: no-cache, no-store, must-revalidate');
    header('Pragma: no-cache');
    header('Expires: 0');
    

    这对我有用 .

  • 6

    这也可能因为一个名为site isolation的新功能而发生

    This page details the issue and a work-around . 这是在chrome中转到 chrome://flags/#site-isolation-trial-opt-out 并将该设置更改为"Opt-out"并重新加载chrome .

    这是known issue . 然而,该页面说它运行chrome 68并且我仍然有问题 .

  • 0

    刚扔掉我的两分钱 . 我正在使用CORS请求和完整的RESTful Web服务编写Web应用程序 . 我发现当我有一个unhanded异常或抛出PHP错误时,chrome会抛出此错误 . 只是因为其他人遇到了问题 . 我发现当发生这种情况时,我可以启动Chrome应用程序“Postman - Rest Client”并运行完全相同的请求,但在Chrome应用程序中,我实际上会得到抛出的PHP错误,而不是这个非描述性错误 .

  • 1

    这是另一种解决方案 .

    如果您在$ ajax()调用时遇到此问题,请在您的serverhost解决问题之前添加 http:// .

    var requestURL = "http://" + serverHost;
    $.ajax({
        dataType: "json",
        url: requestURL,
        data: data,
        success: success    
    });
    
  • 2

    如果你是开发Asp.Net Mvc应用程序并尝试在控制器中返回 JsonResult ,确保将 JsonRequestBehavior.AllowGet 添加到 Json 方法 . 那为我修好了 .

    public JsonResult GetTaskSubCategories(int id)
    {
        var subcategs = FindSubCategories(id);
    
        return Json(subcategs, JsonRequestBehavior.AllowGet);  //<-- Notice it has two parameters
    }
    
  • 0

    当在HTTPS上托管的网站调用对HTTP上托管的WebApi的调用时,可以显示“警告:显示临时标头”消息 . 如果您的所有Api都是HTTPS,您可以检查所有 . 浏览器阻止对不安全的资源进行调用 . 将FETCH API用于使用HTTP的域时,您可以在代码中看到类似的消息 .

    混合内容:“https://website.com ' was loaded over HTTPS, but requested an insecure resource ' http://webapi.com”页面 . 此请求已被阻止;内容必须通过HTTPS提供 .

  • 1

    我的MEAN应用程序遇到了类似的问题 . 在我的情况下,问题只发生在一个get请求中 . 我尝试删除adblock,尝试清除缓存并尝试使用不同的浏览器 . 什么都没有帮助 .

    最后,我发现api试图返回一个巨大的JSON对象 . 当我试图发送一个小物体时,它工作正常 . 最后,我已经改变了我的实现以返回缓冲区而不是JSON .

    我希望expressJS在这种情况下抛出一个错误 .

  • 0

    清除浏览器历史记录中的缓存数据对我有用 .

  • 4

    使用某些软件包(如 webpack-hot-middleware )并同时打开多个页面时也会发生此问题 . webpack-hot-middleware 将为每个页面创建一个连接,以便监听代码的更改,然后刷新页面 . 每个浏览器都有一个 max-connections-per-server 限制,对于Chrome为6,因此如果您已经在Chrome中打开了超过6个页面,则新请求将挂在那里,直到您关闭某些页面 .

  • 2

    在我的情况下,我在post请求中发送的身体参数,以及我根据身体参数写入的逻辑是错误的,因此无法发送响应 . 所以我得到了这个错误 .

    example: post request body (a: alsldfjfj) which I was sending
    

    但我写了验证“b”而不是“a”的代码

相关问题