curl-http3 icon indicating copy to clipboard operation
curl-http3 copied to clipboard

Missing `--compressed` support

Open francislavoie opened this issue 1 year ago • 7 comments

$ docker run -it --rm --net=host ymuski/curl-http3 curl -vs -o/dev/null --http3-only --compressed https://localhost
curl: option --compressed: the installed libcurl version doesn't support this
curl: try 'curl --help' for more information

francislavoie avatar Aug 02 '23 22:08 francislavoie

Hi @francislavoie

I've checked curl compile options, and there are no options about compression.

So I've check curl code and seems compression does not work with BoringSSL on which this version is based

yurymuski avatar Sep 02 '23 19:09 yurymuski

I was able to compile with zlib, seems working, but not well tested

yurymuski avatar Sep 02 '23 20:09 yurymuski

If you have a branch I can try it out with my webserver to confirm :+1:

francislavoie avatar Sep 02 '23 20:09 francislavoie

Released as new version

 docker run -it --rm ymuski/curl-http3 curl -IL https://yurets.pro --compressed --http3
> content-encoding: gzip

you can try it

docker pull ymuski/curl-http3:latest
docker pull ymuski/curl-http3:8.2.1

yurymuski avatar Sep 02 '23 21:09 yurymuski

Hmm, that's weird. It seems to hang after making the request and reading most of the response body.

Here's how I'm testing it:

  • Download a build of Caddy from https://github.com/caddyserver/caddy/releases/tag/v2.7.4, chmod +x the binary if necessary
  • Make a Caddyfile with the below contents:
{
	admin off
	debug
	http_port 8881
	https_port 8882
}

https://localhost:8882 {
	log
	encode gzip
	respond "THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING THIS IS A LONG STRING this is the end"
}
  • Run Caddy with ./caddy run --config Caddyfile, this'll spin up a server with a self-managed CA listening for requests to https://localhost:8882
  • Make a request with docker run -it --rm --init --net=host ymuski/curl-http3 curl -vks --http3-only --compressed https://localhost:8882
  • Notice it hangs after the response, it also never prints out this is the end and it stops printing before the last chunk of the body, no matter the length of the body (you can add tons of extra text in the middle and notice it'll print the middle stuff but not the ending stuff :thinking:)
  • Using --init is necessary because otherwise the Ctrl+C signal will not reach the curl command and the container will hang indefinitely. Using --net=host cause it's just slightly easier to run Caddy on the host machine since it's a static binary, don't feel like setting up a docker-compose file etc. Using -k because it's a self-managed CA and the CA cert on the host isn't visible to the curl in the container.

francislavoie avatar Sep 02 '23 21:09 francislavoie

does it behave same w/o http3?

and whats the behavior of regular curl with http1.1?

yurymuski avatar Sep 02 '23 22:09 yurymuski

I will update https://github.com/yurymuski/nginx-http3 for latest quiche and check on it also

yurymuski avatar Sep 02 '23 22:09 yurymuski