【问题标题】:Chrome cancels URL_REQUEST after exactly 3 secondsChrome 在 3 秒后取消 URL_REQUEST
【发布时间】:2021-09-30 04:14:05
【问题描述】:

好的,所以这很奇怪。

我正在编写一个 php 脚本,该脚本在请求时会执行大量工作(图像处理)。所以这并不罕见,它会在 10 秒内发出响应,有时甚至长达 30 秒:这是一个很长的脚本,这对于下一部分很重要。

在记录图像处理代码时,我注意到应该只调用一次的进程被调用了两次。

原因:Chrome 3s 后取消了第一个请求,然后再次请求相同的 URL。

顺序总是一样的。

  1. 请求的网址
  2. 3 秒后取消
  3. 使用 http 方案自动重新加载
  4. 307 由于我们服务器上的 HSTS
  5. 再次使用 https 请求 URL
  6. 这个加载正确

已取消的请求在“时间”选项卡中显示为已停止。

这只发生在 Chrome 中(我是 92.0.4515.107)。我在 Firefox 中看不到这种行为。

现在如何重现这种巫术?很简单,我可以在 2 个不同提供商(GCE 和 OVH)上的 2 个不同服务器上重现,并且它有一个奇怪的链接与该 URL 的初始请求的持续时间

  1. 在您的网络服务器上创建一个新的 php 脚本,仅包含

    <?php sleep(10); echo 'Done'; ?>

  2. 在 Chrome 中调用你的脚本 URL

  3. 第一次调用会成功

  4. 但是接下来的所有调用肯定会触发“序列”

通过查看 Chrome 日志,我认为这与 HTTP2_SESSION 有链接

t=235805 [st=   5]     +HTTP_TRANSACTION_SEND_REQUEST  [dt=1]
t=235806 [st=   6]        HTTP_TRANSACTION_HTTP2_SEND_REQUEST_HEADERS
                          --> :method: GET
                              :authority: my.server.com
                              :scheme: https
                              :path: /admin/ot/test1.php
                              pragma: no-cache
                              cache-control: no-cache
                              authorization: [38 bytes were stripped]
                              sec-ch-ua: "Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"
                              sec-ch-ua-mobile: ?0
                              upgrade-insecure-requests: 1
                              user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36
                              accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
                              sec-fetch-site: none
                              sec-fetch-mode: navigate
                              sec-fetch-user: ?1
                              sec-fetch-dest: document
                              accept-encoding: gzip, deflate, br
                              accept-language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7
                              cookie: [409 bytes were stripped]
t=235806 [st=   6]     -HTTP_TRANSACTION_SEND_REQUEST
t=235806 [st=   6]     +HTTP_TRANSACTION_READ_HEADERS  [dt=3012]
t=238818 [st=3018]        CANCELLED
t=238818 [st=3018] -REQUEST_ALIVE

关于上面的 URL_REQUEST,我们没有学到太多东西。我们只是在 3 秒后看到“CANCELLED”。

但是 HTTP2_SESSION 显示一个奇怪的错误:

27185: HTTP2_SESSION
my.server.com:443 (DIRECT)
Start Time: 2021-07-22 17:13:09.460

t=222444 [st=    0] +HTTP2_SESSION  [dt=28616+]
                     --> host = "my.server.com:443"
                     --> proxy = "DIRECT"
t=222444 [st=    0]    HTTP2_SESSION_INITIALIZED
                       --> protocol = "h2"
                       --> source_dependency = 27181 (SOCKET)
t=222445 [st=    1]    HTTP2_SESSION_SEND_SETTINGS
                       --> settings = ["[id:1 (SETTINGS_HEADER_TABLE_SIZE) value:65536]","[id:3 (SETTINGS_MAX_CONCURRENT_STREAMS) value:1000]","[id:4 (SETTINGS_INITIAL_WINDOW_SIZE) value:6291456]","[id:6 (SETTINGS_MAX_HEADER_LIST_SIZE) value:262144]"]
t=222445 [st=    1]    HTTP2_SESSION_UPDATE_RECV_WINDOW
                       --> delta = 15663105
                       --> window_size = 15728640
t=222445 [st=    1]    HTTP2_SESSION_SEND_WINDOW_UPDATE
                       --> delta = 15663105
                       --> stream_id = 0
