Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add HTTP/3 SQL query #111

Merged
merged 2 commits into from
Jun 24, 2021
Merged

Add HTTP/3 SQL query #111

merged 2 commits into from
Jun 24, 2021

Conversation

tunetheweb
Copy link
Member

@tunetheweb tunetheweb commented Jun 24, 2021

HTTP/3 is here! Well QUIC is and HTTP/3 is not far behind. We've already noticed HTTP/2 dropping because of this so think we should add an HTTP/3 graph, so adding the query is the first part of this.

There's a few complexities to consider compared to the equivalent HTTP/2 graph:

The HTTP/2 query is ridiculously expensive (see #110 ). I've gone for the cheaper suggestion for HTTP/3 since we don't need that historical data when the data was wrong. It's not quite as cheap as the HTTP/2 suggestion as need to look at alt-svc response header (for reasons I'll discuss below), but still it's only $15 as opposed to $1,000+.

HTTP/3 has been around for a while in pre-release versions and arguably Google's QUIC could be included in this going back nearly 10 years. However I've decided to limit this to HTTP/3 (aka h3), however I have included the last draft version (h3-29) as that is what will become HTTP/3 as soon as the IETF signs of the RFCs — so it is HTTP/3 in all but name. It is also what is being used now, and so explains the offset from HTTP/2 dropping, whereas waiting for h3 will show a delay between that drop, and this ramp up. That h3-29 version started appearing from June 2020 so the graph will start before HTTP/3 officially exists but think that's OK. This sheet ran the query for a few combinations and current usage is from 0% (pure HTTP/3 or h3), 9-10% (HTTP/3, h3 or h3-29), slightly higher 9-10% for all versions of h3, and 11.5% if we also include Google's QUIC. So I think the second option is the right one.

HTTP/3 will often not be used by our crawl. This is because, by default the browser uses TCP and then receives an alt-svc header saying "hey I support HTTP/3, so next time you're talking to me why not use that." If it needs to open another connection (e.g. an uncredentialled connection for Fetch or the like) then it might use HTTP/3, but it's not gonna be consistent. This is different to HTTP/2 where it's negotiated as part of HTTPS so should be used if supported. So, rather than measure HTTP/3 usage, I've decided to measure HTTP/3 support by looking at protocol used OR alt-svc support. Got some support online for this approach. Will need to add an explanation to the chart when we add this to the site to explain this difference from HTTP/2 and how it may double count usage in both HTTP/2 and HTTP/3 chart for some sites but think it's the right measure.

@rmarx
Copy link

rmarx commented Jun 24, 2021

I do think this is the correct approach.

Some further thoughts:

  • h3 is already "officially" in use today. Even though the RFC hasn't landed, the IETF decided to just start deploying h3 together with QUIC v1 (RFC9000 and siblings). Most big deployments today do both h3 and h3-29 IIUC, the latter primarily to support older clients (e.g., mainline version of Safari only does h3-29 for now). It's a small nit, but somewhat important :)

  • If query cost is the problem, then I don't think it'd be such a big problem to cut down the logic to just checking alt-svc, dropping the check for the actually used protocol (with respHttpVersion). In practice, most H3 deployments will emit alt-svc headers on H3 responses as well, so these should overlap anyway. This could however diverge in the future if people deploy significantly different setups for H3 compared to H2, but at least for now I'd be surprised to find a large discrepancy. For future proofness, it's of course best to keep respHttpVersion as well.

  • I'd really like to find out if chrome is abandoning existing H2 connections when H3 has been established, or if it's just using H3 for new connections (e.g., like you say, differently credentialed). I'm not sure how easy it is to check that (or if you want to include that in this query or another for the Almanac say), but I was hoping maybe there's like a isCredentialed field somewhere that might give an indication? Knowing this might have a big impact on how you explain the results + also on how people should interpret their own results going forward.

@tunetheweb
Copy link
Member Author

tunetheweb commented Jun 24, 2021

h3 is already "officially" in use today. Even though the RFC hasn't landed, the IETF decided to just start deploying h3 together with QUIC v1 (RFC9000 and siblings). Most big deployments today do both h3 and h3-29 IIUC, the latter primarily to support older clients (e.g., mainline version of Safari only does h3-29 for now). It's a small nit, but somewhat important :)

I'm not sure that's quite true yet. The June crawl is just finishing but for the May crawl I saw very little h3 advertisement sin alt-svc. And my own Chrome is still using h3-29 for example even when h3 is supported by the server (though is alt-svc is preferred order, cause h3-27 is listed before h3?).

