RFC 3875 defines the HTTP version number as "<major>.<minor>" for the purposes of the CGI variable "SERVER_PROTOCOL". This implementation simply has "HTTP/2", which has no minor number. Change line 408 of file modules/http2/h2_request.c to read "HTTP/2.0". ap_parse_uri(r, req->path); - r->protocol = (char*)"HTTP/2"; + r->protocol = (char*)"HTTP/2.0"; r->proto_num = HTTP_VERSION(2, 0); RFC 7540 did NOT override RFC 3875 but claims backward compatibility. Granted that RFC 7540 refers to the second, binary implementation of HTTP as "HTTP/2", that was insufficient to override the ABNF syntax for the CGI interface in the absence of an affirmation of such an override. RFC 3875, Section 4.1.16 ABNF: HTTP-Version = "HTTP" "/" 1*digit "." 1*digit The "minor" number is not optional.
Since you already triggered the discussion on the http wg mailing, let's see what the outcome of that will be. In the meantime, if you have incompatibilities with existing CGI deployments, have you tried H2SerializeHeaders on for those? This is the mod_http2 backward compatibility switch that runs all requests as if there had been come via HTTP/1.1.
Just for the records, also the HTTP protocol should include the minor version in the HTTP version. This is defined in RFC 7230, section 2.6. https://tools.ietf.org/html/rfc7230#section-2.6
RFC 7230 is only relevant for HTTP/1.1 I guess. Sorry for the noise.
Changed in trunk with r1740108, 2.4.x with r1740112.