t=222446 [st=    2]    HTTP2_SESSION_SEND_HEADERS
                       --> exclusive = true
                       --> fin = true
                       --> has_priority = true
                       --> :method: GET
                           :authority: my.server.com
                           :scheme: https
                           :path: /admin/ot/test1.php
                           pragma: no-cache
                           cache-control: no-cache
                           authorization: [38 bytes were stripped]
                           sec-ch-ua: "Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"
                           sec-ch-ua-mobile: ?0
                           upgrade-insecure-requests: 1
                           user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36
                           accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
                           sec-fetch-site: none
                           sec-fetch-mode: navigate
                           sec-fetch-user: ?1
                           sec-fetch-dest: document
                           accept-encoding: gzip, deflate, br
                           accept-language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7
                           cookie: [409 bytes were stripped]
                       --> parent_stream_id = 0
                       --> source_dependency = 27179 (HTTP_STREAM_JOB)
                       --> stream_id = 1
                       --> weight = 256
t=222471 [st=   27]    HTTP2_SESSION_RECV_SETTINGS
t=222471 [st=   27]    HTTP2_SESSION_SEND_SETTINGS_ACK
t=222471 [st=   27]    HTTP2_SESSION_RECV_SETTING
                       --> id = "3 (SETTINGS_MAX_CONCURRENT_STREAMS)"
                       --> value = 100
t=222471 [st=   27]    HTTP2_SESSION_UPDATE_STREAMS_SEND_WINDOW_SIZE
                       --> delta_window_size = 983041
t=222471 [st=   27]    HTTP2_SESSION_RECV_SETTING
                       --> id = "4 (SETTINGS_INITIAL_WINDOW_SIZE)"
                       --> value = 1048576
t=222471 [st=   27]    HTTP2_SESSION_RECV_SETTING
                       --> id = "6 (SETTINGS_MAX_HEADER_LIST_SIZE)"
                       --> value = 65536
t=222471 [st=   27]    HTTP2_SESSION_RECV_WINDOW_UPDATE
                       --> delta = 983041
                       --> stream_id = 0
t=222471 [st=   27]    HTTP2_SESSION_UPDATE_SEND_WINDOW
                       --> delta = 983041
                       --> window_size = 1048576
t=222471 [st=   27]    HTTP2_SESSION_RECV_SETTINGS_ACK
t=232550 [st=10106]    HTTP2_SESSION_RECV_HEADERS
                       --> fin = false
                       --> :status: 200
                           date: Thu, 22 Jul 2021 15:13:09 GMT
                           vary: Accept-Encoding
                           content-encoding: gzip
                           strict-transport-security: max-age=63072000; includeSubDomains; preload
                           x-ua-compatible: IE=Edge
                           x-frame-options: sameorigin
                           x-content-type-options: nosniff
                           x-xss-protection: 1; mode=block
                           content-length: 24
                           content-type: text/html; charset=CP1252
                           cache-control: 
                           age: 0
                           x-cache: NOT CACHABLE
                           accept-ranges: bytes
                           via: 1.1 google
                           alt-svc: clear
                       --> stream_id = 1
t=232550 [st=10106]    HTTP2_SESSION_UPDATE_RECV_WINDOW
                       --> delta = -1
                       --> window_size = 15728639
t=232550 [st=10106]    HTTP2_SESSION_UPDATE_RECV_WINDOW
                       --> delta = 1
                       --> window_size = 15728640
t=232550 [st=10106]    HTTP2_SESSION_RECV_DATA
                       --> fin = false
                       --> size = 24
                       --> stream_id = 1
t=232550 [st=10106]    HTTP2_SESSION_UPDATE_RECV_WINDOW
                       --> delta = -24
                       --> window_size = 15728616
t=232550 [st=10106]    HTTP2_SESSION_UPDATE_RECV_WINDOW
                       --> delta = -110
                       --> window_size = 15728506
t=232550 [st=10106]    HTTP2_SESSION_UPDATE_RECV_WINDOW
                       --> delta = 110
                       --> window_size = 15728616
t=232550 [st=10106]    HTTP2_SESSION_UPDATE_RECV_WINDOW
                       --> delta = -1
                       --> window_size = 15728615
t=232550 [st=10106]    HTTP2_SESSION_UPDATE_RECV_WINDOW
                       --> delta = 1
                       --> window_size = 15728616
t=232550 [st=10106]    HTTP2_SESSION_UPDATE_RECV_WINDOW
                       --> delta = -71
                       --> window_size = 15728545
t=232551 [st=10107]    HTTP2_SESSION_UPDATE_RECV_WINDOW
                       --> delta = 71
                       --> window_size = 15728616
t=232551 [st=10107]    HTTP2_SESSION_RECV_DATA
                       --> fin = true
                       --> size = 0
                       --> stream_id = 1
t=232551 [st=10107]    HTTP2_SESSION_PING
                       --> is_ack = false
                       --> type = "received"
                       --> unique_id = 0
