{
  "$schema": "https://datapackage.org/profiles/2.0/datapackage.json",
  "name": "cdn-polish-web-2026-09-24",
  "title": "CDNs on Polish homepages and the first byte behind them",
  "description": "Every .pl site in a pinned Tranco list whose homepage answered with HTML: the CDN its response headers name, the edge that answered a client in Poland, whether the HTML came from the CDN's cache, the census client's connection and wait times, and the phone TTFB and LCP p75 from the Chrome UX Report.",
  "version": "2026-09-24",
  "created": "2026-10-15T12:26:46.323Z",
  "homepage": "https://www.outofplace.space/blog/cdn-polish-web",
  "keywords": [
    "CDN",
    "Cloudflare",
    "CloudFront",
    "TTFB",
    "LCP",
    "cache",
    "Poland"
  ],
  "licenses": [
    {
      "name": "CC-BY-4.0",
      "path": "https://creativecommons.org/licenses/by/4.0/",
      "title": "Creative Commons Attribution 4.0"
    }
  ],
  "contributors": [
    {
      "title": "Outofplace Poland sp. z o.o.",
      "roles": [
        "creator"
      ],
      "path": "https://www.outofplace.space"
    }
  ],
  "sources": [
    {
      "title": "Tranco list Y8YYG (https://doi.org/10.14722/ndss.2019.23386)",
      "path": "https://tranco-list.eu/list/Y8YYG/1000000"
    },
    {
      "title": "Chrome UX Report (Google, CC BY 4.0)",
      "path": "https://developer.chrome.com/docs/crux"
    }
  ],
  "resources": [
    {
      "name": "sites",
      "path": "sites.csv",
      "type": "table",
      "format": "csv",
      "mediatype": "text/csv",
      "encoding": "utf-8",
      "bytes": 1116015,
      "hash": "sha256:15eb3613ca2b4961daee91321d8c89ea280ef3d0a01a1a00fa22a5a661369749",
      "dialect": {
        "header": true,
        "delimiter": ",",
        "lineTerminator": "\r\n",
        "quoteChar": "\"",
        "doubleQuote": true
      },
      "schema": {
        "fields": [
          {
            "name": "rank_tranco",
            "type": "integer",
            "description": "Rank in the pinned Tranco list (the highest-ranked domain per origin)."
          },
          {
            "name": "rank_sample",
            "type": "integer",
            "description": "Rank among the sample's origins."
          },
          {
            "name": "rank_band",
            "type": "string",
            "description": "top100 (sample ranks 1-100), top1000 (101-1,000) or rest."
          },
          {
            "name": "domain",
            "type": "string",
            "description": "The .pl domain from the Tranco list."
          },
          {
            "name": "origin",
            "type": "string",
            "description": "The homepage's final origin after redirects."
          },
          {
            "name": "cdn",
            "type": "string",
            "description": "The CDN the final response's headers name first, or none."
          },
          {
            "name": "cdns",
            "type": "string",
            "description": "Every CDN the headers name, space-separated."
          },
          {
            "name": "edge",
            "type": "string",
            "description": "Edge code the CDN reports (cf-ray, X-Amz-Cf-Pop, X-Served-By, X-CDN-nazwa.pl-location)."
          },
          {
            "name": "html_cache",
            "type": "string",
            "description": "HTML from the CDN's cache: hit, miss, not_cached (passed on by rule) or unknown."
          },
          {
            "name": "cache_token",
            "type": "string",
            "description": "First word of the CDN's cache header, upper-cased (DYNAMIC, BYPASS, HIT, MISS…)."
          },
          {
            "name": "server_product",
            "type": "string",
            "description": "First product token of the Server header, without version."
          },
          {
            "name": "server",
            "type": "string",
            "description": "Web server family from the Server header."
          },
          {
            "name": "hops",
            "type": "integer",
            "description": "Responses in the homepage's redirect chain, the final one included."
          },
          {
            "name": "is_shop",
            "type": "boolean",
            "trueValues": [
              "1"
            ],
            "falseValues": [
              "0"
            ],
            "description": "The homepage is an online shop (classifier of the Core Web Vitals study)."
          },
          {
            "name": "platform",
            "type": "string",
            "description": "Shop platform, when recognised."
          },
          {
            "name": "connect_ms",
            "type": "integer",
            "description": "Census: ms to a ready connection (DNS, TCP, TLS) on the final hop."
          },
          {
            "name": "ttfb_ms",
            "type": "integer",
            "description": "Census: ms from the request's start to the first response byte, final hop."
          },
          {
            "name": "wait_ms",
            "type": "integer",
            "description": "Census: ttfb_ms minus connect_ms, the wait from sending the request to the first byte."
          },
          {
            "name": "probed_at",
            "type": "datetime",
            "description": "UTC time of the census fetch."
          }
        ],
        "missingValues": [
          ""
        ]
      }
    },
    {
      "name": "cdns",
      "path": "cdns.csv",
      "type": "table",
      "format": "csv",
      "mediatype": "text/csv",
      "encoding": "utf-8",
      "bytes": 889,
      "hash": "sha256:54b8f170795577af06385feebe387f91cef8392d889aa5cb76072a11ad13cefc",
      "dialect": {
        "header": true,
        "delimiter": ",",
        "lineTerminator": "\r\n",
        "quoteChar": "\"",
        "doubleQuote": true
      },
      "schema": {
        "fields": [
          {
            "name": "cdn",
            "type": "string",
            "description": "CDN, as named by the study's rules."
          },
          {
            "name": "grp",
            "type": "string",
            "description": "CDN group: cloudflare, cloudfront, nazwapl, other_cdn (akamai, azure_front_door, bunny, ddos_guard, fastly, google_cloud, hostinger, imperva, netlify, sucuri, vercel), none (no CDN in the headers)."
          },
          {
            "name": "sites",
            "type": "integer",
            "description": "Homepages whose headers name it first."
          },
          {
            "name": "share",
            "type": "number",
            "description": "Share of all homepages in the sample."
          },
          {
            "name": "share_ci_low",
            "type": "number",
            "description": "Wilson 95% lower bound."
          },
          {
            "name": "share_ci_high",
            "type": "number",
            "description": "Wilson 95% upper bound."
          },
          {
            "name": "top100",
            "type": "integer",
            "description": "Of them, in sample ranks 1-100."
          },
          {
            "name": "top1000",
            "type": "integer",
            "description": "Of them, in sample ranks 101-1,000."
          },
          {
            "name": "rest",
            "type": "integer",
            "description": "Of them, below rank 1,000."
          },
          {
            "name": "crux_origins",
            "type": "integer",
            "description": "Of them, origins with a CrUX phone record."
          }
        ],
        "missingValues": [
          ""
        ]
      }
    },
    {
      "name": "bands",
      "path": "bands.csv",
      "type": "table",
      "format": "csv",
      "mediatype": "text/csv",
      "encoding": "utf-8",
      "bytes": 931,
      "hash": "sha256:b7e907da32504bd343e07bff625c44bf5e3001c1e5ab23a6aa4abbe180ffbb7d",
      "dialect": {
        "header": true,
        "delimiter": ",",
        "lineTerminator": "\r\n",
        "quoteChar": "\"",
        "doubleQuote": true
      },
      "schema": {
        "fields": [
          {
            "name": "band",
            "type": "string",
            "description": "all, top100, top1000 (ranks 101-1,000) or rest."
          },
          {
            "name": "grp",
            "type": "string",
            "description": "CDN group: cloudflare, cloudfront, nazwapl, other_cdn (akamai, azure_front_door, bunny, ddos_guard, fastly, google_cloud, hostinger, imperva, netlify, sucuri, vercel), none (no CDN in the headers)."
          },
          {
            "name": "sites",
            "type": "integer",
            "description": "Homepages in the band and group."
          },
          {
            "name": "band_sites",
            "type": "integer",
            "description": "Homepages in the band."
          },
          {
            "name": "share",
            "type": "number",
            "description": "Share of the band's homepages."
          },
          {
            "name": "share_ci_low",
            "type": "number",
            "description": "Wilson 95% lower bound."
          },
          {
            "name": "share_ci_high",
            "type": "number",
            "description": "Wilson 95% upper bound."
          }
        ],
        "missingValues": [
          ""
        ]
      }
    },
    {
      "name": "edges",
      "path": "edges.csv",
      "type": "table",
      "format": "csv",
      "mediatype": "text/csv",
      "encoding": "utf-8",
      "bytes": 421,
      "hash": "sha256:d77ed9510280714b845410a585b763a9939651db1b67dc8107acec578a84a3eb",
      "dialect": {
        "header": true,
        "delimiter": ",",
        "lineTerminator": "\r\n",
        "quoteChar": "\"",
        "doubleQuote": true
      },
      "schema": {
        "fields": [
          {
            "name": "cdn",
            "type": "string",
            "description": "CDN."
          },
          {
            "name": "edge",
            "type": "string",
            "description": "Edge location code the CDN reported to the census client."
          },
          {
            "name": "sites",
            "type": "integer",
            "description": "Homepages answered from that edge."
          },
          {
            "name": "cdn_sites",
            "type": "integer",
            "description": "Homepages behind the CDN."
          },
          {
            "name": "share",
            "type": "number",
            "description": "Share of the CDN's homepages."
          },
          {
            "name": "share_ci_low",
            "type": "number",
            "description": "Wilson 95% lower bound."
          },
          {
            "name": "share_ci_high",
            "type": "number",
            "description": "Wilson 95% upper bound."
          }
        ],
        "missingValues": [
          ""
        ]
      }
    },
    {
      "name": "cache",
      "path": "cache.csv",
      "type": "table",
      "format": "csv",
      "mediatype": "text/csv",
      "encoding": "utf-8",
      "bytes": 765,
      "hash": "sha256:6e743064c442bc59c22fb567384ebe11878847eb8960e6a185c0b025507cf816",
      "dialect": {
        "header": true,
        "delimiter": ",",
        "lineTerminator": "\r\n",
        "quoteChar": "\"",
        "doubleQuote": true
      },
      "schema": {
        "fields": [
          {
            "name": "grp",
            "type": "string",
            "description": "CDN group: cloudflare, cloudfront, nazwapl, other_cdn (akamai, azure_front_door, bunny, ddos_guard, fastly, google_cloud, hostinger, imperva, netlify, sucuri, vercel), none (no CDN in the headers)."
          },
          {
            "name": "html_cache",
            "type": "string",
            "description": "hit, miss, not_cached or unknown."
          },
          {
            "name": "sites",
            "type": "integer",
            "description": "Homepages in the group with that state."
          },
          {
            "name": "group_sites",
            "type": "integer",
            "description": "Homepages in the group."
          },
          {
            "name": "share",
            "type": "number",
            "description": "Share of the group's homepages."
          },
          {
            "name": "share_ci_low",
            "type": "number",
            "description": "Wilson 95% lower bound."
          },
          {
            "name": "share_ci_high",
            "type": "number",
            "description": "Wilson 95% upper bound."
          }
        ],
        "missingValues": [
          ""
        ]
      }
    },
    {
      "name": "timings",
      "path": "timings.csv",
      "type": "table",
      "format": "csv",
      "mediatype": "text/csv",
      "encoding": "utf-8",
      "bytes": 473,
      "hash": "sha256:dd1af20541b6a52443f619543d11e1ead505c9e557c8b8aa953b6a5bee601f82",
      "dialect": {
        "header": true,
        "delimiter": ",",
        "lineTerminator": "\r\n",
        "quoteChar": "\"",
        "doubleQuote": true
      },
      "schema": {
        "fields": [
          {
            "name": "grp",
            "type": "string",
            "description": "Speed group: the CDN group, Cloudflare split by cf-cache-status (hit, not_cached, other = miss or none) and CloudFront by X-Cache (hit, miss)."
          },
          {
            "name": "sites",
            "type": "integer",
            "description": "Homepages in the group."
          },
          {
            "name": "timed",
            "type": "integer",
            "description": "Homepages with both timings."
          },
          {
            "name": "connect_median_ms",
            "type": "number",
            "description": "Median connection set-up (DNS, TCP, TLS) from the census client, ms."
          },
          {
            "name": "connect_ci_low",
            "type": "number",
            "description": "Bootstrap 95% lower bound."
          },
          {
            "name": "connect_ci_high",
            "type": "number",
            "description": "Bootstrap 95% upper bound."
          },
          {
            "name": "wait_median_ms",
            "type": "number",
            "description": "Median wait from the request to the first byte from the census client, ms."
          },
          {
            "name": "wait_ci_low",
            "type": "number",
            "description": "Bootstrap 95% lower bound."
          },
          {
            "name": "wait_ci_high",
            "type": "number",
            "description": "Bootstrap 95% upper bound."
          }
        ],
        "missingValues": [
          ""
        ]
      }
    },
    {
      "name": "vitals",
      "path": "vitals.csv",
      "type": "table",
      "format": "csv",
      "mediatype": "text/csv",
      "encoding": "utf-8",
      "bytes": 966,
      "hash": "sha256:203800d3ae03fec2553d8207081c84f2e6d6170c9f7828b506d5f93a89ea3e27",
      "dialect": {
        "header": true,
        "delimiter": ",",
        "lineTerminator": "\r\n",
        "quoteChar": "\"",
        "doubleQuote": true
      },
      "schema": {
        "fields": [
          {
            "name": "grp",
            "type": "string",
            "description": "Speed group: the CDN group, Cloudflare split by cf-cache-status (hit, not_cached, other = miss or none) and CloudFront by X-Cache (hit, miss)."
          },
          {
            "name": "sites",
            "type": "integer",
            "description": "Homepages in the group."
          },
          {
            "name": "origins",
            "type": "integer",
            "description": "Origins with a CrUX phone record."
          },
          {
            "name": "ttfb_median_ms",
            "type": "number",
            "description": "Median of the origins' phone TTFB p75, ms."
          },
          {
            "name": "ttfb_ci_low",
            "type": "number",
            "description": "Bootstrap 95% lower bound."
          },
          {
            "name": "ttfb_ci_high",
            "type": "number",
            "description": "Bootstrap 95% upper bound."
          },
          {
            "name": "ttfb_good",
            "type": "number",
            "description": "Share of origins with TTFB p75 at or under 800 ms."
          },
          {
            "name": "ttfb_good_ci_low",
            "type": "number",
            "description": "Wilson 95% lower bound."
          },
          {
            "name": "ttfb_good_ci_high",
            "type": "number",
            "description": "Wilson 95% upper bound."
          },
          {
            "name": "lcp_origins",
            "type": "integer",
            "description": "Origins with an LCP p75."
          },
          {
            "name": "lcp_median_ms",
            "type": "number",
            "description": "Median of the origins' phone LCP p75, ms."
          },
          {
            "name": "lcp_ci_low",
            "type": "number",
            "description": "Bootstrap 95% lower bound."
          },
          {
            "name": "lcp_ci_high",
            "type": "number",
            "description": "Bootstrap 95% upper bound."
          },
          {
            "name": "lcp_good",
            "type": "number",
            "description": "Share of origins with LCP p75 at or under 2500 ms."
          },
          {
            "name": "lcp_good_ci_low",
            "type": "number",
            "description": "Wilson 95% lower bound."
          },
          {
            "name": "lcp_good_ci_high",
            "type": "number",
            "description": "Wilson 95% upper bound."
          }
        ],
        "missingValues": [
          ""
        ]
      }
    },
    {
      "name": "summary",
      "path": "summary.json",
      "description": "Headline numbers and chart rows from the CSVs.",
      "format": "json",
      "mediatype": "application/json",
      "encoding": "utf-8",
      "bytes": 40036,
      "hash": "sha256:9eb7445a3c8b91f5493891b453da1569e694bded9b416977210e79cbc7cffb9a"
    }
  ]
}
