注意:显示临时头文件。Chrome调试器

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

注意显示临时标题

enter image description here

我发现了一些可能相关的东西,网络面板:添加关于临时请求头的警告,但我不能完全理解它。相关问题可以在Chrome块请求XMLHttpRequest无法加载。未加载的资源显示警告:显示临时标头中找到。

类似于第一个问题,我的资源被阻塞,但后来自动加载相同的资源。与第二个问题不同,我不想修复任何东西;我想知道这条信息是什么意思以及我为什么收到它。

718925 次浏览

资源可能被一个扩展阻塞(在我的情况下是AdBlock)。

该消息之所以存在,是因为从未发出检索该资源的请求,因此显示的标头并不是真正的标头。正如在您引用的问题中所解释的那样,服务器响应时更新真实的头,但如果请求被阻塞,则没有响应。


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

chrome的最新版本

  • 在地址栏中输入chrome://net-export/并按enter键。
  • 开始录音。并保存录音文件到本地。
  • 打开显示问题的页面。
  • 回到net-internals
  • 您可以在这里查看记录日志文件https://netlog-viewer.appspot.com/#import
  • 点击事件(# # #),并使用文本框找到与你的资源相关的事件(使用URL的一部分)。
  • 最后,单击事件,看看所显示的信息是否告诉了你一些东西。

chrome的旧版本

  • 在地址栏中输入chrome://net-internals并按enter键。
  • 打开显示问题的页面。
  • 返回到net-internals,单击事件(# # #)并使用文本字段查找与您的资源相关的事件(使用URL的部分)。
  • 最后,单击事件,看看所显示的信息是否告诉了你一些东西。

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

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

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

所以我的具体场景是:POST请求,带有凭据到端口8081导致“警告:临时头显示”消息在检查器中,当然也阻止了请求。

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

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

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

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

同样的调用在Chrome Canary和Firefox中也能正常运行。这些浏览器似乎不像Chrome那样严格要求SSL证书。调用将失败在Chrome与“警告:临时头…”消息。

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

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

原来,我有一个错字在一个标签的href属性,我正在使用火的帖子。我输入了href="javacsript:;"(颠倒's'和'c')..这导致脚本在文章试图触发时尝试刷新页面。纠正了拼写错误,它为我工作得很好。

只是说说我的意见。我正在使用CORS请求和一个完全RESTful的Web服务编写一个Web应用程序。我发现chrome会抛出这个错误时,我有一个无手异常或PHP错误抛出。以防其他人遇到同样的问题。我发现当这种情况发生时,我可以启动Chrome应用程序“邮差-休息客户端”,并运行完全相同的请求,但在Chrome应用程序中,我实际上会得到被抛出的PHP错误,而不是这种非描述性错误。

这是另一个解决方案。

如果你在$ajax()调用中遇到这个问题,在你的服务器主机解决你的问题之前添加http://

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

我在AJAX调用时遇到了这个问题,它永远不会完成。我遵循了wvega关于使用chrome://net-internals调试的建议和技巧,最终确定页面中的另一个click事件处理程序,监听父节点,导致浏览器导航到相同的URL(因此不容易注意到)。

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

当我第二次尝试为require js加载main.js时,我运行了这个问题,因为错误导致了我的更改。 我刚刚在开发工具设置中打开了“禁用缓存(当开发工具打开时)”.

我所见过的另一种可能的场景-完全相同的请求在几毫秒后再次发送(很可能是由于客户端存在错误) 在这种情况下,您还将看到第一个请求的状态是“取消”,并且延迟只有几毫秒

我最近(实际上是今天)有一个AJAX调用到服务器,Chrome弹出“警告:临时头部显示。”在服务器端PHP脚本中,有一些MySQL查询可能非常快速,也可能需要几秒钟,这取决于给定的场景。直到查询完成,我的服务器响应才被发送回浏览器。我发现只有在执行耗时的查询(总共几秒钟)并阻止返回响应时才会出现这个错误。

我的场景涉及到一个非常罕见的可能性,即必须通过添加/删除数百个天气模型输出列来更改一个表……因此,迭代ALTER TABLE查询循环会导致响应延迟。

这发生在我身上,当我有一个下载链接,点击它后,我也试图用jquery捕捉点击,并发送一个ajax请求。问题是,当你点击下载链接时,你正在离开页面,即使它看起来不是这样。如果没有文件传输,您将看到所请求的页面。所以我设置了一个target="_blank"来防止这个问题。

当我试图在弹出窗口中打印页面时,我得到了这个错误。打印对话框显示,它仍然在弹出窗口中等待我的接受或取消打印,而在母版页中,当我试图单击另一个链接时,也在后台等待显示消息临时标题显示

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

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

e.preventDefault();

return false;

如果你不这样做,你会在你的web控制台的Network选项卡中看到临时头部警告以及“取消”状态。

如果您正在开发Asp。如果你试图在控制器中返回JsonResult,请确保将JsonRequestBehavior.AllowGet添加到Json方法中。这为我解决了问题。

public JsonResult GetTaskSubCategories(int id)
{
var subcategs = FindSubCategories(id);


return Json(subcategs, JsonRequestBehavior.AllowGet);  //<-- Notice it has two parameters
}

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

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

HTTP/2推送资源将在检查器中生成Provisional headers are shown,用于与上面是他的回答中发布的@wvega相同的理论。

例句:由于服务器将资源推送到客户端(在客户请求它们之前),浏览器已经缓存了资源,因此客户端从不发出/需要请求;所以因为…

...当服务器响应时更新真实的头,但是如果请求被阻塞,则没有响应。

当我发送无效的HTTP授权报头时,发生了这个问题。我忘记用base64编码了。

当我的服务器连接数超过Chrome的每台服务器最大连接数限制6个时,我就看到了这种情况。

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

混合内容:'https://website.com'上的页面通过HTTPS加载,但请求了一个不安全的资源'http://webapi.com'。此请求已被阻止;内容必须通过HTTPS提供。

我的MEAN应用程序也有类似的问题。在我的情况下,这个问题只发生在一个get请求中。我尝试删除广告块,尝试清除缓存,并尝试与不同的浏览器。没有什么帮助。

最后,我发现api试图返回一个巨大的JSON对象。当我尝试发送一个小对象时,它工作得很好。最后,我改变了我的实现,返回一个缓冲区而不是JSON。

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

在你的代码中使用以下代码:

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

这对我很有用。

我的情况与跨源有关 情境:浏览器在发送真正的请求之前发送OPTIONS请求,如GETPOST。后端开发人员忘记处理OPTIONS请求,让它通过服务代码,使处理时间过长。比我在axios初始化中写的超时设置还要长,也就是5000毫秒。因此,真正的请求无法发送,然后我遇到了provisional headers are shown问题 当遇到OPTIONS请求时,后端api只返回结果,这样可以使请求更快,并且可以在超时前发送真正的请求。

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

这也可能发生,因为有一个叫做网站隔离的新特性

本页详细介绍了问题和解决方案。也就是去chrome中的chrome://flags/#site-isolation-trial-opt-out并将该设置更改为“选择退出”并重新加载chrome。

它是已知问题。然而,该页面说它在chrome 68中是固定的,但我正在运行chrome 68,我仍然有这个问题。

这可能是因为您发送了Ajax请求,同时使用位置将页面跳转到另一个页面。Href之类的。所以之前的请求失败了。

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

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

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

在我的案例中,原因是AdBlock扩展。

向服务器的请求通过了,我得到了响应,但由于“临时头部..”显示在Dev工具中,我无法看到请求cookie。禁用AdBlock后,警告消失了,开发工具开始再次显示cookie。

为了使更改生效,还需要关闭Dev工具并刷新页面

对于chrome v72+什么为我解决了它只是这个:

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

  • 禁用站点隔离
  • 启用网络服务
  • 运行进程内网络服务

enter image description here

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

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

为什么会发生这种情况?

谷歌似乎正在将他们的Chromium引擎重构为模块化结构,其中不同的服务将被分离为独立的模块和进程。他们把这个过程称为服务化。网络服务是第一步,接下来是Ui服务、身份服务和设备服务。谷歌提供铬项目现场的官方信息。

改变这一点危险吗?

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

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

如果你想执行一个get请求(例如发送参数化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>

这可能是CORS问题。

.尝试为你的api启用CORS

为之前

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

这个报头显示的原因是:你的请求没有发送到远程。

它通常由

  1. 扩展已经阻止您的请求
  2. Chrome使用自己的缓存获取您的资源

Chrome无法从尚未发出的请求中获得请求头。

chrome的最新版本显示:

只有临时头是可用的,因为这个请求不是通过网络发送的,而是从本地缓存提供服务。

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

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

没有显示完整的头文件,因为有可能请求没有发送到服务器,而是直接从浏览器的缓存(例如使用service worker)提供服务

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