t=232551 [st=10107]    HTTP2_SESSION_PING
                       --> is_ack = true
                       --> type = "sent"
                       --> unique_id = 0
t=232552 [st=10108]    HTTP2_SESSION_UPDATE_RECV_WINDOW
                       --> delta = 24
                       --> window_size = 15728640
t=235806 [st=13362]    HTTP2_SESSION_SEND_HEADERS
                       --> exclusive = true
                       --> fin = true
                       --> has_priority = true
                       --> :method: GET
                           :authority: my.server.com
                           :scheme: https
                           :path: /admin/ot/test1.php
                           pragma: no-cache
                           cache-control: no-cache
                           authorization: [38 bytes were stripped]
                           sec-ch-ua: "Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"
                           sec-ch-ua-mobile: ?0
                           upgrade-insecure-requests: 1
                           user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36
                           accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
                           sec-fetch-site: none
                           sec-fetch-mode: navigate
                           sec-fetch-user: ?1
                           sec-fetch-dest: document
                           accept-encoding: gzip, deflate, br
                           accept-language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7
                           cookie: [409 bytes were stripped]
                       --> parent_stream_id = 0
                       --> source_dependency = 27212 (HTTP_STREAM_JOB)
                       --> stream_id = 3
                       --> weight = 256
t=238818 [st=16374]    HTTP2_SESSION_SEND_RST_STREAM
                       --> description = ""
                       --> error_code = "8 (CANCEL)"
                       --> stream_id = 3
t=238846 [st=16402]    HTTP2_SESSION_SEND_HEADERS
                       --> exclusive = true
                       --> fin = true
                       --> has_priority = true
                       --> :method: GET
                           :authority: my.server.com
                           :scheme: https
                           :path: /admin/ot/test1.php
                           pragma: no-cache
                           cache-control: no-cache
                           authorization: [38 bytes were stripped]
                           upgrade-insecure-requests: 1
                           user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36
                           accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
                           sec-fetch-site: none
                           sec-fetch-mode: navigate
                           sec-fetch-user: ?1
                           sec-fetch-dest: document
                           sec-ch-ua: "Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"
                           sec-ch-ua-mobile: ?0
                           accept-encoding: gzip, deflate, br
                           accept-language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7
                           cookie: [409 bytes were stripped]
                       --> parent_stream_id = 0
                       --> source_dependency = 27225 (HTTP_STREAM_JOB)
                       --> stream_id = 5
                       --> weight = 256
t=249924 [st=27480]    HTTP2_SESSION_RECV_HEADERS
                       --> fin = false
                       --> :status: 200
                           date: Thu, 22 Jul 2021 15:13:25 GMT
                           vary: Accept-Encoding
                           content-encoding: gzip
                           strict-transport-security: max-age=63072000; includeSubDomains; preload
                           x-ua-compatible: IE=Edge
                           x-frame-options: sameorigin
                           x-content-type-options: nosniff
                           x-xss-protection: 1; mode=block
                           content-length: 24
                           content-type: text/html; charset=CP1252
                           cache-control: 
                           age: 0
                           x-cache: NOT CACHABLE
                           accept-ranges: bytes
                           via: 1.1 google
                           alt-svc: clear
                       --> stream_id = 5
t=249924 [st=27480]    HTTP2_SESSION_UPDATE_RECV_WINDOW
                       --> delta = -1
                       --> window_size = 15728639
t=249924 [st=27480]    HTTP2_SESSION_UPDATE_RECV_WINDOW
                       --> delta = 1
                       --> window_size = 15728640
t=249924 [st=27480]    HTTP2_SESSION_RECV_DATA
                       --> fin = false
                       --> size = 24
                       --> stream_id = 5
t=249924 [st=27480]    HTTP2_SESSION_UPDATE_RECV_WINDOW
                       --> delta = -24
                       --> window_size = 15728616
t=249925 [st=27481]    HTTP2_SESSION_UPDATE_RECV_WINDOW
                       --> delta = -94
                       --> window_size = 15728522
t=249925 [st=27481]    HTTP2_SESSION_UPDATE_RECV_WINDOW
                       --> delta = 94
                       --> window_size = 15728616
t=249925 [st=27481]    HTTP2_SESSION_UPDATE_RECV_WINDOW
                       --> delta = -1
                       --> window_size = 15728615
t=249925 [st=27481]    HTTP2_SESSION_UPDATE_RECV_WINDOW
                       --> delta = 1
                       --> window_size = 15728616
