使用Google Chrome检查器(F12)查看下载的资源时,我注意到一条奇怪的警告消息:
注意显示临时 Headers
我找到了可能相关的东西,但我无法完全理解它 . 相关问题可以在Chrome block requests以及XMLHttpRequest cannot load. Unloaded resources show caution: Provisional headers are shown找到 .
与first question类似,我的资源被阻止,但后来自动加载了相同的资源 . 与second question不同,我不想修理任何东西;我想知道这条消息的含义以及我收到它的原因 .
30 回答
使用HSTS保护网站时,可能会出现此消息 . 然后,当有人链接到HTTP的HTTP版本时,浏览器(如HSTS的指示)不会发出HTTP请求,而是在内部安全地重定向到HTTPS资源 . 这是为了避免HTTPS降级攻击,例如sslstrip .
资源可能被扩展程序阻止(在我的情况下是AdBlock) .
消息是存在的,因为从未进行过检索该资源的请求,因此显示的 Headers 不是真实的 . 如您引用的问题中所述,实际标头在服务器响应时会更新,但如果请求被阻止则没有响应 .
我发现阻止我的资源的扩展的方式是通过Chrome中的net-internals工具:
在地址栏中输入
chrome://net-internals
并按Enter键 .打开显示问题的页面 .
返回net-internals,单击 events (###) 并使用文本字段查找与您的资源相关的事件(使用URL的部分) .
最后,点击事件,看看显示的信息是否告诉你一些事情 .
我相信在没有发送实际请求时会发生这种情况 . 通常在加载缓存资源时发生 .
我遇到了这个问题,我设法确定了一个具体的原因,上面没有在答案或问题中提到 .
我在SSL上运行完整的js堆栈,角度前端和节点后端,并且API在端口8081上运行的不同域上,所以我正在执行CORS请求和withCredentials,因为我从API中删除会话cookie
具体来说,我的方案是:POST请求,withCredentials到端口8081导致检查器中出现“小心:显示临时 Headers ”消息,当然也阻止了所有请求 .
我的解决方案是设置apache来代理将请求从443的通常SSL端口传递到8081的节点SSL端口(节点必须位于更高的端口上,因为它不能在prod中以root身份运行) . 所以我猜Chrome不喜欢SSL请求非常规SSL端口,但也许他们的错误信息可能更具体 .
HTTP/2 Pushed resources 将在检查器中生成
Provisional headers are shown
,其理论与his answer above中发布的@wvega相同 .e.g: 由于服务器将资源推送到客户端(在客户端请求它们之前),浏览器将缓存资源,因此客户端永远不会发出/需要请求;因为......
我怀疑我的答案是及时帮助你,但其他人可能会觉得它有帮助 . 我遇到了与我创建的jQuery Ajax Post脚本类似的问题 .
事实证明我在A标签的href属性中有一个拼写错误,我用它来发布帖子 . 我输入了href =“ javacsript :;” (反转's'和'c')..这导致脚本在帖子尝试触发时尝试刷新页面 . 纠正了错字,它对我来说非常好 .
我的情况是 cross-origin 相关 .
Situation: 浏览器在发送真实请求(如
GET
或POST
)之前发送OPTIONS
请求 . 后端开发人员忘记处理OPTIONS
请求,让它通过服务代码,使处理时间过长 . 比我在axios
初始化中写的超时设置长,这是5000毫秒 . 因此,无法发送实际请求,然后我遇到了provisional headers are shown
问题 .Solution: 当涉及
OPTIONS
请求时,后端api只返回结果,它使请求更快,并且可以在超时之前发送实际请求 .我遇到了一个永远无法完成的AJAX调用 . 我遵循了wvega的建议并提示调试
chrome://net-internals
以最终确定页面中的另一个click
事件处理程序,监听父节点,导致浏览器导航到同一个URL(因此不容易注意到) .解决方案是在表单提交按钮的
click
处理程序中添加event.stopPropagation()
,以防止点击冒泡DOM并取消正在进行的AJAX请求(通过form
上的submit
处理程序启动) .我最近(事实上今天)我已经有了这个,我有一个AJAX呼叫转到服务器,Chrome将触发“警告:显示临时标头” . 在服务器端PHP脚本中,根据给定的场景,有几个MySQL查询可以非常即时或需要几秒钟 . 在查询完成之前,我的服务器响应不会发送回浏览器 . 我发现只有在耗时的查询(总共几秒钟)完成时才会收到此错误并阻止响应被发回 .
我的场景涉及通过添加/删除数百个天气模型输出列来改变表格的极少数可能性...因此,迭代通过ALTER TABLE查询循环的响应滞后 .
在我的情况下,它只是一个错误的设置路径到资源(svg / img)
当我发送无效的HTTP授权标头时,我遇到此问题 . 我忘了base64编码了 .
这可能是因为您发出了Ajax请求,但现在您使用location.href或类似的东西将页面跳转到另一个页面 . 因此预览请求失败 .
如果响应无效并因此被浏览器删除,则也会出现此警告消息 .
在我的情况下,请求被正确发送到服务器,服务器端代码然后产生错误,我的自定义错误处理返回HTTP状态消息字段中的错误消息 . 但是由于错误消息中的无效字符(此处描述为http://aspnetwebstack.codeplex.com/workitem/1386)导致响应标头损坏,因此客户端未收到此错误 .
我遇到了这个,当我从https切换到http时它就消失了 . 我们在开发中使用的SSL证书未经第三方验证 . 他们只是本地生成的开发证书 .
同样的调用在Chrome Canary和Firefox中运行得很好 . 这些浏览器似乎不像Chrome那样严格控制SSL证书 . 使用“注意:临时 Headers ...”消息,Chrome中的调用将失败 .
我认为/希望当我们在舞台和prod中使用合法的SSL证书时,我们将不再在Chrome中看到这种行为 .
当我因为错误而进行更改后第二次尝试为require js加载main.js时,我遇到了这个问题 . 我刚刚在开发人员工具设置“禁用缓存(当DevTools打开时)”中打开了 . 这样做的魅力 .
我见过的另一种可能的情况 - 几毫秒之后再次发送完全相同的请求(很可能是由于客户端的错误) .
在这种情况下,您还将看到第一个请求的状态为"canceled",并且延迟仅为几毫秒 .
这种情况发生在我身上,当我有一个下载链接并点击它之后我还试图用jquery捕获点击并发送一个ajax请求 . 问题是因为当您点击下载链接时,您将离开该页面,即使它看起来不是这样 . 如果没有文件传输,你会看到请求的页面..所以我设置了一个target =“_ blank”来防止这个问题 .
当我尝试在弹出窗口中打印页面时出现此错误 . 打印对话框显示,它仍在等待我接受或取消弹出窗口中的打印,而在母版页中也在后台等待,当我尝试单击另一个链接时显示消息 CAUTION provisional headers are shown .
在我的情况下,解决方案是删除它在弹出窗口的
<body>
上执行的window.print ();
脚本,以防止打印对话框 .发生这种情况的一个常见原因是,如果您正在跟踪事件而您没有阻止默认操作 . 例如,如果您有点击事件,那么您将要包括:
要么
如果不这样做,您将在Web控制台的“网络”选项卡中看到临时 Headers 警告以及“已取消”状态 .
我看到当我的服务器的连接数超过Chrome的每服务器最大连接数限制为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并且我仍然有问题 .
刚扔掉我的两分钱 . 我正在使用CORS请求和完整的RESTful Web服务编写Web应用程序 . 我发现当我有一个unhanded异常或抛出PHP错误时,chrome会抛出此错误 . 只是因为其他人遇到了问题 . 我发现当发生这种情况时,我可以启动Chrome应用程序“Postman - Rest Client”并运行完全相同的请求,但在Chrome应用程序中,我实际上会得到抛出的PHP错误,而不是这个非描述性错误 .
这是另一种解决方案 .
如果您在$ ajax()调用时遇到此问题,请在您的serverhost解决问题之前添加
http://
.如果你是开发Asp.Net Mvc应用程序并尝试在控制器中返回
JsonResult
,确保将JsonRequestBehavior.AllowGet
添加到Json
方法 . 那为我修好了 .当在HTTPS上托管的网站调用对HTTP上托管的WebApi的调用时,可以显示“警告:显示临时标头”消息 . 如果您的所有Api都是HTTPS,您可以检查所有 . 浏览器阻止对不安全的资源进行调用 . 将FETCH API用于使用HTTP的域时,您可以在代码中看到类似的消息 .
混合内容:“https://website.com ' was loaded over HTTPS, but requested an insecure resource ' http://webapi.com”页面 . 此请求已被阻止;内容必须通过HTTPS提供 .
我的MEAN应用程序遇到了类似的问题 . 在我的情况下,问题只发生在一个get请求中 . 我尝试删除adblock,尝试清除缓存并尝试使用不同的浏览器 . 什么都没有帮助 .
最后,我发现api试图返回一个巨大的JSON对象 . 当我试图发送一个小物体时,它工作正常 . 最后,我已经改变了我的实现以返回缓冲区而不是JSON .
我希望expressJS在这种情况下抛出一个错误 .
清除浏览器历史记录中的缓存数据对我有用 .
使用某些软件包(如
webpack-hot-middleware
)并同时打开多个页面时也会发生此问题 .webpack-hot-middleware
将为每个页面创建一个连接,以便监听代码的更改,然后刷新页面 . 每个浏览器都有一个max-connections-per-server
限制,对于Chrome为6,因此如果您已经在Chrome中打开了超过6个页面,则新请求将挂在那里,直到您关闭某些页面 .在我的情况下,我在post请求中发送的身体参数,以及我根据身体参数写入的逻辑是错误的,因此无法发送响应 . 所以我得到了这个错误 .
但我写了验证“b”而不是“a”的代码