But anyway, I agree it's a short term measure and h3-29 is, to all intents and purposes, h3 so happy to include both.

If query cost is the problem, then I don't think it'd be such a big problem to cut down the logic to just checking alt-svc, dropping the check for the actually used protocol (with respHttpVersion).

Actually checking the alt-svc header is more expensive that the req/resp version 😁 But anyway it's not an issue. Just didn't want to parse out the _protocol from the HAR across every request for ever month, which is what the HTTP/2 query is currently doing cause that is REALLY expensive.

I'd really like to find out if chrome is abandoning existing H2 connections when H3 has been established, or if it's just using H3 for new connections (e.g., like you say, differently credentialed)

Let's take this point off line as not really related to this PR. We can explore as part of the HTTP chapter of the Web Almanac. I would ask have you any evidence to suggest it will abandon connections to switch to HTTP/3 connections? Seems inefficient when a connection is already established.

sql/timeseries/h3.sql Outdated Show resolved Hide resolved
sql/timeseries/h3.sql Show resolved Hide resolved
sql/timeseries/h3.sql Show resolved Hide resolved
Co-authored-by: Rick Viscomi <[email protected]>
sql/timeseries/h3.sql Show resolved Hide resolved
@rviscomi rviscomi merged commit 0937502 into master Jun 24, 2021
@rviscomi rviscomi deleted the add-http3-query branch June 24, 2021 18:33
@tunetheweb
Copy link
Member Author

Just follow up, I did some more digging on the "dip":

 select '2020_05_01' as date, count(1) as NumResponses,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3%') as anyh3,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3-27=%') as h327,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3-29=%') as h329,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') = 'clear') as clear,
 COUNTIF(respOtherHeaders LIKE '%alt-svc%') as altsvc,
 COUNTIF(lower(_cdn_provider) LIKE '%cloudflare%') as cloudflare,
 COUNTIF(lower(_cdn_provider) LIKE '%cloudflare%' AND respOtherHeaders LIKE '%alt-svc%') as cloudflare_altsvc,
 COUNTIF(lower(_cdn_provider) LIKE '%google%') as google,
 COUNTIF(lower(_cdn_provider) LIKE '%google%' AND respOtherHeaders LIKE '%alt-svc%') as google_altsvc
 from `httparchive.summary_requests.2020_05_01_desktop`
 UNION ALL
 select '2020_06_01' as date, count(1) as NumResponses,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3%') as anyh3,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3-27=%') as h327,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3-29=%') as h329,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') = 'clear') as clear,
 COUNTIF(respOtherHeaders LIKE '%alt-svc%') as altsvc,
 COUNTIF(lower(_cdn_provider) LIKE '%cloudflare%') as cloudflare,
 COUNTIF(lower(_cdn_provider) LIKE '%cloudflare%' AND respOtherHeaders LIKE '%alt-svc%') as cloudflare_altsvc,
 COUNTIF(lower(_cdn_provider) LIKE '%google%') as google,
 COUNTIF(lower(_cdn_provider) LIKE '%google%' AND respOtherHeaders LIKE '%alt-svc%') as google_altsvc
 from `httparchive.summary_requests.2020_06_01_desktop`
 UNION ALL
 select '2020_07_01' as date, count(1) as NumResponses,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3%') as anyh3,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3-27=%') as h327,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3-29=%') as h329,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') = 'clear') as clear,
 COUNTIF(respOtherHeaders LIKE '%alt-svc%') as altsvc,
 COUNTIF(lower(_cdn_provider) LIKE '%cloudflare%') as cloudflare,
 COUNTIF(lower(_cdn_provider) LIKE '%cloudflare%' AND respOtherHeaders LIKE '%alt-svc%') as cloudflare_altsvc,
 COUNTIF(lower(_cdn_provider) LIKE '%google%') as google,
 COUNTIF(lower(_cdn_provider) LIKE '%google%' AND respOtherHeaders LIKE '%alt-svc%') as google_altsvc
 from `httparchive.summary_requests.2020_07_01_desktop`
 UNION ALL
 select '2020_08_01', count(1),
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3%') as anyh3,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3-27=%') as h327,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3-29=%') as h329,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') = 'clear') as clear,
 COUNTIF(respOtherHeaders LIKE '%alt-svc%') as altsvc,
 COUNTIF(lower(_cdn_provider) LIKE '%cloudflare%') as cloudflare,
 COUNTIF(lower(_cdn_provider) LIKE '%cloudflare%' AND respOtherHeaders LIKE '%alt-svc%') as cloudflare_altsvc,
 COUNTIF(lower(_cdn_provider) LIKE '%google%') as google,
 COUNTIF(lower(_cdn_provider) LIKE '%google%' AND respOtherHeaders LIKE '%alt-svc%') as google_altsvc
 from `httparchive.summary_requests.2020_08_01_desktop`
 UNION ALL
 select '2020_09_01', count(1),
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3%') as anyh3,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3-27=%') as h327,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3-29=%') as h329,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') = 'clear') as clear,
 COUNTIF(respOtherHeaders LIKE '%alt-svc%') as altsvc,
 COUNTIF(lower(_cdn_provider) LIKE '%cloudflare%') as cloudflare,
 COUNTIF(lower(_cdn_provider) LIKE '%cloudflare%' AND respOtherHeaders LIKE '%alt-svc%') as cloudflare_altsvc,
 COUNTIF(lower(_cdn_provider) LIKE '%google%') as google,
 COUNTIF(lower(_cdn_provider) LIKE '%google%' AND respOtherHeaders LIKE '%alt-svc%') as google_altsvc
 from `httparchive.summary_requests.2020_09_01_desktop`
 UNION ALL
 select '2020_10_01', count(1),
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3%') as anyh3,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3-27=%') as h327,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3-29=%') as h329,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') = 'clear') as clear,
 COUNTIF(respOtherHeaders LIKE '%alt-svc%') as altsvc,
 COUNTIF(lower(_cdn_provider) LIKE '%cloudflare%') as cloudflare,
 COUNTIF(lower(_cdn_provider) LIKE '%cloudflare%' AND respOtherHeaders LIKE '%alt-svc%') as cloudflare_altsvc,
 COUNTIF(lower(_cdn_provider) LIKE '%google%') as google,
 COUNTIF(lower(_cdn_provider) LIKE '%google%' AND respOtherHeaders LIKE '%alt-svc%') as google_altsvc
 from `httparchive.summary_requests.2020_10_01_desktop`
 UNION ALL
 select '2020_11_01', count(1),
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3%') as anyh3,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3-27=%') as h327,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3-29=%') as h329,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') = 'clear') as clear,
 COUNTIF(respOtherHeaders LIKE '%alt-svc%') as altsvc,
 COUNTIF(lower(_cdn_provider) LIKE '%cloudflare%') as cloudflare,
 COUNTIF(lower(_cdn_provider) LIKE '%cloudflare%' AND respOtherHeaders LIKE '%alt-svc%') as cloudflare_altsvc,
 COUNTIF(lower(_cdn_provider) LIKE '%google%') as google,
 COUNTIF(lower(_cdn_provider) LIKE '%google%' AND respOtherHeaders LIKE '%alt-svc%') as google_altsvc
 from `httparchive.summary_requests.2020_11_01_desktop`
 UNION ALL
 select '2020_12_01', count(1),
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3%') as anyh3,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3-27=%') as h327,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3-29=%') as h329,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') = 'clear') as clear,
 COUNTIF(respOtherHeaders LIKE '%alt-svc%') as altsvc,
 COUNTIF(lower(_cdn_provider) LIKE '%cloudflare%') as cloudflare,
 COUNTIF(lower(_cdn_provider) LIKE '%cloudflare%' AND respOtherHeaders LIKE '%alt-svc%') as cloudflare_altsvc,
 COUNTIF(lower(_cdn_provider) LIKE '%google%') as google,
 COUNTIF(lower(_cdn_provider) LIKE '%google%' AND respOtherHeaders LIKE '%alt-svc%') as google_altsvc
 from `httparchive.summary_requests.2020_12_01_desktop`
 UNION ALL
 select '2021_01_01', count(1),
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3%') as anyh3,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3-27=%') as h327,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3-29=%') as h329,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') = 'clear') as clear,
 COUNTIF(respOtherHeaders LIKE '%alt-svc%') as altsvc,
 COUNTIF(lower(_cdn_provider) LIKE '%cloudflare%') as cloudflare,
 COUNTIF(lower(_cdn_provider) LIKE '%cloudflare%' AND respOtherHeaders LIKE '%alt-svc%') as cloudflare_altsvc,
 COUNTIF(lower(_cdn_provider) LIKE '%google%') as google,
 COUNTIF(lower(_cdn_provider) LIKE '%google%' AND respOtherHeaders LIKE '%alt-svc%') as google_altsvc
 from `httparchive.summary_requests.2021_01_01_desktop`
 UNION ALL
 select '2021_02_01', count(1),
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3%') as anyh3,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3-27=%') as h327,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3-29=%') as h329,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') = 'clear') as clear,
 COUNTIF(respOtherHeaders LIKE '%alt-svc%') as altsvc,
 COUNTIF(lower(_cdn_provider) LIKE '%cloudflare%') as cloudflare,
 COUNTIF(lower(_cdn_provider) LIKE '%cloudflare%' AND respOtherHeaders LIKE '%alt-svc%') as cloudflare_altsvc,
 COUNTIF(lower(_cdn_provider) LIKE '%google%') as google,
 COUNTIF(lower(_cdn_provider) LIKE '%google%' AND respOtherHeaders LIKE '%alt-svc%') as google_altsvc
 from `httparchive.summary_requests.2021_02_01_desktop`
 UNION ALL
 select '2021_03_01', count(1),
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3%') as anyh3,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3-27=%') as h327,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') LIKE '%h3-29=%') as h329,
 COUNTIF(REGEXP_EXTRACT(REGEXP_EXTRACT(respOtherHeaders, r'alt-svc = (.*)'), r'(.*?)(?:, [^ ]* = .*)?$') = 'clear') as clear,
 COUNTIF(respOtherHeaders LIKE '%alt-svc%') as altsvc,
 COUNTIF(lower(_cdn_provider) LIKE '%cloudflare%') as cloudflare,
 COUNTIF(lower(_cdn_provider) LIKE '%cloudflare%' AND respOtherHeaders LIKE '%alt-svc%') as cloudflare_altsvc,
 COUNTIF(lower(_cdn_provider) LIKE '%google%') as google,
 COUNTIF(lower(_cdn_provider) LIKE '%google%' AND respOtherHeaders LIKE '%alt-svc%') as google_altsvc
 from `httparchive.summary_requests.2021_03_01_desktop`
 order by date
