Google Chrome会发送多个请求以获取页面,这显然不是错误,而是一项功能。我们作为开发人员只需处理它。
据我可以在五分钟内挖出来,chrome就是为了让冲浪更快,所以如果一个连接丢失,第二个将接管。
我想如果网站发展得很好,那么它的功能就不会受到影响,因为多个请求并不是新的。
但我不确定我是否已考虑到此功能可以产生的所有情况。
会有什么特殊情况吗?有什么最好的做法来处理它们吗?
更新1:现在我明白为什么当我用chrome打开页面时,我的银行页面会出错!它说:“只有一个浏览器窗口应该打开。”这是他们解决安全威胁的方法吗?!!
答案 0 :(得分:15)
您最好的选择是遵循标准的Web开发最佳实践:不要因GET调用而更改应用程序状态。
如果您担心我建议更新您的数据层单元测试,以便重复使用GET调用&确保他们返回相同的数据。
(顺便说一下,我在Chrome 8.0.552.224中没有看到这种行为,这是非常新的吗?)
答案 1 :(得分:14)
我在编写服务器应用程序时看到了遭受的行为,发现早期的答案可能不正确。
Chrome会将单个请求分发到多个http请求以并行获取资源。在这种情况下,它是一个图像,它作为单独的http get获取。
我通过wireshark附加了数据包捕获的屏幕截图。
对于端口8080的简单get请求,服务器返回一个hello消息。
Chrome会针对获取您在每个打开的标签页上看到的收藏图标发送第二次获取请求。这不是第二次得到满足时间或任何此类事情。
应该考虑不同浏览器的另一个元素。但是,在2018年的浏览器中,并行处理多个http请求是一种标准的事情。
以下是我发现后者的参考问题
答案 2 :(得分:4)
当我输入一个URL时,我发现这个特征(错误/特征/无论什么)的观察结果,并且当仍然在输入URL时,自动完成功能落在匹配上。 Chrome会获取该匹配并获取该页面,我假设您自己加载页面时会出现缓存优势....
答案 3 :(得分:3)
此行为可能是由IMG中的SRC =''或SRC ='#'或(如我的情况下)IFRAME标记引起的。用'about:blank'替换'#'解决了这个问题。
这里http://forums.mozillazine.org/viewtopic.php?f=7&t=1816755他们说SCRIPT标签也是问题。
答案 4 :(得分:3)
它也可能由link
标记导致href
属性为空,至少在Chromium(v41)中。例如,以下每一行都将在页面上生成一个附加查询:
<link rel="shortcut icon" href="" />
<link rel="icon" type="image/x-icon" href="" />
<link rel="icon" type="image/png" href="" />
在页面中查找空属性是一个很好的起点,href
或src
。
答案 5 :(得分:2)
我刚刚实现了一次性使用Guid令牌(asp.net/TSQL),该令牌是在生成一系列两个(+确认页面)中的第一个表单时生成的。令牌在生成时在数据库中记录为“待定”。 Guid令牌伴随帖子作为隐藏字段,并且在用户操作完成(支付)时最终被标记为关闭。此机制确实有效,并且可以防止在付款后重新提交任何表单。但是,我看到一个接一个地快速生成额外请求的2或3个(!?)附加令牌。第一个请求是最终在用户面前的(localhost - 所以即我),其中生成的内容最终用于我不知道的其他两个请求。我最初想知道为什么Page_Load处理程序为一个页面的印象调用多个时间,所以我在Http.Context.Current中尝试了一个标志 - 但令我沮丧的是,后续请求来自同一个URL但没有发布数据,并且空Http.Context.Current数组 - 即,完全(出于实际目的)单独的http请求。怎么办呢?某种令牌和逻辑拒绝后续页面正文内容请求,而第一个仍处理?我想这可以作为全球背景发生吗?
答案 6 :(得分:2)
这只有在我启用“webug”扩展(这是Chrome的FirePHP替代)时才会发生。如果我禁用扩展,服务器只会收到一个请求。
答案 7 :(得分:1)
我遇到了这个问题,但这里没有一个解决方案。对我来说,这是由Chrome中的APNG扩展(支持动画PNG)引起的。一旦我禁用了该扩展,我就不再在浏览器中看到对图像的双重请求。我应该注意,无论页面是否输出PNG图像,禁用此扩展程序都会解决问题(即,无论图像类型如何,APNG似乎都会导致图像问题,它们不一定是PNG)。
我还有许多其他扩展(例如许多人建议的“Web开发人员”问题),这些都不是问题。禁用它们并没有解决问题。我也在开发者模式下运行,这根本不会对我产生影响。
答案 8 :(得分:1)
在我的情况下,Chrome(v65)制作了第二个GET /favicon.ico
,即使回复是text/plain
,因此在引用图标时显然没有<link
。在我回复404后,它停止这样做了。
Firefox(v59)发送了2个favicon
请求;再次它在404之后停止这样做。
答案 9 :(得分:1)
我只想对此进行更新。我在CSS样式上也遇到了同样的问题。
我已经查看了所有的src,href,脚本标记,但它们都没有空字符串。令人讨厌的条目是这样的:
<div class="Picture" style="background-image: url('');"> </div>
确保您还检查样式以获取空的URL字符串
答案 10 :(得分:0)
我有同样的错误。和previous answer这个问题一样,因为我安装了Validator chrome extension 一旦禁用扩展,正常工作。
答案 11 :(得分:0)
在我的情况下,我将enpoint(json)数据发送到不同的服务器,浏览器首先发出一个空请求(请求方法:OPTIONS)来检查端点是否接受来自我的服务器的请求,Same-原产地政策。知道的是一个Angular 1应用程序。 总之,我从localhost请求在线虚假json数据。
答案 12 :(得分:0)
在正常的html GET查询和/ favicon之后,Chrome发送了空的TCP数据包到我的简单服务器。 Favicon不是问题,但是空的tcp是问题,因为我的服务器正在等待数据或连接完成。它没有数据,也不会在2分钟内释放连接。所以线程挂了2分钟。
Jrummell的Link在对原始帖子的评论中对我有所帮助。它说空的TCP数据包可能是由“预测网络操作以提高页面加载性能”设置引起的。我试图一一关闭预测设置,但它确实起作用。在Chrome版本73.0.3683.86(官方内部版本)(64位)中,此行为是由Chrome设置“使用预测服务更快地加载页面”引起的。
因此,在chrome〜73中,您可以尝试设置->高级->隐私和安全性->使用预测服务更快地加载页面并将其关闭。