HttpRequestException: Destination is too short. (Parameter 'destination') #78516

Description

@BrunoBlanes

Is there an existing issue for this?

  • I have searched the existing issues

Describe the bug

While using YARP with HTTP3 enabled via an HttpTransformer the request fails with a System.ArgumentException: Destination is too short. (Parameter 'destination').

Note that in this particular request, it was supposed to download the _framework/blazor.webassembly.js and a couple of CSS files were successfully downloaded before:
image

I have only encountered this error while downloading this particular file if HttpRequestMessage.Version is set to 3.0.

Expected Behavior

Expected the request to complete successfully as it does for most cases, not once did it succeed for this script however.

Steps To Reproduce

  • Create a basic YARP project, enable HTTP3 and set as default version for proxy-to-server communication.
publicclassHttp3ProxyRequestTransformer:HttpTransformer{publicoverrideasyncValueTaskTransformRequestAsync(HttpContexthttpContext,HttpRequestMessageproxyRequest,stringdestinationPrefix){awaitbase.TransformRequestAsync(httpContext,proxyRequest,destinationPrefix);// Configures all requests messages to use HTTP3proxyRequest.Version=newVersion(3,0);proxyRequest.VersionPolicy=HttpVersionPolicy.RequestVersionOrLower;}}
  • Create a Blazor application and enable HTTP3 using ConfigureKestrel and a self-signed certificate:
webBuilder.ConfigureKestrel(serverOptions =>{serverOptions.ConfigureHttpsDefaults(httpsOptions =>{httpsOptions.ServerCertificateSelector=(_,name)=>{returnnameis not null?CertificateLoader.LoadFromStoreCert("dev.localhost","My",StoreLocation.CurrentUser,false):null;};});serverOptions.ListenAnyIP(5001, listenOptions =>{listenOptions.UseHttps();listenOptions.Protocols=HttpProtocols.Http1AndHttp2AndHttp3;});});
  • Forward all requests to the Blazor application:
varhttpClient=newHttpMessageInvoker(newSocketsHttpHandler{UseProxy=false,AllowAutoRedirect=false,AutomaticDecompression=DecompressionMethods.None,UseCookies=false});varrequestConfig=newForwarderRequestConfig{ActivityTimeout=TimeSpan.FromSeconds(100)};app.UseEndpoints(endpoints =>{endpoints.Map("/{**catch-all}",async httpContext =>{ForwarderErrorerror=httpContext.Request.Host.ToString().Split('.')switch{[...]
_ =>awaitforwarder.SendAsync(httpContext,Intranet,httpClient,requestConfig,newHttp3ProxyRequestTransformer())};});});

Exceptions (if any)

info: Yarp.ReverseProxy.Forwarder.HttpForwarder[48]
Request: An error was encountered before receiving a response.
System.Net.Http.HttpRequestException: An error occurred while sending the request.
---> System.ArgumentException: Destination is too short. (Parameter 'destination')
at System.Net.Http.QPack.QPackDecoder.DecodeInternal(ReadOnlySpan`1 data, IHttpStreamHeadersHandler handler)
at System.Net.Http.Http3RequestStream.ReadHeadersAsync(Int64 headersLength, CancellationToken cancellationToken)
at System.Net.Http.Http3RequestStream.ReadResponseAsync(CancellationToken cancellationToken)
at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
at System.Net.Http.Http3Connection.SendAsync(HttpRequestMessage request, Int64 queueStartingTimestamp, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.TrySendUsingHttp3Async(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at Yarp.ReverseProxy.Forwarder.HttpForwarder.SendAsync(HttpContext context, String destinationPrefix, HttpMessageInvoker httpClient, ForwarderRequestConfig requestConfig, HttpTransformer transformer)
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint '/{**catch-all}'
fail: Microsoft.AspNetCore.Server.Kestrel[13]
Connection id "0HMM89CJQ7T8E", Request id "0HMM89CJQ7T8E:00000015": An unhandled exception was thrown by the application.
System.Net.Http.HttpRequestException: An error occurred while sending the request.
---> System.ArgumentException: Destination is too short. (Parameter 'destination')
at System.Net.Http.QPack.QPackDecoder.DecodeInternal(ReadOnlySpan`1 data, IHttpStreamHeadersHandler handler)
at System.Net.Http.Http3RequestStream.ReadHeadersAsync(Int64 headersLength, CancellationToken cancellationToken)
at System.Net.Http.Http3RequestStream.ReadResponseAsync(CancellationToken cancellationToken)
at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at Intervip.ReverseProxy.Startup.<>c__DisplayClass10_0.<<Configure>b__1>d.MoveNext() in C:\Users\bruno\source\repos\Intervip\reverse-proxy\Startup.cs:line 90
--- End of stack trace from previous location ---
at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
at Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware.InvokeAsync(HttpContext context)
at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished HTTP/2 GET https://dev.localhost/_framework/blazor.webassembly.js - - - 500 0 - 70.8280ms

.NET Version

7.0.100

Anything else?

PS C:\Users\bruno> dotnet --info
.NET SDK:
Version: 7.0.100
Commit: e12b7af219
Runtime Environment:
OS Name: Windows
OS Version: 10.0.22000
OS Platform: Windows
RID: win10-x64
Base Path: C:\Program Files\dotnet\sdk\7.0.100\
Host:
Version: 7.0.0
Architecture: x64
Commit: d099f075e4
.NET SDKs installed:
6.0.403 [C:\Program Files\dotnet\sdk]
7.0.100-rc.1.22431.12 [C:\Program Files\dotnet\sdk]
7.0.100-rc.2.22477.23 [C:\Program Files\dotnet\sdk]
7.0.100 [C:\Program Files\dotnet\sdk]
.NET runtimes installed:
Microsoft.AspNetCore.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 7.0.0-rc.1.22427.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 7.0.0-rc.2.22476.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 7.0.0-rc.1.22426.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 7.0.0-rc.2.22472.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.WindowsDesktop.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 7.0.0-rc.1.22427.1 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 7.0.0-rc.2.22472.13 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Other architectures found:
arm64 [C:\Program Files\dotnet]
registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\arm64\InstallLocation]
x86 [C:\Program Files (x86)\dotnet]
registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\InstallLocation]
Environment variables:
Not set
global.json file:
Not found
Learn more:
https://aka.ms/dotnet/info
Download .NET:
https://aka.ms/dotnet/download

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
       blocks
      (function() {
      function addCopyButtons() {
      document.querySelectorAll('pre code').forEach(function(codeBlock) {
      if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
      codeBlock.parentElement.setAttribute('data-copy-added', 'true');
      var btn = document.createElement('button');
      btn.textContent = 'Copy';
      btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
      btn.onmouseover = function() { this.style.opacity = '1'; };
      btn.onmouseout = function() { this.style.opacity = '0.7'; };
      btn.onclick = function() {
      navigator.clipboard.writeText(codeBlock.textContent).then(function() {
      btn.textContent = 'Copied!';
      setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
      });
      };
      codeBlock.parentElement.style.position = 'relative';
      codeBlock.parentElement.appendChild(btn);
      });
      }
      addCopyButtons();
      // Re-run on dynamic content
      var observer = new MutationObserver(addCopyButtons);
      observer.observe(document.body, { childList: true, subtree: true });
      })();
      }
      } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
      })();
      (function(){
      try {
      var __m = "github.com";
      var __re = new RegExp('^' + "github\\.com" + '
      
      Skip to content

      HttpRequestException: Destination is too short. (Parameter 'destination') #78516

      Description

      @BrunoBlanes

      Is there an existing issue for this?

      • I have searched the existing issues

      Describe the bug

      While using YARP with HTTP3 enabled via an HttpTransformer the request fails with a System.ArgumentException: Destination is too short. (Parameter 'destination').

      Note that in this particular request, it was supposed to download the _framework/blazor.webassembly.js and a couple of CSS files were successfully downloaded before:
      image

      I have only encountered this error while downloading this particular file if HttpRequestMessage.Version is set to 3.0.

      Expected Behavior

      Expected the request to complete successfully as it does for most cases, not once did it succeed for this script however.

      Steps To Reproduce

      • Create a basic YARP project, enable HTTP3 and set as default version for proxy-to-server communication.
      publicclassHttp3ProxyRequestTransformer:HttpTransformer{publicoverrideasyncValueTaskTransformRequestAsync(HttpContexthttpContext,HttpRequestMessageproxyRequest,stringdestinationPrefix){awaitbase.TransformRequestAsync(httpContext,proxyRequest,destinationPrefix);// Configures all requests messages to use HTTP3proxyRequest.Version=newVersion(3,0);proxyRequest.VersionPolicy=HttpVersionPolicy.RequestVersionOrLower;}}
      • Create a Blazor application and enable HTTP3 using ConfigureKestrel and a self-signed certificate:
      webBuilder.ConfigureKestrel(serverOptions =>{serverOptions.ConfigureHttpsDefaults(httpsOptions =>{httpsOptions.ServerCertificateSelector=(_,name)=>{returnnameis not null?CertificateLoader.LoadFromStoreCert("dev.localhost","My",StoreLocation.CurrentUser,false):null;};});serverOptions.ListenAnyIP(5001, listenOptions =>{listenOptions.UseHttps();listenOptions.Protocols=HttpProtocols.Http1AndHttp2AndHttp3;});});
      • Forward all requests to the Blazor application:
      varhttpClient=newHttpMessageInvoker(newSocketsHttpHandler{UseProxy=false,AllowAutoRedirect=false,AutomaticDecompression=DecompressionMethods.None,UseCookies=false});varrequestConfig=newForwarderRequestConfig{ActivityTimeout=TimeSpan.FromSeconds(100)};app.UseEndpoints(endpoints =>{endpoints.Map("/{**catch-all}",async httpContext =>{ForwarderErrorerror=httpContext.Request.Host.ToString().Split('.')switch{[...]
      _ =>awaitforwarder.SendAsync(httpContext,Intranet,httpClient,requestConfig,newHttp3ProxyRequestTransformer())};});});

      Exceptions (if any)

      info: Yarp.ReverseProxy.Forwarder.HttpForwarder[48]
      Request: An error was encountered before receiving a response.
      System.Net.Http.HttpRequestException: An error occurred while sending the request.
      ---> System.ArgumentException: Destination is too short. (Parameter 'destination')
      at System.Net.Http.QPack.QPackDecoder.DecodeInternal(ReadOnlySpan`1 data, IHttpStreamHeadersHandler handler)
      at System.Net.Http.Http3RequestStream.ReadHeadersAsync(Int64 headersLength, CancellationToken cancellationToken)
      at System.Net.Http.Http3RequestStream.ReadResponseAsync(CancellationToken cancellationToken)
      at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
      --- End of inner exception stack trace ---
      at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
      at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
      at System.Net.Http.Http3Connection.SendAsync(HttpRequestMessage request, Int64 queueStartingTimestamp, CancellationToken cancellationToken)
      at System.Net.Http.HttpConnectionPool.TrySendUsingHttp3Async(HttpRequestMessage request, CancellationToken cancellationToken)
      at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
      at System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
      at Yarp.ReverseProxy.Forwarder.HttpForwarder.SendAsync(HttpContext context, String destinationPrefix, HttpMessageInvoker httpClient, ForwarderRequestConfig requestConfig, HttpTransformer transformer)
      info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
      Executed endpoint '/{**catch-all}'
      fail: Microsoft.AspNetCore.Server.Kestrel[13]
      Connection id "0HMM89CJQ7T8E", Request id "0HMM89CJQ7T8E:00000015": An unhandled exception was thrown by the application.
      System.Net.Http.HttpRequestException: An error occurred while sending the request.
      ---> System.ArgumentException: Destination is too short. (Parameter 'destination')
      at System.Net.Http.QPack.QPackDecoder.DecodeInternal(ReadOnlySpan`1 data, IHttpStreamHeadersHandler handler)
      at System.Net.Http.Http3RequestStream.ReadHeadersAsync(Int64 headersLength, CancellationToken cancellationToken)
      at System.Net.Http.Http3RequestStream.ReadResponseAsync(CancellationToken cancellationToken)
      at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
      --- End of inner exception stack trace ---
      at Intervip.ReverseProxy.Startup.<>c__DisplayClass10_0.<<Configure>b__1>d.MoveNext() in C:\Users\bruno\source\repos\Intervip\reverse-proxy\Startup.cs:line 90
      --- End of stack trace from previous location ---
      at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
      at Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware.InvokeAsync(HttpContext context)
      at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)
      info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished HTTP/2 GET https://dev.localhost/_framework/blazor.webassembly.js - - - 500 0 - 70.8280ms
      

      .NET Version

      7.0.100

      Anything else?

      PS C:\Users\bruno> dotnet --info
      .NET SDK:
      Version: 7.0.100
      Commit: e12b7af219
      Runtime Environment:
      OS Name: Windows
      OS Version: 10.0.22000
      OS Platform: Windows
      RID: win10-x64
      Base Path: C:\Program Files\dotnet\sdk\7.0.100\
      Host:
      Version: 7.0.0
      Architecture: x64
      Commit: d099f075e4
      .NET SDKs installed:
      6.0.403 [C:\Program Files\dotnet\sdk]
      7.0.100-rc.1.22431.12 [C:\Program Files\dotnet\sdk]
      7.0.100-rc.2.22477.23 [C:\Program Files\dotnet\sdk]
      7.0.100 [C:\Program Files\dotnet\sdk]
      .NET runtimes installed:
      Microsoft.AspNetCore.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
      Microsoft.AspNetCore.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
      Microsoft.AspNetCore.App 7.0.0-rc.1.22427.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
      Microsoft.AspNetCore.App 7.0.0-rc.2.22476.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
      Microsoft.AspNetCore.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
      Microsoft.NETCore.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
      Microsoft.NETCore.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
      Microsoft.NETCore.App 7.0.0-rc.1.22426.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
      Microsoft.NETCore.App 7.0.0-rc.2.22472.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
      Microsoft.NETCore.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
      Microsoft.WindowsDesktop.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
      Microsoft.WindowsDesktop.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
      Microsoft.WindowsDesktop.App 7.0.0-rc.1.22427.1 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
      Microsoft.WindowsDesktop.App 7.0.0-rc.2.22472.13 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
      Microsoft.WindowsDesktop.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
      Other architectures found:
      arm64 [C:\Program Files\dotnet]
      registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\arm64\InstallLocation]
      x86 [C:\Program Files (x86)\dotnet]
      registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\InstallLocation]
      Environment variables:
      Not set
      global.json file:
      Not found
      Learn more:
      https://aka.ms/dotnet/info
      Download .NET:
      https://aka.ms/dotnet/download
      

      Metadata

      Metadata

      Assignees

      No one assigned

        Labels

        Type

        No type

        Projects

        No projects

          Milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
          Skip to content

          HttpRequestException: Destination is too short. (Parameter 'destination') #78516

          Description

          @BrunoBlanes

          Is there an existing issue for this?

          • I have searched the existing issues

          Describe the bug

          While using YARP with HTTP3 enabled via an HttpTransformer the request fails with a System.ArgumentException: Destination is too short. (Parameter 'destination').

          Note that in this particular request, it was supposed to download the _framework/blazor.webassembly.js and a couple of CSS files were successfully downloaded before:
          image

          I have only encountered this error while downloading this particular file if HttpRequestMessage.Version is set to 3.0.

          Expected Behavior

          Expected the request to complete successfully as it does for most cases, not once did it succeed for this script however.

          Steps To Reproduce

          • Create a basic YARP project, enable HTTP3 and set as default version for proxy-to-server communication.
          publicclassHttp3ProxyRequestTransformer:HttpTransformer{publicoverrideasyncValueTaskTransformRequestAsync(HttpContexthttpContext,HttpRequestMessageproxyRequest,stringdestinationPrefix){awaitbase.TransformRequestAsync(httpContext,proxyRequest,destinationPrefix);// Configures all requests messages to use HTTP3proxyRequest.Version=newVersion(3,0);proxyRequest.VersionPolicy=HttpVersionPolicy.RequestVersionOrLower;}}
          • Create a Blazor application and enable HTTP3 using ConfigureKestrel and a self-signed certificate:
          webBuilder.ConfigureKestrel(serverOptions =>{serverOptions.ConfigureHttpsDefaults(httpsOptions =>{httpsOptions.ServerCertificateSelector=(_,name)=>{returnnameis not null?CertificateLoader.LoadFromStoreCert("dev.localhost","My",StoreLocation.CurrentUser,false):null;};});serverOptions.ListenAnyIP(5001, listenOptions =>{listenOptions.UseHttps();listenOptions.Protocols=HttpProtocols.Http1AndHttp2AndHttp3;});});
          • Forward all requests to the Blazor application:
          varhttpClient=newHttpMessageInvoker(newSocketsHttpHandler{UseProxy=false,AllowAutoRedirect=false,AutomaticDecompression=DecompressionMethods.None,UseCookies=false});varrequestConfig=newForwarderRequestConfig{ActivityTimeout=TimeSpan.FromSeconds(100)};app.UseEndpoints(endpoints =>{endpoints.Map("/{**catch-all}",async httpContext =>{ForwarderErrorerror=httpContext.Request.Host.ToString().Split('.')switch{[...]
          _ =>awaitforwarder.SendAsync(httpContext,Intranet,httpClient,requestConfig,newHttp3ProxyRequestTransformer())};});});

          Exceptions (if any)

          info: Yarp.ReverseProxy.Forwarder.HttpForwarder[48]
          Request: An error was encountered before receiving a response.
          System.Net.Http.HttpRequestException: An error occurred while sending the request.
          ---> System.ArgumentException: Destination is too short. (Parameter 'destination')
          at System.Net.Http.QPack.QPackDecoder.DecodeInternal(ReadOnlySpan`1 data, IHttpStreamHeadersHandler handler)
          at System.Net.Http.Http3RequestStream.ReadHeadersAsync(Int64 headersLength, CancellationToken cancellationToken)
          at System.Net.Http.Http3RequestStream.ReadResponseAsync(CancellationToken cancellationToken)
          at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
          --- End of inner exception stack trace ---
          at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
          at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
          at System.Net.Http.Http3Connection.SendAsync(HttpRequestMessage request, Int64 queueStartingTimestamp, CancellationToken cancellationToken)
          at System.Net.Http.HttpConnectionPool.TrySendUsingHttp3Async(HttpRequestMessage request, CancellationToken cancellationToken)
          at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
          at System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
          at Yarp.ReverseProxy.Forwarder.HttpForwarder.SendAsync(HttpContext context, String destinationPrefix, HttpMessageInvoker httpClient, ForwarderRequestConfig requestConfig, HttpTransformer transformer)
          info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
          Executed endpoint '/{**catch-all}'
          fail: Microsoft.AspNetCore.Server.Kestrel[13]
          Connection id "0HMM89CJQ7T8E", Request id "0HMM89CJQ7T8E:00000015": An unhandled exception was thrown by the application.
          System.Net.Http.HttpRequestException: An error occurred while sending the request.
          ---> System.ArgumentException: Destination is too short. (Parameter 'destination')
          at System.Net.Http.QPack.QPackDecoder.DecodeInternal(ReadOnlySpan`1 data, IHttpStreamHeadersHandler handler)
          at System.Net.Http.Http3RequestStream.ReadHeadersAsync(Int64 headersLength, CancellationToken cancellationToken)
          at System.Net.Http.Http3RequestStream.ReadResponseAsync(CancellationToken cancellationToken)
          at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
          --- End of inner exception stack trace ---
          at Intervip.ReverseProxy.Startup.<>c__DisplayClass10_0.<<Configure>b__1>d.MoveNext() in C:\Users\bruno\source\repos\Intervip\reverse-proxy\Startup.cs:line 90
          --- End of stack trace from previous location ---
          at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
          at Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware.InvokeAsync(HttpContext context)
          at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)
          info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
          Request finished HTTP/2 GET https://dev.localhost/_framework/blazor.webassembly.js - - - 500 0 - 70.8280ms
          

          .NET Version

          7.0.100

          Anything else?

          PS C:\Users\bruno> dotnet --info
          .NET SDK:
          Version: 7.0.100
          Commit: e12b7af219
          Runtime Environment:
          OS Name: Windows
          OS Version: 10.0.22000
          OS Platform: Windows
          RID: win10-x64
          Base Path: C:\Program Files\dotnet\sdk\7.0.100\
          Host:
          Version: 7.0.0
          Architecture: x64
          Commit: d099f075e4
          .NET SDKs installed:
          6.0.403 [C:\Program Files\dotnet\sdk]
          7.0.100-rc.1.22431.12 [C:\Program Files\dotnet\sdk]
          7.0.100-rc.2.22477.23 [C:\Program Files\dotnet\sdk]
          7.0.100 [C:\Program Files\dotnet\sdk]
          .NET runtimes installed:
          Microsoft.AspNetCore.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
          Microsoft.AspNetCore.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
          Microsoft.AspNetCore.App 7.0.0-rc.1.22427.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
          Microsoft.AspNetCore.App 7.0.0-rc.2.22476.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
          Microsoft.AspNetCore.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
          Microsoft.NETCore.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
          Microsoft.NETCore.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
          Microsoft.NETCore.App 7.0.0-rc.1.22426.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
          Microsoft.NETCore.App 7.0.0-rc.2.22472.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
          Microsoft.NETCore.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
          Microsoft.WindowsDesktop.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
          Microsoft.WindowsDesktop.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
          Microsoft.WindowsDesktop.App 7.0.0-rc.1.22427.1 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
          Microsoft.WindowsDesktop.App 7.0.0-rc.2.22472.13 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
          Microsoft.WindowsDesktop.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
          Other architectures found:
          arm64 [C:\Program Files\dotnet]
          registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\arm64\InstallLocation]
          x86 [C:\Program Files (x86)\dotnet]
          registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\InstallLocation]
          Environment variables:
          Not set
          global.json file:
          Not found
          Learn more:
          https://aka.ms/dotnet/info
          Download .NET:
          https://aka.ms/dotnet/download
          

          Metadata

          Metadata

          Assignees

          No one assigned

            Labels

            Type

            No type

            Projects

            No projects

              Milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              HttpRequestException: Destination is too short. (Parameter 'destination') #78516

              Description

              @BrunoBlanes

              Is there an existing issue for this?

              • I have searched the existing issues

              Describe the bug

              While using YARP with HTTP3 enabled via an HttpTransformer the request fails with a System.ArgumentException: Destination is too short. (Parameter 'destination').

              Note that in this particular request, it was supposed to download the _framework/blazor.webassembly.js and a couple of CSS files were successfully downloaded before:
              image

              I have only encountered this error while downloading this particular file if HttpRequestMessage.Version is set to 3.0.

              Expected Behavior

              Expected the request to complete successfully as it does for most cases, not once did it succeed for this script however.

              Steps To Reproduce

              • Create a basic YARP project, enable HTTP3 and set as default version for proxy-to-server communication.
              publicclassHttp3ProxyRequestTransformer:HttpTransformer{publicoverrideasyncValueTaskTransformRequestAsync(HttpContexthttpContext,HttpRequestMessageproxyRequest,stringdestinationPrefix){awaitbase.TransformRequestAsync(httpContext,proxyRequest,destinationPrefix);// Configures all requests messages to use HTTP3proxyRequest.Version=newVersion(3,0);proxyRequest.VersionPolicy=HttpVersionPolicy.RequestVersionOrLower;}}
              • Create a Blazor application and enable HTTP3 using ConfigureKestrel and a self-signed certificate:
              webBuilder.ConfigureKestrel(serverOptions =>{serverOptions.ConfigureHttpsDefaults(httpsOptions =>{httpsOptions.ServerCertificateSelector=(_,name)=>{returnnameis not null?CertificateLoader.LoadFromStoreCert("dev.localhost","My",StoreLocation.CurrentUser,false):null;};});serverOptions.ListenAnyIP(5001, listenOptions =>{listenOptions.UseHttps();listenOptions.Protocols=HttpProtocols.Http1AndHttp2AndHttp3;});});
              • Forward all requests to the Blazor application:
              varhttpClient=newHttpMessageInvoker(newSocketsHttpHandler{UseProxy=false,AllowAutoRedirect=false,AutomaticDecompression=DecompressionMethods.None,UseCookies=false});varrequestConfig=newForwarderRequestConfig{ActivityTimeout=TimeSpan.FromSeconds(100)};app.UseEndpoints(endpoints =>{endpoints.Map("/{**catch-all}",async httpContext =>{ForwarderErrorerror=httpContext.Request.Host.ToString().Split('.')switch{[...]
              _ =>awaitforwarder.SendAsync(httpContext,Intranet,httpClient,requestConfig,newHttp3ProxyRequestTransformer())};});});

              Exceptions (if any)

              info: Yarp.ReverseProxy.Forwarder.HttpForwarder[48]
              Request: An error was encountered before receiving a response.
              System.Net.Http.HttpRequestException: An error occurred while sending the request.
              ---> System.ArgumentException: Destination is too short. (Parameter 'destination')
              at System.Net.Http.QPack.QPackDecoder.DecodeInternal(ReadOnlySpan`1 data, IHttpStreamHeadersHandler handler)
              at System.Net.Http.Http3RequestStream.ReadHeadersAsync(Int64 headersLength, CancellationToken cancellationToken)
              at System.Net.Http.Http3RequestStream.ReadResponseAsync(CancellationToken cancellationToken)
              at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
              --- End of inner exception stack trace ---
              at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
              at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
              at System.Net.Http.Http3Connection.SendAsync(HttpRequestMessage request, Int64 queueStartingTimestamp, CancellationToken cancellationToken)
              at System.Net.Http.HttpConnectionPool.TrySendUsingHttp3Async(HttpRequestMessage request, CancellationToken cancellationToken)
              at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
              at System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
              at Yarp.ReverseProxy.Forwarder.HttpForwarder.SendAsync(HttpContext context, String destinationPrefix, HttpMessageInvoker httpClient, ForwarderRequestConfig requestConfig, HttpTransformer transformer)
              info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
              Executed endpoint '/{**catch-all}'
              fail: Microsoft.AspNetCore.Server.Kestrel[13]
              Connection id "0HMM89CJQ7T8E", Request id "0HMM89CJQ7T8E:00000015": An unhandled exception was thrown by the application.
              System.Net.Http.HttpRequestException: An error occurred while sending the request.
              ---> System.ArgumentException: Destination is too short. (Parameter 'destination')
              at System.Net.Http.QPack.QPackDecoder.DecodeInternal(ReadOnlySpan`1 data, IHttpStreamHeadersHandler handler)
              at System.Net.Http.Http3RequestStream.ReadHeadersAsync(Int64 headersLength, CancellationToken cancellationToken)
              at System.Net.Http.Http3RequestStream.ReadResponseAsync(CancellationToken cancellationToken)
              at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
              --- End of inner exception stack trace ---
              at Intervip.ReverseProxy.Startup.<>c__DisplayClass10_0.<<Configure>b__1>d.MoveNext() in C:\Users\bruno\source\repos\Intervip\reverse-proxy\Startup.cs:line 90
              --- End of stack trace from previous location ---
              at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
              at Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware.InvokeAsync(HttpContext context)
              at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)
              info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
              Request finished HTTP/2 GET https://dev.localhost/_framework/blazor.webassembly.js - - - 500 0 - 70.8280ms
              

              .NET Version

              7.0.100

              Anything else?

              PS C:\Users\bruno> dotnet --info
              .NET SDK:
              Version: 7.0.100
              Commit: e12b7af219
              Runtime Environment:
              OS Name: Windows
              OS Version: 10.0.22000
              OS Platform: Windows
              RID: win10-x64
              Base Path: C:\Program Files\dotnet\sdk\7.0.100\
              Host:
              Version: 7.0.0
              Architecture: x64
              Commit: d099f075e4
              .NET SDKs installed:
              6.0.403 [C:\Program Files\dotnet\sdk]
              7.0.100-rc.1.22431.12 [C:\Program Files\dotnet\sdk]
              7.0.100-rc.2.22477.23 [C:\Program Files\dotnet\sdk]
              7.0.100 [C:\Program Files\dotnet\sdk]
              .NET runtimes installed:
              Microsoft.AspNetCore.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
              Microsoft.AspNetCore.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
              Microsoft.AspNetCore.App 7.0.0-rc.1.22427.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
              Microsoft.AspNetCore.App 7.0.0-rc.2.22476.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
              Microsoft.AspNetCore.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
              Microsoft.NETCore.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
              Microsoft.NETCore.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
              Microsoft.NETCore.App 7.0.0-rc.1.22426.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
              Microsoft.NETCore.App 7.0.0-rc.2.22472.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
              Microsoft.NETCore.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
              Microsoft.WindowsDesktop.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
              Microsoft.WindowsDesktop.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
              Microsoft.WindowsDesktop.App 7.0.0-rc.1.22427.1 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
              Microsoft.WindowsDesktop.App 7.0.0-rc.2.22472.13 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
              Microsoft.WindowsDesktop.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
              Other architectures found:
              arm64 [C:\Program Files\dotnet]
              registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\arm64\InstallLocation]
              x86 [C:\Program Files (x86)\dotnet]
              registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\InstallLocation]
              Environment variables:
              Not set
              global.json file:
              Not found
              Learn more:
              https://aka.ms/dotnet/info
              Download .NET:
              https://aka.ms/dotnet/download
              

              Metadata

              Metadata

              Assignees

              No one assigned

                Labels

                Type

                No type

                Projects

                No projects

                  Milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions

                  , 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
                  Skip to content

                  HttpRequestException: Destination is too short. (Parameter 'destination') #78516

                  Description

                  @BrunoBlanes

                  Is there an existing issue for this?

                  • I have searched the existing issues

                  Describe the bug

                  While using YARP with HTTP3 enabled via an HttpTransformer the request fails with a System.ArgumentException: Destination is too short. (Parameter 'destination').

                  Note that in this particular request, it was supposed to download the _framework/blazor.webassembly.js and a couple of CSS files were successfully downloaded before:
                  image

                  I have only encountered this error while downloading this particular file if HttpRequestMessage.Version is set to 3.0.

                  Expected Behavior

                  Expected the request to complete successfully as it does for most cases, not once did it succeed for this script however.

                  Steps To Reproduce

                  • Create a basic YARP project, enable HTTP3 and set as default version for proxy-to-server communication.
                  publicclassHttp3ProxyRequestTransformer:HttpTransformer{publicoverrideasyncValueTaskTransformRequestAsync(HttpContexthttpContext,HttpRequestMessageproxyRequest,stringdestinationPrefix){awaitbase.TransformRequestAsync(httpContext,proxyRequest,destinationPrefix);// Configures all requests messages to use HTTP3proxyRequest.Version=newVersion(3,0);proxyRequest.VersionPolicy=HttpVersionPolicy.RequestVersionOrLower;}}
                  • Create a Blazor application and enable HTTP3 using ConfigureKestrel and a self-signed certificate:
                  webBuilder.ConfigureKestrel(serverOptions =>{serverOptions.ConfigureHttpsDefaults(httpsOptions =>{httpsOptions.ServerCertificateSelector=(_,name)=>{returnnameis not null?CertificateLoader.LoadFromStoreCert("dev.localhost","My",StoreLocation.CurrentUser,false):null;};});serverOptions.ListenAnyIP(5001, listenOptions =>{listenOptions.UseHttps();listenOptions.Protocols=HttpProtocols.Http1AndHttp2AndHttp3;});});
                  • Forward all requests to the Blazor application:
                  varhttpClient=newHttpMessageInvoker(newSocketsHttpHandler{UseProxy=false,AllowAutoRedirect=false,AutomaticDecompression=DecompressionMethods.None,UseCookies=false});varrequestConfig=newForwarderRequestConfig{ActivityTimeout=TimeSpan.FromSeconds(100)};app.UseEndpoints(endpoints =>{endpoints.Map("/{**catch-all}",async httpContext =>{ForwarderErrorerror=httpContext.Request.Host.ToString().Split('.')switch{[...]
                  _ =>awaitforwarder.SendAsync(httpContext,Intranet,httpClient,requestConfig,newHttp3ProxyRequestTransformer())};});});

                  Exceptions (if any)

                  info: Yarp.ReverseProxy.Forwarder.HttpForwarder[48]
                  Request: An error was encountered before receiving a response.
                  System.Net.Http.HttpRequestException: An error occurred while sending the request.
                  ---> System.ArgumentException: Destination is too short. (Parameter 'destination')
                  at System.Net.Http.QPack.QPackDecoder.DecodeInternal(ReadOnlySpan`1 data, IHttpStreamHeadersHandler handler)
                  at System.Net.Http.Http3RequestStream.ReadHeadersAsync(Int64 headersLength, CancellationToken cancellationToken)
                  at System.Net.Http.Http3RequestStream.ReadResponseAsync(CancellationToken cancellationToken)
                  at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
                  --- End of inner exception stack trace ---
                  at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
                  at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
                  at System.Net.Http.Http3Connection.SendAsync(HttpRequestMessage request, Int64 queueStartingTimestamp, CancellationToken cancellationToken)
                  at System.Net.Http.HttpConnectionPool.TrySendUsingHttp3Async(HttpRequestMessage request, CancellationToken cancellationToken)
                  at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
                  at System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
                  at Yarp.ReverseProxy.Forwarder.HttpForwarder.SendAsync(HttpContext context, String destinationPrefix, HttpMessageInvoker httpClient, ForwarderRequestConfig requestConfig, HttpTransformer transformer)
                  info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
                  Executed endpoint '/{**catch-all}'
                  fail: Microsoft.AspNetCore.Server.Kestrel[13]
                  Connection id "0HMM89CJQ7T8E", Request id "0HMM89CJQ7T8E:00000015": An unhandled exception was thrown by the application.
                  System.Net.Http.HttpRequestException: An error occurred while sending the request.
                  ---> System.ArgumentException: Destination is too short. (Parameter 'destination')
                  at System.Net.Http.QPack.QPackDecoder.DecodeInternal(ReadOnlySpan`1 data, IHttpStreamHeadersHandler handler)
                  at System.Net.Http.Http3RequestStream.ReadHeadersAsync(Int64 headersLength, CancellationToken cancellationToken)
                  at System.Net.Http.Http3RequestStream.ReadResponseAsync(CancellationToken cancellationToken)
                  at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
                  --- End of inner exception stack trace ---
                  at Intervip.ReverseProxy.Startup.<>c__DisplayClass10_0.<<Configure>b__1>d.MoveNext() in C:\Users\bruno\source\repos\Intervip\reverse-proxy\Startup.cs:line 90
                  --- End of stack trace from previous location ---
                  at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
                  at Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware.InvokeAsync(HttpContext context)
                  at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)
                  info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
                  Request finished HTTP/2 GET https://dev.localhost/_framework/blazor.webassembly.js - - - 500 0 - 70.8280ms
                  

                  .NET Version

                  7.0.100

                  Anything else?

                  PS C:\Users\bruno> dotnet --info
                  .NET SDK:
                  Version: 7.0.100
                  Commit: e12b7af219
                  Runtime Environment:
                  OS Name: Windows
                  OS Version: 10.0.22000
                  OS Platform: Windows
                  RID: win10-x64
                  Base Path: C:\Program Files\dotnet\sdk\7.0.100\
                  Host:
                  Version: 7.0.0
                  Architecture: x64
                  Commit: d099f075e4
                  .NET SDKs installed:
                  6.0.403 [C:\Program Files\dotnet\sdk]
                  7.0.100-rc.1.22431.12 [C:\Program Files\dotnet\sdk]
                  7.0.100-rc.2.22477.23 [C:\Program Files\dotnet\sdk]
                  7.0.100 [C:\Program Files\dotnet\sdk]
                  .NET runtimes installed:
                  Microsoft.AspNetCore.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
                  Microsoft.AspNetCore.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
                  Microsoft.AspNetCore.App 7.0.0-rc.1.22427.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
                  Microsoft.AspNetCore.App 7.0.0-rc.2.22476.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
                  Microsoft.AspNetCore.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
                  Microsoft.NETCore.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
                  Microsoft.NETCore.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
                  Microsoft.NETCore.App 7.0.0-rc.1.22426.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
                  Microsoft.NETCore.App 7.0.0-rc.2.22472.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
                  Microsoft.NETCore.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
                  Microsoft.WindowsDesktop.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
                  Microsoft.WindowsDesktop.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
                  Microsoft.WindowsDesktop.App 7.0.0-rc.1.22427.1 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
                  Microsoft.WindowsDesktop.App 7.0.0-rc.2.22472.13 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
                  Microsoft.WindowsDesktop.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
                  Other architectures found:
                  arm64 [C:\Program Files\dotnet]
                  registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\arm64\InstallLocation]
                  x86 [C:\Program Files (x86)\dotnet]
                  registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\InstallLocation]
                  Environment variables:
                  Not set
                  global.json file:
                  Not found
                  Learn more:
                  https://aka.ms/dotnet/info
                  Download .NET:
                  https://aka.ms/dotnet/download
                  

                  Metadata

                  Metadata

                  Assignees

                  No one assigned

                    Labels

                    Type

                    No type

                    Projects

                    No projects

                      Milestone

                      Relationships

                      None yet

                      Development

                      No branches or pull requests

                      Issue actions

                      , 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                      Skip to content

                      HttpRequestException: Destination is too short. (Parameter 'destination') #78516

                      Description

                      @BrunoBlanes

                      Is there an existing issue for this?

                      • I have searched the existing issues

                      Describe the bug

                      While using YARP with HTTP3 enabled via an HttpTransformer the request fails with a System.ArgumentException: Destination is too short. (Parameter 'destination').

                      Note that in this particular request, it was supposed to download the _framework/blazor.webassembly.js and a couple of CSS files were successfully downloaded before:
                      image

                      I have only encountered this error while downloading this particular file if HttpRequestMessage.Version is set to 3.0.

                      Expected Behavior

                      Expected the request to complete successfully as it does for most cases, not once did it succeed for this script however.

                      Steps To Reproduce

                      • Create a basic YARP project, enable HTTP3 and set as default version for proxy-to-server communication.
                      publicclassHttp3ProxyRequestTransformer:HttpTransformer{publicoverrideasyncValueTaskTransformRequestAsync(HttpContexthttpContext,HttpRequestMessageproxyRequest,stringdestinationPrefix){awaitbase.TransformRequestAsync(httpContext,proxyRequest,destinationPrefix);// Configures all requests messages to use HTTP3proxyRequest.Version=newVersion(3,0);proxyRequest.VersionPolicy=HttpVersionPolicy.RequestVersionOrLower;}}
                      • Create a Blazor application and enable HTTP3 using ConfigureKestrel and a self-signed certificate:
                      webBuilder.ConfigureKestrel(serverOptions =>{serverOptions.ConfigureHttpsDefaults(httpsOptions =>{httpsOptions.ServerCertificateSelector=(_,name)=>{returnnameis not null?CertificateLoader.LoadFromStoreCert("dev.localhost","My",StoreLocation.CurrentUser,false):null;};});serverOptions.ListenAnyIP(5001, listenOptions =>{listenOptions.UseHttps();listenOptions.Protocols=HttpProtocols.Http1AndHttp2AndHttp3;});});
                      • Forward all requests to the Blazor application:
                      varhttpClient=newHttpMessageInvoker(newSocketsHttpHandler{UseProxy=false,AllowAutoRedirect=false,AutomaticDecompression=DecompressionMethods.None,UseCookies=false});varrequestConfig=newForwarderRequestConfig{ActivityTimeout=TimeSpan.FromSeconds(100)};app.UseEndpoints(endpoints =>{endpoints.Map("/{**catch-all}",async httpContext =>{ForwarderErrorerror=httpContext.Request.Host.ToString().Split('.')switch{[...]
                      _ =>awaitforwarder.SendAsync(httpContext,Intranet,httpClient,requestConfig,newHttp3ProxyRequestTransformer())};});});

                      Exceptions (if any)

                      info: Yarp.ReverseProxy.Forwarder.HttpForwarder[48]
                      Request: An error was encountered before receiving a response.
                      System.Net.Http.HttpRequestException: An error occurred while sending the request.
                      ---> System.ArgumentException: Destination is too short. (Parameter 'destination')
                      at System.Net.Http.QPack.QPackDecoder.DecodeInternal(ReadOnlySpan`1 data, IHttpStreamHeadersHandler handler)
                      at System.Net.Http.Http3RequestStream.ReadHeadersAsync(Int64 headersLength, CancellationToken cancellationToken)
                      at System.Net.Http.Http3RequestStream.ReadResponseAsync(CancellationToken cancellationToken)
                      at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
                      --- End of inner exception stack trace ---
                      at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
                      at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
                      at System.Net.Http.Http3Connection.SendAsync(HttpRequestMessage request, Int64 queueStartingTimestamp, CancellationToken cancellationToken)
                      at System.Net.Http.HttpConnectionPool.TrySendUsingHttp3Async(HttpRequestMessage request, CancellationToken cancellationToken)
                      at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
                      at System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
                      at Yarp.ReverseProxy.Forwarder.HttpForwarder.SendAsync(HttpContext context, String destinationPrefix, HttpMessageInvoker httpClient, ForwarderRequestConfig requestConfig, HttpTransformer transformer)
                      info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
                      Executed endpoint '/{**catch-all}'
                      fail: Microsoft.AspNetCore.Server.Kestrel[13]
                      Connection id "0HMM89CJQ7T8E", Request id "0HMM89CJQ7T8E:00000015": An unhandled exception was thrown by the application.
                      System.Net.Http.HttpRequestException: An error occurred while sending the request.
                      ---> System.ArgumentException: Destination is too short. (Parameter 'destination')
                      at System.Net.Http.QPack.QPackDecoder.DecodeInternal(ReadOnlySpan`1 data, IHttpStreamHeadersHandler handler)
                      at System.Net.Http.Http3RequestStream.ReadHeadersAsync(Int64 headersLength, CancellationToken cancellationToken)
                      at System.Net.Http.Http3RequestStream.ReadResponseAsync(CancellationToken cancellationToken)
                      at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
                      --- End of inner exception stack trace ---
                      at Intervip.ReverseProxy.Startup.<>c__DisplayClass10_0.<<Configure>b__1>d.MoveNext() in C:\Users\bruno\source\repos\Intervip\reverse-proxy\Startup.cs:line 90
                      --- End of stack trace from previous location ---
                      at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
                      at Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware.InvokeAsync(HttpContext context)
                      at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)
                      info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
                      Request finished HTTP/2 GET https://dev.localhost/_framework/blazor.webassembly.js - - - 500 0 - 70.8280ms
                      

                      .NET Version

                      7.0.100

                      Anything else?

                      PS C:\Users\bruno> dotnet --info
                      .NET SDK:
                      Version: 7.0.100
                      Commit: e12b7af219
                      Runtime Environment:
                      OS Name: Windows
                      OS Version: 10.0.22000
                      OS Platform: Windows
                      RID: win10-x64
                      Base Path: C:\Program Files\dotnet\sdk\7.0.100\
                      Host:
                      Version: 7.0.0
                      Architecture: x64
                      Commit: d099f075e4
                      .NET SDKs installed:
                      6.0.403 [C:\Program Files\dotnet\sdk]
                      7.0.100-rc.1.22431.12 [C:\Program Files\dotnet\sdk]
                      7.0.100-rc.2.22477.23 [C:\Program Files\dotnet\sdk]
                      7.0.100 [C:\Program Files\dotnet\sdk]
                      .NET runtimes installed:
                      Microsoft.AspNetCore.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
                      Microsoft.AspNetCore.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
                      Microsoft.AspNetCore.App 7.0.0-rc.1.22427.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
                      Microsoft.AspNetCore.App 7.0.0-rc.2.22476.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
                      Microsoft.AspNetCore.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
                      Microsoft.NETCore.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
                      Microsoft.NETCore.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
                      Microsoft.NETCore.App 7.0.0-rc.1.22426.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
                      Microsoft.NETCore.App 7.0.0-rc.2.22472.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
                      Microsoft.NETCore.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
                      Microsoft.WindowsDesktop.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
                      Microsoft.WindowsDesktop.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
                      Microsoft.WindowsDesktop.App 7.0.0-rc.1.22427.1 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
                      Microsoft.WindowsDesktop.App 7.0.0-rc.2.22472.13 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
                      Microsoft.WindowsDesktop.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
                      Other architectures found:
                      arm64 [C:\Program Files\dotnet]
                      registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\arm64\InstallLocation]
                      x86 [C:\Program Files (x86)\dotnet]
                      registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\InstallLocation]
                      Environment variables:
                      Not set
                      global.json file:
                      Not found
                      Learn more:
                      https://aka.ms/dotnet/info
                      Download .NET:
                      https://aka.ms/dotnet/download
                      

                      Metadata

                      Metadata

                      Assignees

                      No one assigned

                        Labels

                        Type

                        No type

                        Projects

                        No projects

                          Milestone

                          Relationships

                          None yet

                          Development

                          No branches or pull requests

                          Issue actions

                          , 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                          Skip to content

                          HttpRequestException: Destination is too short. (Parameter 'destination') #78516

                          Description

                          @BrunoBlanes

                          Is there an existing issue for this?

                          • I have searched the existing issues

                          Describe the bug

                          While using YARP with HTTP3 enabled via an HttpTransformer the request fails with a System.ArgumentException: Destination is too short. (Parameter 'destination').

                          Note that in this particular request, it was supposed to download the _framework/blazor.webassembly.js and a couple of CSS files were successfully downloaded before:
                          image

                          I have only encountered this error while downloading this particular file if HttpRequestMessage.Version is set to 3.0.

                          Expected Behavior

                          Expected the request to complete successfully as it does for most cases, not once did it succeed for this script however.

                          Steps To Reproduce

                          • Create a basic YARP project, enable HTTP3 and set as default version for proxy-to-server communication.
                          publicclassHttp3ProxyRequestTransformer:HttpTransformer{publicoverrideasyncValueTaskTransformRequestAsync(HttpContexthttpContext,HttpRequestMessageproxyRequest,stringdestinationPrefix){awaitbase.TransformRequestAsync(httpContext,proxyRequest,destinationPrefix);// Configures all requests messages to use HTTP3proxyRequest.Version=newVersion(3,0);proxyRequest.VersionPolicy=HttpVersionPolicy.RequestVersionOrLower;}}
                          • Create a Blazor application and enable HTTP3 using ConfigureKestrel and a self-signed certificate:
                          webBuilder.ConfigureKestrel(serverOptions =>{serverOptions.ConfigureHttpsDefaults(httpsOptions =>{httpsOptions.ServerCertificateSelector=(_,name)=>{returnnameis not null?CertificateLoader.LoadFromStoreCert("dev.localhost","My",StoreLocation.CurrentUser,false):null;};});serverOptions.ListenAnyIP(5001, listenOptions =>{listenOptions.UseHttps();listenOptions.Protocols=HttpProtocols.Http1AndHttp2AndHttp3;});});
                          • Forward all requests to the Blazor application:
                          varhttpClient=newHttpMessageInvoker(newSocketsHttpHandler{UseProxy=false,AllowAutoRedirect=false,AutomaticDecompression=DecompressionMethods.None,UseCookies=false});varrequestConfig=newForwarderRequestConfig{ActivityTimeout=TimeSpan.FromSeconds(100)};app.UseEndpoints(endpoints =>{endpoints.Map("/{**catch-all}",async httpContext =>{ForwarderErrorerror=httpContext.Request.Host.ToString().Split('.')switch{[...]
                          _ =>awaitforwarder.SendAsync(httpContext,Intranet,httpClient,requestConfig,newHttp3ProxyRequestTransformer())};});});

                          Exceptions (if any)

                          info: Yarp.ReverseProxy.Forwarder.HttpForwarder[48]
                          Request: An error was encountered before receiving a response.
                          System.Net.Http.HttpRequestException: An error occurred while sending the request.
                          ---> System.ArgumentException: Destination is too short. (Parameter 'destination')
                          at System.Net.Http.QPack.QPackDecoder.DecodeInternal(ReadOnlySpan`1 data, IHttpStreamHeadersHandler handler)
                          at System.Net.Http.Http3RequestStream.ReadHeadersAsync(Int64 headersLength, CancellationToken cancellationToken)
                          at System.Net.Http.Http3RequestStream.ReadResponseAsync(CancellationToken cancellationToken)
                          at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
                          --- End of inner exception stack trace ---
                          at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
                          at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
                          at System.Net.Http.Http3Connection.SendAsync(HttpRequestMessage request, Int64 queueStartingTimestamp, CancellationToken cancellationToken)
                          at System.Net.Http.HttpConnectionPool.TrySendUsingHttp3Async(HttpRequestMessage request, CancellationToken cancellationToken)
                          at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
                          at System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
                          at Yarp.ReverseProxy.Forwarder.HttpForwarder.SendAsync(HttpContext context, String destinationPrefix, HttpMessageInvoker httpClient, ForwarderRequestConfig requestConfig, HttpTransformer transformer)
                          info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
                          Executed endpoint '/{**catch-all}'
                          fail: Microsoft.AspNetCore.Server.Kestrel[13]
                          Connection id "0HMM89CJQ7T8E", Request id "0HMM89CJQ7T8E:00000015": An unhandled exception was thrown by the application.
                          System.Net.Http.HttpRequestException: An error occurred while sending the request.
                          ---> System.ArgumentException: Destination is too short. (Parameter 'destination')
                          at System.Net.Http.QPack.QPackDecoder.DecodeInternal(ReadOnlySpan`1 data, IHttpStreamHeadersHandler handler)
                          at System.Net.Http.Http3RequestStream.ReadHeadersAsync(Int64 headersLength, CancellationToken cancellationToken)
                          at System.Net.Http.Http3RequestStream.ReadResponseAsync(CancellationToken cancellationToken)
                          at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
                          --- End of inner exception stack trace ---
                          at Intervip.ReverseProxy.Startup.<>c__DisplayClass10_0.<<Configure>b__1>d.MoveNext() in C:\Users\bruno\source\repos\Intervip\reverse-proxy\Startup.cs:line 90
                          --- End of stack trace from previous location ---
                          at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
                          at Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware.InvokeAsync(HttpContext context)
                          at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)
                          info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
                          Request finished HTTP/2 GET https://dev.localhost/_framework/blazor.webassembly.js - - - 500 0 - 70.8280ms
                          

                          .NET Version

                          7.0.100

                          Anything else?

                          PS C:\Users\bruno> dotnet --info
                          .NET SDK:
                          Version: 7.0.100
                          Commit: e12b7af219
                          Runtime Environment:
                          OS Name: Windows
                          OS Version: 10.0.22000
                          OS Platform: Windows
                          RID: win10-x64
                          Base Path: C:\Program Files\dotnet\sdk\7.0.100\
                          Host:
                          Version: 7.0.0
                          Architecture: x64
                          Commit: d099f075e4
                          .NET SDKs installed:
                          6.0.403 [C:\Program Files\dotnet\sdk]
                          7.0.100-rc.1.22431.12 [C:\Program Files\dotnet\sdk]
                          7.0.100-rc.2.22477.23 [C:\Program Files\dotnet\sdk]
                          7.0.100 [C:\Program Files\dotnet\sdk]
                          .NET runtimes installed:
                          Microsoft.AspNetCore.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
                          Microsoft.AspNetCore.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
                          Microsoft.AspNetCore.App 7.0.0-rc.1.22427.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
                          Microsoft.AspNetCore.App 7.0.0-rc.2.22476.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
                          Microsoft.AspNetCore.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
                          Microsoft.NETCore.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
                          Microsoft.NETCore.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
                          Microsoft.NETCore.App 7.0.0-rc.1.22426.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
                          Microsoft.NETCore.App 7.0.0-rc.2.22472.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
                          Microsoft.NETCore.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
                          Microsoft.WindowsDesktop.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
                          Microsoft.WindowsDesktop.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
                          Microsoft.WindowsDesktop.App 7.0.0-rc.1.22427.1 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
                          Microsoft.WindowsDesktop.App 7.0.0-rc.2.22472.13 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
                          Microsoft.WindowsDesktop.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
                          Other architectures found:
                          arm64 [C:\Program Files\dotnet]
                          registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\arm64\InstallLocation]
                          x86 [C:\Program Files (x86)\dotnet]
                          registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\InstallLocation]
                          Environment variables:
                          Not set
                          global.json file:
                          Not found
                          Learn more:
                          https://aka.ms/dotnet/info
                          Download .NET:
                          https://aka.ms/dotnet/download
                          

                          Metadata

                          Metadata

                          Assignees

                          No one assigned

                            Labels

                            Type

                            No type

                            Projects

                            No projects

                              Milestone

                              Relationships

                              None yet

                              Development

                              No branches or pull requests

                              Issue actions

                              , 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                              Skip to content

                              HttpRequestException: Destination is too short. (Parameter 'destination') #78516

                              Description

                              @BrunoBlanes

                              Is there an existing issue for this?

                              • I have searched the existing issues

                              Describe the bug

                              While using YARP with HTTP3 enabled via an HttpTransformer the request fails with a System.ArgumentException: Destination is too short. (Parameter 'destination').

                              Note that in this particular request, it was supposed to download the _framework/blazor.webassembly.js and a couple of CSS files were successfully downloaded before:
                              image

                              I have only encountered this error while downloading this particular file if HttpRequestMessage.Version is set to 3.0.

                              Expected Behavior

                              Expected the request to complete successfully as it does for most cases, not once did it succeed for this script however.

                              Steps To Reproduce

                              • Create a basic YARP project, enable HTTP3 and set as default version for proxy-to-server communication.
                              publicclassHttp3ProxyRequestTransformer:HttpTransformer{publicoverrideasyncValueTaskTransformRequestAsync(HttpContexthttpContext,HttpRequestMessageproxyRequest,stringdestinationPrefix){awaitbase.TransformRequestAsync(httpContext,proxyRequest,destinationPrefix);// Configures all requests messages to use HTTP3proxyRequest.Version=newVersion(3,0);proxyRequest.VersionPolicy=HttpVersionPolicy.RequestVersionOrLower;}}
                              • Create a Blazor application and enable HTTP3 using ConfigureKestrel and a self-signed certificate:
                              webBuilder.ConfigureKestrel(serverOptions =>{serverOptions.ConfigureHttpsDefaults(httpsOptions =>{httpsOptions.ServerCertificateSelector=(_,name)=>{returnnameis not null?CertificateLoader.LoadFromStoreCert("dev.localhost","My",StoreLocation.CurrentUser,false):null;};});serverOptions.ListenAnyIP(5001, listenOptions =>{listenOptions.UseHttps();listenOptions.Protocols=HttpProtocols.Http1AndHttp2AndHttp3;});});
                              • Forward all requests to the Blazor application:
                              varhttpClient=newHttpMessageInvoker(newSocketsHttpHandler{UseProxy=false,AllowAutoRedirect=false,AutomaticDecompression=DecompressionMethods.None,UseCookies=false});varrequestConfig=newForwarderRequestConfig{ActivityTimeout=TimeSpan.FromSeconds(100)};app.UseEndpoints(endpoints =>{endpoints.Map("/{**catch-all}",async httpContext =>{ForwarderErrorerror=httpContext.Request.Host.ToString().Split('.')switch{[...]
                              _ =>awaitforwarder.SendAsync(httpContext,Intranet,httpClient,requestConfig,newHttp3ProxyRequestTransformer())};});});

                              Exceptions (if any)

                              info: Yarp.ReverseProxy.Forwarder.HttpForwarder[48]
                              Request: An error was encountered before receiving a response.
                              System.Net.Http.HttpRequestException: An error occurred while sending the request.
                              ---> System.ArgumentException: Destination is too short. (Parameter 'destination')
                              at System.Net.Http.QPack.QPackDecoder.DecodeInternal(ReadOnlySpan`1 data, IHttpStreamHeadersHandler handler)
                              at System.Net.Http.Http3RequestStream.ReadHeadersAsync(Int64 headersLength, CancellationToken cancellationToken)
                              at System.Net.Http.Http3RequestStream.ReadResponseAsync(CancellationToken cancellationToken)
                              at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
                              --- End of inner exception stack trace ---
                              at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
                              at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
                              at System.Net.Http.Http3Connection.SendAsync(HttpRequestMessage request, Int64 queueStartingTimestamp, CancellationToken cancellationToken)
                              at System.Net.Http.HttpConnectionPool.TrySendUsingHttp3Async(HttpRequestMessage request, CancellationToken cancellationToken)
                              at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
                              at System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
                              at Yarp.ReverseProxy.Forwarder.HttpForwarder.SendAsync(HttpContext context, String destinationPrefix, HttpMessageInvoker httpClient, ForwarderRequestConfig requestConfig, HttpTransformer transformer)
                              info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
                              Executed endpoint '/{**catch-all}'
                              fail: Microsoft.AspNetCore.Server.Kestrel[13]
                              Connection id "0HMM89CJQ7T8E", Request id "0HMM89CJQ7T8E:00000015": An unhandled exception was thrown by the application.
                              System.Net.Http.HttpRequestException: An error occurred while sending the request.
                              ---> System.ArgumentException: Destination is too short. (Parameter 'destination')
                              at System.Net.Http.QPack.QPackDecoder.DecodeInternal(ReadOnlySpan`1 data, IHttpStreamHeadersHandler handler)
                              at System.Net.Http.Http3RequestStream.ReadHeadersAsync(Int64 headersLength, CancellationToken cancellationToken)
                              at System.Net.Http.Http3RequestStream.ReadResponseAsync(CancellationToken cancellationToken)
                              at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken)
                              --- End of inner exception stack trace ---
                              at Intervip.ReverseProxy.Startup.<>c__DisplayClass10_0.<<Configure>b__1>d.MoveNext() in C:\Users\bruno\source\repos\Intervip\reverse-proxy\Startup.cs:line 90
                              --- End of stack trace from previous location ---
                              at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
                              at Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware.InvokeAsync(HttpContext context)
                              at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)
                              info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
                              Request finished HTTP/2 GET https://dev.localhost/_framework/blazor.webassembly.js - - - 500 0 - 70.8280ms
                              

                              .NET Version

                              7.0.100

                              Anything else?

                              PS C:\Users\bruno> dotnet --info
                              .NET SDK:
                              Version: 7.0.100
                              Commit: e12b7af219
                              Runtime Environment:
                              OS Name: Windows
                              OS Version: 10.0.22000
                              OS Platform: Windows
                              RID: win10-x64
                              Base Path: C:\Program Files\dotnet\sdk\7.0.100\
                              Host:
                              Version: 7.0.0
                              Architecture: x64
                              Commit: d099f075e4
                              .NET SDKs installed:
                              6.0.403 [C:\Program Files\dotnet\sdk]
                              7.0.100-rc.1.22431.12 [C:\Program Files\dotnet\sdk]
                              7.0.100-rc.2.22477.23 [C:\Program Files\dotnet\sdk]
                              7.0.100 [C:\Program Files\dotnet\sdk]
                              .NET runtimes installed:
                              Microsoft.AspNetCore.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
                              Microsoft.AspNetCore.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
                              Microsoft.AspNetCore.App 7.0.0-rc.1.22427.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
                              Microsoft.AspNetCore.App 7.0.0-rc.2.22476.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
                              Microsoft.AspNetCore.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
                              Microsoft.NETCore.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
                              Microsoft.NETCore.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
                              Microsoft.NETCore.App 7.0.0-rc.1.22426.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
                              Microsoft.NETCore.App 7.0.0-rc.2.22472.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
                              Microsoft.NETCore.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
                              Microsoft.WindowsDesktop.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
                              Microsoft.WindowsDesktop.App 6.0.11 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
                              Microsoft.WindowsDesktop.App 7.0.0-rc.1.22427.1 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
                              Microsoft.WindowsDesktop.App 7.0.0-rc.2.22472.13 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
                              Microsoft.WindowsDesktop.App 7.0.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
                              Other architectures found:
                              arm64 [C:\Program Files\dotnet]
                              registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\arm64\InstallLocation]
                              x86 [C:\Program Files (x86)\dotnet]
                              registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\InstallLocation]
                              Environment variables:
                              Not set
                              global.json file:
                              Not found
                              Learn more:
                              https://aka.ms/dotnet/info
                              Download .NET:
                              https://aka.ms/dotnet/download
                              

                              Metadata

                              Metadata

                              Assignees

                              No one assigned

                                Labels

                                Type

                                No type

                                Projects

                                No projects

                                  Milestone

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions