Bug ID 586660: HTTP/2 and RAM Cache are not compatible.

Last Modified: Sep 14, 2023

Affected Product(s):
BIG-IP LTM(all modules)

Known Affected Versions:
11.4.1, 11.5.0, 11.5.1, 11.5.2, 11.5.3, 11.5.4, 11.5.5, 11.5.6, 11.5.7, 11.5.8, 11.5.9, 11.5.10, 11.6.0, 11.6.1, 11.6.2, 11.6.3, 11.6.3.1, 11.6.3.2, 11.6.3.3, 11.6.3.4, 11.6.4, 11.6.5, 11.6.5.1, 11.6.5.2, 11.6.5.3, 12.0.0, 12.0.0 HF1, 12.1.0 HF1, 12.0.0 HF2, 12.1.0 HF2, 12.0.0 HF3, 12.0.0 HF4, 12.1.1 HF1, 12.1.1 HF2, 12.1.2 HF1, 12.1.2 HF2, 12.1.0, 12.1.1, 12.1.2, 12.1.3, 12.1.3.1, 12.1.3.2, 12.1.3.3, 12.1.3.4, 12.1.3.5, 12.1.3.6, 12.1.3.7, 12.1.4, 12.1.4.1, 12.1.5, 12.1.5.1, 12.1.5.2, 12.1.5.3, 12.1.6, 14.1.2, 14.1.2.1, 14.1.2.2, 14.1.2.3, 14.1.2.4, 14.1.2.5, 14.1.2.6, 14.1.2.7, 14.1.2.8, 14.1.3, 14.1.3.1, 14.1.4, 14.1.4.1, 14.1.4.2, 14.1.4.3, 14.1.4.4, 14.1.4.5, 14.1.4.6, 14.1.5, 14.1.5.1, 14.1.5.2, 14.1.5.3, 14.1.5.4, 14.1.5.6

Fixed In:
13.0.0

Opened: Apr 11, 2016

Severity: 3-Major

Related Article: K44406003

Symptoms

A virtual server fails some requests where the response is served from cache.

Impact

Errors in certain Tcl commands or failed requests. These correlate to Conditions as follows: 1. If a virtual server has either SPDY or HTTP/2 enabled, it might fail requests that would normally be served from RAM cache. 2. An HTTP virtual server that has an iRule attached that responds to the HTTP_RESPONSE_RELEASE event might give errors to Tcl commands that attempt to access the response headers. 3. Certain filters and plugins that require access to the response headers might also fail in unexpected ways.

Conditions

This might occur in any of the following circumstances: 1. -- Virtual server has either SPDY or HTTP/2 enabled -- Requests that would normally served from RAM cache. 2. -- HTTP virtual server has an iRule attached that responds to the HTTP_RESPONSE_RELEASE event. -- Tcl commands attempt to access the response headers. 3. Certain filters and plugins that require access to the response headers.

Workaround

Disable CACHE via an iRule: when HTTP_REQUEST { if {[HTTP2::active]} { CACHE::disable } }

Fix Information

HTTP/2 and RAM Cache are now compatible, and documents served from cache always have accessible headers now. Note: This change introduces a formatting variance in the response headers. Now, certain header values are right justified, where previously, they were left justified. This includes the Age and Content-Length headers, though the Connection header remains left justified. Here is an iRule to remove this white space on cache service: when HTTP_RESPONSE_RELEASE { set age_val [string trim [HTTP::header value Age]] set con_len [string trim [HTTP::header value Content-Length]] HTTP::header remove Age HTTP::header remove Content-Length HTTP::header insert Age "$age_val" HTTP::header insert Content-Length "$con_len" }

Behavior Change

Guides & references

K10134038: F5 Bug Tracker Filter Names and Tips