Chrome调试器中的“警告:显示了临时标题”


399

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

显示警告临时标题

在此处输入图片说明

我发现了一些可能相关的信息,即“ 网络面板”:请增加有关临时请求标头的警告,但我无法完全理解它。可以找到相关问题,Chrome阻止请求以及XMLHttpRequest无法加载。卸载的资源显示警告:显示临时标头

与第一个问题类似,我的资源被阻止,但后来自动加载了相同的资源。与第二个问题不同,我不想修复任何问题。我想知道此消息的含义以及为什么收到它。


3
如果由于域切换而没有发送请求的请求,也可能出现此问题,例如,通过Ajax从www.domain.tld向a.axl发送数据,反之亦然。
Andre Baumeier 2014年

@wvega在此SO问题中发布了一个类似的问题,但是对于此“ 临时标题已发送”问题似乎没有任何可能的解释。有什么具体的解决方案吗?真烦人!我前一段时间发布了这个问题。
webblover 2014年

1
@webblover wvega有一个很好的解释。而且我实际上并不是在寻找解决方案。我很好奇一个原因。
萨尔瓦多·达利

它帮助我,当我把它关闭:chrome://flags/#site-isolation-trial-opt-out
ИльяЗеленько

阅读我的回答,它并不复杂,因为它看起来:stackoverflow.com/questions/21177387/...
csandreas1

Answers:


353

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

出现该消息是因为从未提出过检索该资源的请求,因此显示的标头不是真实的东西。如您所引用的问题中所述,当服务器响应时,真实标头会更新,但是如果请求被阻止,则不会响应。


我发现阻止扩展程序的扩展的方法是通过Chrome中的net-internals工具:

对于最新版本的chrome

  • 输入chrome://net-export/在地址栏并回车。
  • 开始录制。并将录音文件保存到本地。
  • 打开显示问题的页面。
  • 回到内部网
  • 您可以在此处查看记录的日志文件https://netlog-viewer.appspot.com/#import
  • 单击事件(###),然后使用文本字段查找与您的资源相关的事件(使用URL的一部分)。
  • 最后,单击事件,查看显示的信息是否告诉您一些信息。

对于较旧版本的chrome

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

7
Shazz的答案更好。每当从浏览器的缓存中检索资源时,您都会在调试器中看到此消息,而无需询问服务器内容是否已更改。
2014年

4
我认为这两个答案都是正确的,它们说明了同一故事的两个方面。当请求被阻止或从缓存中加载资源时,以及在启动每个请求之后以及浏览器正在等待服务器响应时,都会显示该消息。响应一到达,消息就会消失,并显示真实的标题。
Willington Vega

2
如果重定向了最初分析的页面,例如example.com/a-> 301-> example.com/b,并且目标页面的回答为200,然后在检查器中单击目标页面/ b以查看标头数据,您将获得它们,并标有“已显示临时标题”。正确,因为您没有直接分析目标页面。如果这样做,则将获得不带标签的标题数据。
叶夫根尼(Evgeniy),2015年

1
我能够确定这是我的问题,因为当我执行上述操作时。我的https站点正在调用https css文件,该文件正在执行302重定向到http页面。安全性不允许加载文件,仅显示临时标头。
Steropes

1
对于可能发生这种情况的多种原因有很好的解释:stackoverflow.com/questions/12009423/…–
boldnik

112

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


61
否,未修改的304来自服务器,以响应条件请求。如果您正在加载缓存的资源,并且浏览器不必与服务器联系,则将不会得到304未修改或任何HTTP状态,因为不会发出HTTP请求。
thomasrutter 2014年

7
这对我有用,当我在调试器面板中看到“显示了临时标头”时,请求的状态代码为“ 200 OK(来自缓存)”
richie 2015年

3
我在服务人员的响应中看到了这一点,因此,我认为至少在某些情况下,您对缓存响应是正确的:)
jacoballenwood

4
我在开发工具中关闭了缓存,但仍然收到此消息。所有文件的状态为200,没有“(来自缓存)”。因此,有时可能是由于缓存,但并非总是如此。
拉尔夫

就我而言,它是从缓存加载数据。
罗维

40

对于chrome v72 +,为我解决的仅是:

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

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

