Почему Chrome ставит в очередь на минуту самый первый запрос к сайту при использовании HTTP / 2? - PullRequest
0 голосов
/ 01 мая 2020

У меня есть сайт за 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 ставит в очередь самый первый запрос к сайту на минуту?

Спасибо!

...