Applies To:

Show Versions Show Versions

sol11328: Applying a Stream profile to a WebAccelerator virtual server may result in failed POSTs
Known IssueKnown Issue

Original Publication Date: 03/29/2010
Updated Date: 01/23/2013

This is the result of a known issue. When a Stream profile is applied to a WebAccelerator virtual server, the BIG-IP performs the Stream replacement on each request before the request is sent to the WebAccelerator for processing. If the Stream replacement changes the length of the body of a POST request that included a Content-Length header, the BIG-IP does not update the Content-Length header with the new content length, and sends the request to the WebAccelerator with an incorrect value in the Content-Length header.

As a result, BIG-IP WebAccelerator 10.x responds with the 400 Bad Request status and logs error messages in the pvac.log file. The error messages appear similar to the following example:

debug WA Debug (27846): [        PvHttpRequest.cxx:551                 append ]
Exiting, Problem retVal: [The content length of the request exceeds the value in the Content-Length header]
debug WA Debug (27846): [        PvHttpRequest.cxx:491                 append ] Error
appending iovec: (The content length of the request exceeds the value in the Content-Length header)
debug WA Debug (27846): [             TmPlugin.cxx:558         waplugin_error ]
waplugin_error INGRESS - Http Request append failed

Note: This issue occurs due to a limitation of the Stream profile. For more information, refer to SOL8115: Overview of the Stream profile.

F5 Product Development is tracking this issue as ID 222305 and ID 338706.

Workaround

If the Stream replacement is only intended to act against the server response, you can work around this issue by using iRules to restrict the replacement action of the Stream profile to only the server response. To do so, apply an iRule similar to the following to the virtual server to which the Stream profile is applied:

when HTTP_REQUEST {
   # Disable the stream filter for all requests
   STREAM::disable
}

when HTTP_RESPONSE {
   # Disable the stream filter by default
   STREAM::disable

   # Enable the stream filter for text responses only
   if {[HTTP::header value Content-Type] contains "text"}{
  
      # Replace 'old_text' with 'new_text'
      STREAM::expression {@old_text@new_text@}

      # Enable the stream filter for this response only
      STREAM::enable
   }
}

Note: For more information about using iRules to perform Stream replacements, refer to the DevCentral STREAM wiki page. A DevCentral login is required to access this content; you will be redirected to authenticate or register (if necessary).

Was this resource helpful in solving your issue?




NOTE: Please do not provide personal information.



Incorrect answer. Please try again: Please enter the words to the right: Please enter the numbers you hear:

Additional Comments (optional)