|
| 1 | +#standardSQL |
| 2 | +# distribution_of_http_versions: Percentage of HTTPS responses by protocol |
| 3 | +SELECT |
| 4 | + a.client, |
| 5 | + cdn, |
| 6 | + is_main_document, |
| 7 | + COUNTIF(IFNULL(a.protocol, b.protocol) = 'HTTP/0.9') AS http09, |
| 8 | + COUNTIF(IFNULL(a.protocol, b.protocol) = 'HTTP/1.0') AS http10, |
| 9 | + COUNTIF(IFNULL(a.protocol, b.protocol) = 'HTTP/1.1') AS http11, |
| 10 | + COUNTIF(IFNULL(a.protocol, b.protocol) = 'HTTP/2') AS http2, |
| 11 | + COUNTIF(IFNULL(a.protocol, b.protocol) = 'H3-29' OR IFNULL(a.protocol, b.protocol) = 'H3-Q050') AS http3, |
| 12 | + COUNTIF(IFNULL(a.protocol, b.protocol) NOT IN ('HTTP/0.9', 'HTTP/1.0', 'HTTP/1.1', 'HTTP/2', 'H3-29', 'H3-Q050')) AS http_other, |
| 13 | + COUNTIF(isSecure OR IFNULL(a.protocol, b.protocol) = 'HTTP/2') AS tls_total, |
| 14 | + COUNTIF(IFNULL(a.protocol, b.protocol) = 'HTTP/0.9') / COUNT(0) AS http09_pct, |
| 15 | + COUNTIF(IFNULL(a.protocol, b.protocol) = 'HTTP/1.0') / COUNT(0) AS http10_pct, |
| 16 | + COUNTIF(IFNULL(a.protocol, b.protocol) = 'HTTP/1.1') / COUNT(0) AS http11_pct, |
| 17 | + COUNTIF(IFNULL(a.protocol, b.protocol) = 'HTTP/2') / COUNT(0) AS http2_pct, |
| 18 | + COUNTIF(IFNULL(a.protocol, b.protocol) = 'H3-29' OR IFNULL(a.protocol, b.protocol) = 'H3-Q050') / COUNT(0) AS http3_pct, |
| 19 | + COUNTIF(IFNULL(a.protocol, b.protocol) NOT IN ('HTTP/0.9', 'HTTP/1.0', 'HTTP/1.1', 'HTTP/2', 'H3-29', 'H3-Q050')) / COUNT(0) AS http_other_pct, |
| 20 | + COUNTIF(isSecure OR IFNULL(a.protocol, b.protocol) = 'HTTP/2') / COUNT(0) AS tls_pct, |
| 21 | + COUNT(0) AS total |
| 22 | +FROM |
| 23 | + ( |
| 24 | + SELECT |
| 25 | + client, |
| 26 | + page, |
| 27 | + url, |
| 28 | + is_main_document, |
| 29 | + # WPT is inconsistent with protocol population. |
| 30 | + UPPER(IFNULL(JSON_EXTRACT_SCALAR(payload, '$._protocol'), IFNULL(NULLIF(JSON_EXTRACT_SCALAR(payload, '$._tls_next_proto'), 'unknown'), NULLIF(CONCAT('HTTP/', JSON_EXTRACT_SCALAR(payload, '$.response.httpVersion')), 'HTTP/')))) AS protocol, |
| 31 | + JSON_EXTRACT_SCALAR(payload, '$._tls_version') AS tlsVersion, |
| 32 | + |
| 33 | + # WPT joins CDN detection but we bias to the DNS detection which is the first entry |
| 34 | + IFNULL(NULLIF(REGEXP_EXTRACT(JSON_EXTRACT_SCALAR(summary, '$._cdn_provider'), r'^([^,]*).*'), ''), 'ORIGIN') AS cdn, |
| 35 | + CAST(JSON_EXTRACT(payload, '$.timings.ssl') AS INT64) AS tlstime, |
| 36 | + |
| 37 | + # isSecure reports what the browser thought it was going to use, but it can get upgraded with STS OR UpgradeInsecure: 1 |
| 38 | + IF(STARTS_WITH(url, 'https') OR JSON_EXTRACT_SCALAR(payload, '$._tls_version') IS NOT NULL OR CAST(JSON_EXTRACT(payload, '$._is_secure') AS INT64) = 1, TRUE, FALSE) AS isSecure, |
| 39 | + CAST(JSON_EXTRACT(payload, '$._socket') AS INT64) AS socket |
| 40 | + FROM |
| 41 | + `httparchive.all.requests` CROSS JOIN UNNEST(response_headers) AS r |
| 42 | + --`httparchive.sample_data.requests` |
| 43 | + WHERE |
| 44 | + # WPT changes the response fields based on a redirect (url becomes the Location path instead of the original) causing insonsistencies in the counts, so we ignore them |
| 45 | + date = '2024-06-01' AND |
| 46 | + r.name = 'location' AND |
| 47 | + (r.value = '' OR r.value IS NULL) |
| 48 | + ) a |
| 49 | +LEFT JOIN |
| 50 | + ( |
| 51 | + SELECT |
| 52 | + client, |
| 53 | + page, |
| 54 | + CAST(JSON_EXTRACT(payload, '$._socket') AS INT64) AS socket, |
| 55 | + ANY_VALUE(UPPER(IFNULL(JSON_EXTRACT_SCALAR(payload, '$._protocol'), IFNULL(NULLIF(JSON_EXTRACT_SCALAR(payload, '$._tls_next_proto'), 'unknown'), NULLIF(concat('HTTP/', JSON_EXTRACT_SCALAR(payload, '$.response.httpVersion')), 'HTTP/'))))) AS protocol, |
| 56 | + ANY_VALUE(JSON_EXTRACT_SCALAR(payload, '$._tls_version')) AS tlsVersion |
| 57 | + FROM |
| 58 | + `httparchive.all.requests` |
| 59 | + WHERE |
| 60 | + JSON_EXTRACT_SCALAR(payload, '$._tls_version') IS NOT NULL AND |
| 61 | + IFNULL(JSON_EXTRACT_SCALAR(payload, '$._protocol'), IFNULL(NULLIF(JSON_EXTRACT_SCALAR(payload, '$._tls_next_proto'), 'unknown'), NULLIF(concat('HTTP/', |
| 62 | + JSON_EXTRACT_SCALAR(payload, '$.response.httpVersion')), 'HTTP/'))) IS NOT NULL AND |
| 63 | + JSON_EXTRACT(payload, '$._socket') IS NOT NULL AND |
| 64 | + date = '2024-06-01' |
| 65 | + GROUP BY |
| 66 | + client, |
| 67 | + page, |
| 68 | + socket |
| 69 | + ) b ON (a.client = b.client AND a.page = b.page AND a.socket = b.socket) |
| 70 | + |
| 71 | +GROUP BY |
| 72 | + client, |
| 73 | + cdn, |
| 74 | + is_main_document |
| 75 | +ORDER BY |
| 76 | + client DESC, |
| 77 | + total DESC |
0 commit comments