Chrome отменяет URL_REQUEST ровно через 3 секунды

#google-chrome #reload #stalled

Вопрос:

Хорошо, так что это очень странно.

Я работаю над php-скриптом, который выполняет большую работу по запросу (обработка изображений). Так что в этом нет ничего необычного, он выдает ответ за 10 секунд, иногда до 30 секунд : это длинный сценарий, и это важно для следующей части.

Регистрируя код обработки изображений, я заметил, что процессы, которые должны быть вызваны только один раз, были вызваны дважды.

Причина : Chrome отменяет первый запрос через 3 секунды, затем снова запрашивает тот же URL-адрес.

Последовательность отмены URL-адреса

Последовательность всегда одна и та же.

  1. Запрошенный URL-адрес
  2. Отмена ровно через 3 секунды
  3. Автоматическая перезагрузка по схеме http
  4. 307 из-за сбоя на нашем сервере
  5. URL-адрес снова запрашивается с помощью https
  6. Этот загружается правильно

Отмененный запрос отображается как отложенный во вкладке «Время».

Заблокированный запрос URL-адреса

Это происходит только в Chrome (для меня 92.0.4515.107). Я не вижу такого поведения в Firefox.

Теперь, как можно воспроизвести это колдовство ? Легко, я могу воспроизводиться на 2 разных серверах у 2 разных поставщиков (GCE и OVH), и у него есть странная связь с продолжительностью первоначального запроса на этот URL-адрес.

  1. Создайте новый php-скрипт на своем веб-сервере, содержащий только

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

  2. Вызовите URL-адрес вашего скрипта в Chrome
  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 секунды.

Но 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.

Комментарии:

1. Рад найти этот пост! Вы подали сообщение об ошибке в Chrome? Я ТОЛЬКО что обновил Chrome до версии 93.0.4577.82, и я все еще могу повторить это как в примере домена ниже, так и в своем собственном домене, где впервые возникла проблема.

2. Поданный отчет об ошибке: bugs.chromium.org/p/chromium/issues/detail?id=1251065

3. Потрясающе! Та же проблема и здесь! Это настоящий кошмар. Не могу обойти это!

4. @быстрые рефлексы ссылка не работает

5. Это связано с тем, что это проблема безопасности, которую могут видеть только плакат и команда chromium, но это подтверждено, и они исправят ее

Ответ №1:

Я думаю, что эта проблема может быть воспроизведена в любом домене, который реагирует с задержкой более 3 секунд и с любой технологией на стороне сервера. Я полагаю, что это проблема с хромом. Я воспроизвел его с ASP.net Хостинг MVC и AWS Beanstalk. Я также воспроизвел его по-другому на https://example.com/ когда вы регулируете соединение, чтобы снизить время отклика.

Чтобы воспроизвести его (в Chrome версии 92.0.4515.159 (Официальная сборка) (64-разрядная версия)):

  1. Откройте Инструменты разработки и добавьте Профиль очень медленного регулирования сети следующим образом Профили регулирования Сети
  2. перейдите по ссылке, вставив: https://example.com/ -> это должно сработать
  3. обновите страницу, нажав F5 -> это тоже должно сработать
  4. теперь, очень важно, просто дважды щелкните адресную строку, чтобы увидеть: URL-адреси затем нажмите enter. Теперь chrome ведет себя по-другому, и сначала он пробует URL-адрес https, и если в течение 3 секунд нет ответа, он перенаправляется на http. Отмененный запрос-это тот, о котором я говорю. Сетевые запросы

Может быть, это поможет sb решить проблему.

Комментарии:

1. Я все еще могу воспроизвести это в новейшем Chrome (93.0.4577.82). Если я установлю задержку на 4000 мс и 1000 кб вверх и вниз, я увижу это понижение. ОЧЕНЬ странно видеть такие понижения от https до http в хорошо известном браузере во времена HSTS и других попыток избежать http-соединений. Поведение, отсутствующее в Firefox. Интересно, это ошибка или функция?

2. Самая странная вещь на свете, и это происходит уже очень давно!

3. Что еще более странно, так это то, что для некоторых учетных записей он воспроизводится, а для других-нет. На той же машине.

Ответ №2:

Для той же проблемы я не обнаружил такой проблемы, когда использовал Firefox. Сначала я заподозрил, что это проблема конфигурации на стороне сервера. Позже я обнаружил, что проблема осталась после изменения окружающей среды. Наконец, он был расположен на стороне браузера, но я не знаю, в чем конкретная причина

Комментарии:

1. Если вы обнаружите причину проблемы, пожалуйста, дайте мне знать

2. После обновления до версии 93 проблема больше не возникает. Я думаю, что эта проблема должна быть ошибкой в Google версии 92

3. По-прежнему отображается для меня в Chrome 93.0.4577.82

4. Для меня все еще появляется в chrome 94

5. Извините, я обнаружил, что эта проблема не решена, но после обновления версии вероятность возникновения проблемы снизится