Traefik returning empty response for JSON, HTML works?

I'm running Traefik in front of jenkins (docker in swarm mode - single host atm).

Networking is via shared docker network (traefik_proxy, overlay/swarm) and the rest in labels:

    deploy:
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.jenkins.rule=Host(`jenkins.xxxxxxxx`)"
        - "traefik.http.routers.jenkins.tls=true"
        - "traefik.http.services.jenkins.loadbalancer.server.port=8080"
    networks:
      - traefik_proxy
    ports:
      - 8080
      - 50000:50000

The web interface works perfectly, but I have a number of pipelines that trigger using the "generic webhook trigger" plugin that returns JSON as a reply.

If I call it directly on the host/port itself it works perfectly:

curl -v "http://127.0.0.1:30003/generic-webhook-trigger/invoke?token=json_tester"
* About to connect() to 127.0.0.1 port 30003 (#0)
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 30003 (#0)
> GET /generic-webhook-trigger/invoke?token=json_tester HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 127.0.0.1:30003
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Thu, 07 May 2020 11:10:48 GMT
< X-Content-Type-Options: nosniff
< Content-Type: application/json;charset=utf-8
< Content-Length: 183
< Server: Jetty(9.4.25.v20191220)
<
* Connection #0 to host 127.0.0.1 left intact
{"jobs":{"json_tester":{"regexpFilterExpression":"","triggered":true,"resolvedVariables":{},"regexpFilterText":"","id":173313,"url":"queue/item/173313/"}},"message":"Triggered jobs."}

However, if I call it through traefik (https -> http):

curl -v "https://jenkins.xxxxxxx/generic-webhook-trigger/invoke?token=json_tester"
*   Trying 10.122.44.7...
* TCP_NODELAY set
* Connected to jenkins.xxxxxx (10.122.44.7) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
...
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use h2
* Server certificate:
...
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x7ffd0580d600)
> GET /generic-webhook-trigger/invoke?token=json_tester HTTP/2
> Host: jenkins.xxxxxxxx
> User-Agent: curl/7.64.1
> Accept: */*
>
* Connection state changed (MAX_CONCURRENT_STREAMS == 250)!
< HTTP/2 200
< content-type: application/json;charset=utf-8
< date: Thu, 07 May 2020 12:19:27 GMT
< server: Jetty(9.4.25.v20191220)
< x-content-type-options: nosniff
< content-length: 0
<
* Connection #0 to host jenkins.xxxxx left intact
* Closing connection 0

In both cases the pipeline runs, only in the second I don't get a response back, which I really need as it's evaluated in the rest of the flows.

Any ideas?

Edit: It's also not HTTP/2 related, I ran curl with --no-alpn and the result was exactly the same HTTP/1.1

Edit 2: It does appear to be TLS-termination related, because if I remove the "traefik.http.routers.jenkins.tls=true" and try via http instead of https, I do get the json back to the client