-2

I have a .NET website running on an internal IIS10/Windows Server 2022 machine. It has an internal SSL cert authorised by our domain. It works with HTTP/1.1 and HTTP/2.

It's configured to pass an alt-svc: h3=":443" header, and if I connect directly with curl --http3-only that works.

On the local machine I have Chrome and Firefox, and https://cloudflare-quic.com/ reports both as supporting HTTP/3 on my network.

Based on this we've eliminated the network as the cause - this is something to do with what .NET or IIS sends Chrome and what Chrome does or doesn't send back.

Just to be absolutely clear: network, firewall, connection, service issues have been eliminated, the problem I'm asking for help with is in the .NET code running the service or the JS code in the client application

Starting from an empty cache, Chrome makes the HTTP/2 request, gets the alt-svc header, and then completely ignores it.

I'm not sure what's left to try? What's left that could be blocking HTTP/3?

What can be done in .NET to even debug or investigate why this isn't working? HTTP/1.1 and HTTP/2 are both configured and work. Is there a header I can set or a way to reject HTTP/2 connections once it is set?

Requests are mix of static and dynamic content, with the static content cached by a service worker and served offline. The service worker makes requests using the same fetch that the inline JS code does, but could that be the cause and if so how do I investigate and/or workaround that?

5
  • Have you enabled HTTP/3 support on the server? Commented Nov 19 at 17:20
  • @AndrewMorton yes, as mentioned in the question, curl --http3 gets an HTTP/3 connection. Commented Nov 20 at 8:25
  • I'd add, an answer to this (or even suggestions on what to try next) would be of value to the SO community - web searches for the problem find lots of people similarly stuck, either with answers specific to their tech stack (like this one about Jetty) or (much more often) no answers at all (or answers that repeat already tried basics). LLMs regurgitate those basics too, http3-explained.haxx.se is clearly in their training data. Commented Nov 20 at 8:47
  • You write that curl --http3 gets a connection, but that can fall back to older http versions. Does curl --http3-only also work? Just to be sure. Commented Nov 20 at 16:14
  • 1
    @AndrewMorton it wasn't falling back to HTTP/2 but I tried it with --http3-only and it still worked. The issue is definitely something wrong in either the calling JS code or the headers/context from the .NET service. Commented 2 days ago

0

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.