Bug 1429006

Summary: Server stopped to send linked content in the HTML page while Protocols h2 h2c http/1.1 option is on
Product: Red Hat Software Collections Reporter: Jan Houska <jhouska>
Component: httpd24Assignee: Luboš Uhliarik <luhliari>
Status: CLOSED NOTABUG QA Contact: BaseOS QE - Apps <qe-baseos-apps>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: httpd24CC: carl, jhouska, jorton, lkuprova, luhliari
Target Milestone: ---   
Target Release: 3.1   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: httpd24-httpd-2.4.26-2.el7 Doc Type: Known Issue
Doc Text:
Since httpd 2.4.27, the mod_http2 module is no longer supported with the default prefork Multi-Processing Module (MPM). To enable HTTP/2 support, edit the configuration file at /opt/rh/httpd24/root/etc/httpd/conf.modules.d/00-mpm.conf and switch to the event or worker MPM. Note that the HTTP/2 server-push feature does not work on the 64-bit ARM architecture, IBM z Systems, and IBM POWER, little endian.
Story Points: ---
Clone Of: Environment:
Last Closed: 2017-11-10 13:24:02 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Jan Houska 2017-03-03 19:34:07 UTC
Description of problem:
I found regression. Server stopped push adjacent content of the HTML page while "Protocols h2 h2c http/1.1" option is on.


Version-Release number of selected component (if applicable):
httpd24-httpd-2.4.25-8.el6.x86_64
httpd24-httpd-2.4.25-8.el7.x86_64




How reproducible:
always 

Steps to Reproduce:
1. run the liked test case for collection:  COLLECTION=httpd24 make run


Actual results:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: [   LOG    ] :: Protocols h2 h2c http/1.1
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:: [  BEGIN   ] :: Enabling HTTP/2 support :: actually running 'sed -i 's/^#Protocols/Protocols/' /opt/rh/httpd24/root/etc/httpd/conf.d/httpd.conf'
:: [   PASS   ] :: Enabling HTTP/2 support (Expected 0, got 0)
:: [  BEGIN   ] :: Restarting httpd :: actually running 'service httpd24-httpd restart'
Stopping httpd: [  OK  ]
Starting httpd: [  OK  ]
:: [   PASS   ] :: Restarting httpd (Expected 0, got 0)
:: [  BEGIN   ] :: Sniffing for TCP PSH packets coming to/from port 80 :: actually running 'tcpdump -A -i any 'tcp port 80 and tcp[tcpflags] & tcp-push != 0' > dump &'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
:: [   PASS   ] :: Sniffing for TCP PSH packets coming to/from port 80 (Expected 0, got 0)
:: [  BEGIN   ] :: Downloading file over HTTP/2 :: actually running 'curl --http2 -v http://127.0.0.1/http2.html'
*   Trying 127.0.0.1...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Connected to 127.0.0.1 (127.0.0.1) port 80 (#0)
> GET /http2.html HTTP/1.1
> Host: 127.0.0.1
> User-Agent: curl/7.47.1
> Accept: */*
> Connection: Upgrade, HTTP2-Settings
> Upgrade: h2c
> HTTP2-Settings: AAMAAABkAAQAAP__
> 
< HTTP/1.1 101 Switching Protocols
< Upgrade: h2c
< Connection: Upgrade
* Received 101
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* TCP_NODELAY set
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/2.0 200
< date:Sun, 00 Jan 1900 00:00:00 GMT
< server:Apache/2.4.25 (Red Hat) mod_auth_kerb/5.4 PHP/5.5.21 mod_wsgi/3.4 Python/2.7.8 mod_perl/2.0.9dev Perl/v5.20.1
< last-modified:Thu, 02 Mar 2017 22:59:38 GMT
< etag:W/"6d-549c7623acdaf"
< accept-ranges:bytes
< content-length:109
< link:</fake.jpg>;rel=preload
< content-type:text/html; charset=UTF-8
< push-policy:default
< 
{ [109 bytes data]

100   109  100   109    0     0  93401      0 --:--:-- --:--:-- --:--:--  106k
* Connection #0 to host 127.0.0.1 left intact
<html>
  <head>
    <title>HTTP/2 Test</title>
  </head>
  <body>
    <img src="fake.jpg">
  </body>
</html>
:: [   PASS   ] :: Downloading file over HTTP/2 (Expected 0, got 0)
:: [  BEGIN   ] :: Stopping TCP packet sniffing :: actually running 'pkill tcpdump'
9 packets captured
18 packets received by filter
0 packets dropped by kernel
:: [   PASS   ] :: Stopping TCP packet sniffing (Expected 0, got 0)
:: [   PASS   ] :: File '/var/tmp/rlRun_LOG.xY0zHQ1A' should contain 'HTTP/1.1 101 Switching Protocols' 
:: [   PASS   ] :: File '/var/tmp/rlRun_LOG.xY0zHQ1A' should contain 'HTTP/2.0 200' 
:: [   PASS   ] :: File '/var/tmp/rlRun_LOG.xY0zHQ1A' should contain 'link:</fake.jpg>;rel=preload' 
:: [ 17:59:44 ] :: [ INFO    ] :: HTTP/2 headers should be compressed, not plaintext
:: [   PASS   ] :: File 'dump' should contain 'HTTP/1.1 101 Switching Protocols' 
:: [   PASS   ] :: File 'dump' should not contain 'HTTP/2.0 200' 
:: [ 17:59:44 ] :: [ INFO    ] :: Server should push a JPEG in addition to the HTML page
:: [   FAIL   ] :: File 'dump' should contain 'This is a fake JPEG' 


Expected results:
File 'dump' should contain 'This is a fake JPEG' 


Additional info:

Comment 9 Jan Houska 2017-04-03 09:08:52 UTC
Yes, I can reproduce same bug 
":: [   FAIL   ] :: File 'dump' should contain 'This is a fake JPEG' "  
also for RHEL-7.3.

See beaker job:https://beaker.engineering.redhat.com/jobs/1789331