У меня есть сайт за Cloudflare, который поддерживает HTTP / 2. Google Chrome на моей Ma c также поддерживает его, и я подтвердил, что он устанавливает HTTP / 2-соединение с моим сайтом.
Во время навигации по моему сайту я заметил это много раз и случайно раз самый первый сетевой запрос на загрузку страницы помещается в очередь на 50-60 секунд.
Мне известно о старом пределе TCP в 6 соединений, но это не должно относиться к HTTP / 2. Кроме того, это самый первый запрос на загрузку текущей страницы (например, https://example.com/mypage), и в то же время никакие другие ресурсы не запрашиваются.
Следующее было взято из файла HAR, который я сгенерировал при возникновении проблемы, и это самая первая запись в списке.
{
"startedDateTime": "2020-04-30T10:04:23.280Z",
"time": 52729.078000003945,
"request": {
"method": "GET",
"url": "https://example.com/",
"httpVersion": "http/2.0",
"headers": [
{
"name": ":method",
"value": "GET"
},
{
"name": ":authority",
"value": "REDACTED"
},
{
"name": ":scheme",
"value": "https"
},
{
"name": ":path",
"value": "/"
},
{
"name": "pragma",
"value": "no-cache"
},
{
"name": "cache-control",
"value": "no-cache"
},
{
"name": "upgrade-insecure-requests",
"value": "1"
},
{
"name": "user-agent",
"value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36"
},
{
"name": "accept",
"value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
},
{
"name": "sec-fetch-site",
"value": "same-origin"
},
{
"name": "sec-fetch-mode",
"value": "navigate"
},
{
"name": "sec-fetch-user",
"value": "?1"
},
{
"name": "sec-fetch-dest",
"value": "document"
},
{
"name": "referer",
"value": "REDACTED"
},
{
"name": "accept-encoding",
"value": "gzip, deflate, br"
},
{
"name": "accept-language",
"value": "en-US,en;q=0.9,ga;q=0.8,it;q=0.7,fr;q=0.6"
},
{
"name": "cookie",
"value": "REDACTED"
}
],
"queryString": [],
"cookies": [
{
"name": "REDACTED",
"value": "REDACTED",
"expires": null,
"httpOnly": false,
"secure": false
}
],
"headersSize": -1,
"bodySize": 0
},
"response": {
"status": 200,
"statusText": "",
"httpVersion": "http/2.0",
"headers": [
{
"name": "status",
"value": "200"
},
{
"name": "date",
"value": "Thu, 30 Apr 2020 10:05:15 GMT"
},
{
"name": "content-type",
"value": "text/html; charset=utf-8"
},
{
"name": "cache-control",
"value": "stale-if-error=1800, max-age=0, stale-while-revalidate=30, must-revalidate, public, s-maxage=120"
},
{
"name": "cf-bgj",
"value": "h2pri"
},
{
"name": "content-security-policy-report-only",
"value": "REDACTED"
},
{
"name": "expect-ct",
"value": "max-age=604800, REDACTED"
},
{
"name": "nel",
"value": "REDACTED"
},
{
"name": "report-to",
"value": "REDACTED"
},
{
"name": "x-frame-options",
"value": "SAMEORIGIN"
},
{
"name": "x-ua-compatible",
"value": "IE=edge"
},
{
"name": "x-xss-protection",
"value": "1; mode=block"
},
{
"name": "cf-cache-status",
"value": "HIT"
},
{
"name": "age",
"value": "69"
},
{
"name": "vary",
"value": "Accept-Encoding"
},
{
"name": "strict-transport-security",
"value": "max-age=31536000"
},
{
"name": "x-content-type-options",
"value": "nosniff"
},
{
"name": "server",
"value": "cloudflare"
},
{
"name": "cf-ray",
"value": "REDACTED-DUB"
},
{
"name": "content-encoding",
"value": "br"
},
{
"name": "alt-svc",
"value": "h3-27=\":443\"; ma=86400, h3-25=\":443\"; ma=86400, h3-24=\":443\"; ma=86400, h3-23=\":443\"; ma=86400"
},
{
"name": "cf-request-id",
"value": "REDACTED"
}
],
"cookies": [],
"content": {
"size": 135426,
"mimeType": "text/html",
"text": "REDACTED"
},
"redirectURL": "",
"headersSize": -1,
"bodySize": -1,
"_transferSize": 21122
},
"cache": {},
"timings": {
"blocked": 52613.40899999931,
"dns": -1,
"ssl": -1,
"connect": -1,
"send": 1.1959999999999997,
"wait": 95.19299999691872,
"receive": 19.28000000771135,
"_blocked_queueing": 52609.24399999931
},
"serverIPAddress": "REDACTED",
"_initiator": {
"type": "other"
},
"_priority": "VeryHigh",
"_resourceType": "document",
"connection": "159221",
"pageref": "page_1"
}
Обратите внимание на объект синхронизации. Запрос был поставлен в очередь на 52 секунды, а затем был выполнен очень быстро.
Другие вкладки в браузере не были открыты. Соединения с одним и тем же сайтом не были открыты разными способами.
Почему Chrome ставит в очередь самый первый запрос к сайту на минуту?
Спасибо!