t=249925 [st=27481]    HTTP2_SESSION_UPDATE_RECV_WINDOW
                       --> delta = -104
                       --> window_size = 15728512
t=249925 [st=27481]    HTTP2_SESSION_UPDATE_RECV_WINDOW
                       --> delta = 104
                       --> window_size = 15728616
t=249925 [st=27481]    HTTP2_SESSION_RECV_DATA
                       --> fin = true
                       --> size = 0
                       --> stream_id = 5
t=249925 [st=27481]    HTTP2_SESSION_PING
                       --> is_ack = false
                       --> type = "received"
                       --> unique_id = 2
t=249925 [st=27481]    HTTP2_SESSION_PING
                       --> is_ack = true
                       --> type = "sent"
                       --> unique_id = 2
t=249927 [st=27483]    HTTP2_SESSION_UPDATE_RECV_WINDOW
                       --> delta = 24
                       --> window_size = 15728640 

演练:

  • 初始请求(有效的请求)从 st=0 开始,在 st=10106 结束(10 秒睡眠)
  • 第二个请求(自动取消的请求)开始于 st=13362,结束于 st=16374(3 秒后)
t=238818 [st=16374]    HTTP2_SESSION_SEND_RST_STREAM
                       --> description = ""
                       --> error_code = "8 (CANCEL)"
                       --> stream_id = 3
  • 然后请求在 st=16402 重新加载,最后在 st=27480 以 10 秒的睡眠延迟返回

老实说,我不知道该怎么办。这可以很容易地复制,但我不知道为什么会发生。

Chrome 在我的公司中主要用于我们的内部工具,所以我觉得它会出于神秘的原因连续 2 次重新加载繁重的处理 URL。

任何帮助将不胜感激。

哦,我确实禁用了我拥有的所有扩展。它没有帮助。无论如何,我没有在 Chrome 日志中看到任何关于任何扩展干预的提及。

【问题讨论】:

  • 很高兴找到这篇文章!您是否向 Chrome 提交了错误报告?我刚刚将 Chrome 更新到 v 93.0.4577.82,我仍然可以使用下面的示例域和我自己的第一次出现问题的域来复制它。
  • 太棒了!这里同样的问题!这是一场噩梦。无法解决!
  • @fast-reflexes 链接失效
  • 因为是安全问题,只有poster和chromium团队可以看到,但已经确认,他们会修复的

标签: google-chrome reload stalled


【解决方案1】:

我认为这个问题可以在任何响应延迟超过 3 秒的域以及服务器端的任何技术上重现。我想这是一个铬问题。我使用 ASP.net MVC 和 AWS Beanstalk 托管复制了它。我还在https://example.com/ 上以不同方式复制了它,当您限制连接以获得更慢的响应时间时。

重现它(在 Chrome 版本 92.0.4515.159(官方构建)(64 位)上):

  1. 打开开发工具并添加非常慢的网络节流配置文件如下
  2. 通过粘贴转到网址:https://example.com/ -> 这应该可以工作
  3. 按 F5 刷新页面 -> 这应该也可以
  4. 现在,非常重要,只需点击地址栏两次,即可看到: 然后按回车键。现在 chrome 的行为有所不同,首先它会尝试 https url,如果 3 秒内没有响应,它会重定向到 http。取消的请求就是我正在谈论的请求。

也许这将有助于某人解决问题。

【讨论】:

  • 我仍然可以在最新的 Chrome (93.0.4577.82) 中重现此内容。如果我将延迟设置为 4000 ms 和上下 1000 kb,我会看到这种降级。在 HSTS 和其他尝试避免 http 连接的情况下,在知名浏览器中看到像这样从 https 降级到 http 非常奇怪。 Firefox 中不存在的行为。想知道这是错误还是功能?
  • 有史以来最奇怪的事情,而且这件事已经发生了很长时间!
  • 更奇怪的是它会为某些帐户复制,而对于其他帐户则不会。在同一台机器上。
【解决方案2】:

同样的问题,我用火狐的时候没有发现这样的问题。一开始我怀疑是服务器端的配置问题。后来发现换环境后问题依旧。最后定位到浏览器端,但不知道具体是什么原因

【讨论】:

  • 如果您找到问题的原因,请告诉我
  • 升级到93版后,问题不再出现。我觉得这个问题应该是谷歌92版的bug
  • Chrome 93.0.4577.82 中仍然为我显示
  • 对我来说仍然出现在 chrome 94
  • 对不起,我发现这个问题还没有解决,但是升级版本后,出现问题的概率会降低
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 2013-10-08
  • 2014-12-12
  • 1970-01-01
相关资源
最近更新 更多