date NumResponses anyh3 h327 h329 clear altsvc cloudflare cloudflare_altsvc google google_altsvc
2020_05_01 428,682,018 27,746,788 22,798,551 - 5,277,549 36,198,824 28,713,543 4,150,889 57,374,782 13,656,478
2020_06_01 469,139,890 36,763,496 35,881,965 560,212 5,842,791 46,016,229 31,631,376 4,955,435 65,408,210 16,208,973
2020_07_01 522,565,781 39,928,766 39,004,480 37,384,205 6,785,097 50,364,263 34,504,992 5,575,735 72,588,021 17,548,632
2020_08_01 528,007,479 34,514,143 33,527,276 32,970,726 7,233,250 45,307,828 35,294,546 5,807,460 73,124,647 13,883,805
2020_09_01 509,287,871 30,193,289 29,209,105 28,626,473 6,868,581 40,213,872 35,059,563 5,939,923 74,257,012 11,154,994
2020_10_01 507,355,897 29,329,196 28,222,077 27,717,555 6,633,540 38,960,091 36,662,363 6,460,057 74,981,572 9,649,130
2020_11_01 532,631,230 17,980,993 8,888,169 16,455,247 7,029,486 28,050,663 38,181,154 9,441 78,489,040 11,079,412
2020_12_01 557,193,476 20,904,437 14,182,531 18,083,565 7,150,731 31,013,781 40,301,075 22,467 82,325,602 9,000,699
2021_01_01 565,109,617 17,413,671 14,406,923 14,399,602 7,238,880 27,390,956 41,674,815 9,255 83,585,408 6,172,171
2021_02_01 523,659,691 27,226,928 23,636,765 23,409,535 7,021,916 35,690,621 40,578,882 8,244,980 74,683,536 5,777,712
2021_03_01 579,860,833 34,534,890 30,846,356 30,654,687 7,823,140 42,964,473 45,211,572 14,010,892 80,145,972 5,372,676

The drop from August 2020 looks to be with Google disabling alt-svc.

And similarly, apparently Cloudflare disabled QUIC for a bit while investigating issues - which is what we see in Nov 2020 - Jan 2021.

Either way our metrics are also reflected in other graphs from other providers, so do think our graph is accurately reflecting support.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants