Testing HTTP/2 support in PHP

From: Date: Wed, 30 Dec 2015 23:28:27 +0000
Subject: Testing HTTP/2 support in PHP
Groups: php.internals 
Request: Send a blank email to internals+get-89932@lists.php.net to get a copy of this message
Hey all, In the PR for adding HTTP/2 Server Push support to curl, Julien raises the question of adding tests for this feature [1]. This is currently very difficult. While we have the cli-server, it currently only supports HTTP/1.x. This means we need another httpd to test against that supports both HTTP/2 and server push — currently that means something like a node script using node-http2, or nghttpd (both of which have been what I tested the patch against). While I have a docker container for testing, this obviously doesn't fit well into make tests. The simplest solution along those lines is to check for node and run a node daemon, but it doesn't scale well to lots of use cases, and is purely for testing. However, Rasmus raised the possibility of adding HTTP/2 support to the cli-server [2], and (someone? @php-pulls) suggested we pull in a third party lib to do the heavy lifting [3]. My recommendation would be to use libnghttp2 [4] which curl also uses — however, as this adds a new dependency, I think it should be optional (e.g. --with-nghttp2-dir=[PATH]), with it falling back to the current HTTP/1.x implementation. We could also add a flag (e.g. --[no-]http2) on the CLI for enabling/disabling it — this would be helpful for testing HTTP/2 client fallback when it's not supported. This is a much more useful tool than relying on node for make tests, and allows us to test adding HTTP/2 support to ext/curl, the HTTP stream (which could also use libnghttp2…), userland HTTP/2 clients, pecl_http (if that's still a thing), etc. Now, I don't think I have the ability to achieve this, but I'm willing to give it a go. At the very least, I'm more than happy to write up the RFC and work with someone on this. Thoughts? - Davey [1] https://github.com/php/php-src/pull/1692#issuecomment-166935246 [2] https://github.com/php/php-src/pull/1692#issuecomment-166972540 [3] https://github.com/php/php-src/pull/1692#issuecomment-166997465 [4] https://nghttp2.org

« previous php.internals (#89932) next »