Opened 4 years ago

Closed 4 years ago

#895 closed defect (invalid)

Header text ignored in HTT2

Reported by: studdugie@… Owned by:
Priority: major Milestone:
Component: nginx-core Version: 1.9.x
Keywords: Cc:
uname -a: Linux hostname 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
nginx -V: nginx version: nginx/1.9.10
built with OpenSSL 1.0.1f 6 Jan 2014
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/ --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-threads --add-module=/build/nginx-lqcklR/nginx-1.9.10/debian/modules/nginx-auth-pam --add-module=/build/nginx-lqcklR/nginx-1.9.10/debian/modules/nginx-dav-ext-module --add-module=/build/nginx-lqcklR/nginx-1.9.10/debian/modules/nginx-echo --add-module=/build/nginx-lqcklR/nginx-1.9.10/debian/modules/nginx-upstream-fair --add-module=/build/nginx-lqcklR/nginx-1.9.10/debian/modules/ngx_http_substitutions_filter_module


I'm running nginx + PHP7-fpm. When I enable HTTP2 and PHP sets the response header the message text is replaced w/ the default. For example:


$code = 502;
$msg = "Hello World";
$protocol = $_SERVER['SERVER_PROTOCOL'];
header("$protocol $code $msg");

One would expect that fetching test.php would result in a HTTP response code of 502 and status text of "Hello World". When HTTP2 is enabled the status code is 502 and the status text is "Bad Gateway". When HTTP is disabled the status code is 502 and the status text is "Hello World".

Change History (1)

comment:1 by Maxim Dounin, 4 years ago

Resolution: invalid
Status: newclosed

There is no reason phrase in HTTP/2, see

HTTP/2 does not define a way to carry the version or reason phrase that is included in an HTTP/1.1 status line.

That is, that's expected result of using HTTP/2. Default text you see is something your client shows based on the code.

Note: See TracTickets for help on using tickets.