在此处输入图片说明

或者您可以从命令行执行此操作:

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

为什么会这样?

Google似乎将其Chromium引擎重构为模块化结构,其中不同的服务将分为独立的模块和流程。他们称此过程为服务化。网络服务是第一步,即将推出Ui服务,身份服务和设备服务。Google在Chromium项目站点上提供了官方信息。

改变它有危险吗?

网络就是一个例子:一旦有了网络服务,我们可以选择将其运行在进程外,以提高稳定性/安全性;如果资源有限也可以在进程内运行资源


4
我能够将其与“启用网络服务”和“正在运行网络服务”一起使用。
smalone

我只是禁用了站点隔离,这对我有用。
阿什里斯

3
这可以在常规的Chrome(v74)中使用,但是最新版本的Chrome Canary(v76)现在缺少“#network-service”标志...如果没有它,就无法在Canary中使用。
丰富的

我在localhost:8080google.com(!?)上都看到了这个问题。停用网站隔离功能是固定的google.com,而不是localhost。仅禁用其他两个选项可修复所有情况。
BlueRaja-Danny Pflughoeft

我才不得不关闭这个功能:铬://标志/#现场隔离,试退出
ИльяЗеленько

25

我遇到了这个问题,并且设法找到了一个特定的原因,上面在答案或问题中都没有提到。

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

因此,具体来说,我的情况是:POST请求,带有到端口8081的凭据导致检查器中出现“警告:显示了临时标头”消息,当然也一起阻止了该请求。

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


2
那就是浏览器的同源策略-您的网页和您正在阅读的资源必须在同一端口上。developer.mozilla.org/en-US/docs/Web/Security/...
r3m0t

1
非常感谢您的帮助。我正在使用webpacks开发服务器,我只能够添加一个重写规则。'/graphql': { target: 'http://10.10.1.38:4000', changeOrigin: true }
詹姆斯·哈灵顿

同样,我加入解决了这个问题,"proxy": "http://192.168.98.110:1234"package.json在创建反应的应用程序内的项目。与答案不同,我不在开发人员的任何地方使用HTTPS,但这是必需的,因为我的应用程序和api位于不同的IP上。
chrishiestand19年

16

由于称为站点隔离的新功能,这种情况也可能发生(仅针对跨域请求)

此页面详细介绍了该问题和解决方法。要chrome://flags/#site-isolation-trial-opt-out在Chrome浏览器中将其更改为“退出”,然后重新加载Chrome浏览器。

这是一个已知问题。但是该页面说它已在chrome 68中修复,但是我正在运行chrome 68,但仍然有问题。


1
如果您的请求没有被阻止(200 OK),则仅在CORS请求中发生,并且缺少的标头是Cookie,您需要检查此答案。谢谢@onlynone
semako

@semako,能否请您详细解释一下?我遇到类似的问题,但我不完全理解为什么。有关更多信息,请参阅我的最新文章。谢谢。
adn bps,

12

HTTP / 2推送的资源Provisional headers are shown在检查器中产生,其原理与上述答案中发布的@wvega相同。

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

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


12

我的情况与跨域相关。
情况:浏览器先发送OPTIONS请求,然后再发送真实请求,如GETPOST。后端开发人员忘了处理OPTIONS请求,让它遍历服务代码,从而使处理时间过长。比我在axios初始化中写的超时设置长5000毫秒。因此,无法发送真正的请求,然后我遇到了provisional headers are shown问题。
解决方案:关于OPTIONS请求,后端api仅返回结果,这使请求更快,并且可以在超时之前发送实际请求。


6

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

原来,我用来触发帖子的A标签的href属性中有一个错字。我输入了href =“ javacsript:; ” (将“ s”和“ c”反转)。这导致脚本在尝试触发时尝试刷新页面。纠正了错字,对我来说效果很好。


遇到同样的问题,没有错字,但是在POST被触发/完成之前,我有一个脚本重新加载了页面。
2014年

4

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


我禁用了HSTS,原始标头再次出现。谢谢!
kenberkeley

3

那可能是因为您发送了一个Ajax请求,同时又使用location.href或类似的东西将页面跳转到另一个页面。因此,先前的请求失败。


2

如果响应无效,因此浏览器将其丢弃,也会出现此警告消息。

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


2

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

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


2

我最近(实际上是今天)遇到了这个问题,在那里我接到服务器的AJAX呼叫,然后Chrome触发了“警告:显示了临时标头”。在服务器端PHP脚本中,根据给定的场景,有些MySQL查询可能是即时的,也可能是几秒钟的。在查询完成之前,我的服务器响应不会发送回浏览器。我发现只有在完成耗时的查询(总计几秒钟)并且阻止响应发回时,才会出现此错误。

我的情况涉及极少可能的情况,即必须通过添加/删除数百列天气模型输出来更改表...因此,通过ALTER TABLE查询循环进行迭代的响应滞后。


PHP工人将可能东西给你
巴特洛梅耶扎莱夫斯基

2

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

e.preventDefault();

要么

return false;

否则,您将在Web控制台的“网络”选项卡中看到临时标题警告以及“已取消”状态。


2

就我而言,这只是资源的错误设置路径(svg / img)


是的-对我来说,使用文件输入请求时缺少权限。
phil294


1

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

在Chrome Canary和Firefox中,相同的调用也可以正常工作。这些浏览器似乎对SSL证书的要求不如Chrome严格。在Chrome中,调用将失败,并显示“警告:临时标头...”消息。

我认为/希望我们在舞台和产品中使用合法的SSL证书时,不会再在Chrome中看到此行为。


我试图卷曲,并收到60。从此答案中找出SSL安装时缺少的链。添加链和问题走了。多谢,伙计!请使用此工具进行检查:curl -s -D- https:// <yourcomain.com>
apis17

1

只需投入我的两分钱。我正在使用CORS请求和完整的RESTful Web服务编写Web应用程序。我发现当我遇到未处理的异常或抛出PHP错误时,chrome将抛出此错误。以防万一其他人遇到问题。我发现,发生这种情况时,我可以启动Chrome应用“邮递员-Rest Client”并运行完全相同的请求,但是在Chrome应用中,我实际上会抛出PHP错误,而不是该非描述性错误。


1

当我由于错误而进行更改后,第二次尝试为main js加载require js时,我遇到了这个问题。我刚刚在开发人员工具设置中打开了“禁用缓存(打开DevTools时)”。而那确实很吸引人。


刚刚有一个类似的问题,当我打开“禁用缓存(打开DevTools时)”时,打开Chrome开发工具时无法加载html5视频。禁用设置解决了该问题。
2014年

1

我看到的另一种可能的情况是-几毫秒后再次发送了完全相同的请求(最有可能是由于客户端中的错误)。
在这种情况下,您还将看到第一个请求的状态为“已取消”,并且延迟仅为几毫秒。


1

这是对我而言的事情,当我有一个下载链接时,单击它之后,我也尝试使用jquery捕获单击并发送ajax请求。问题是因为当您单击下载链接时,您将离开该页面,即使看起来并非如此。如果没有文件传输,您将看到请求的页面。因此,我设置了一个target =“ _ blank”来防止出现此问题。


1

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

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


1

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


1

使用您的代码的以下代码拳头:

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

这对我有用。


0

这是另一种解决方案。

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

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

0

如果您正在开发Asp.Net Mvc应用程序,并且试图JsonResult在控制器中返回a ,请确保添加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 ”上的页面已通过HTTPS加载,但请求了不安全的资源“ http://webapi.com ”。该请求已被阻止;内容必须通过HTTPS提供。


0

我的MEAN应用有类似的问题。就我而言,问题仅在一个get请求中发生。我尝试移除adblock,尝试清除缓存并尝试使用其他浏览器。没有任何帮助。

最终,我发现api试图返回一个巨大的JSON对象。当我尝试发送一个小物体时,它工作正常。最后,我将实现更改为返回缓冲区而不是JSON。

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


0

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


0

就我而言,原因是AdBlock扩展。

对服务器的请求通过了,得到了响应,但是由于开发工具中显示“ Provisional headers ..”,所以我看不到请求cookie。在为网站禁用AdBlock之后,警告消失了,开发工具开始再次显示cookie。

为了使更改生效,还必须关闭开发工具并刷新页面

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.