Forum Discussion

Rostislav_Zato1's avatar
Icon for Nimbostratus rankNimbostratus
Jun 10, 2011

Collecting chunked POST body?

Hello All,



Have some problems to collect a chunked body.



Message is coming with Transfer-encoding: chunked, then then Body starts with chunk size, but the chunk size can be 0 or also 547.



Doese somebody has expirience how to collect such body for rewrite?







4 Replies

  • Hi RZ,

    For requests, I don't think there is anything we can do in an iRule to reliably collect the full payload. For responses, the general approach if the server uses chunked responses is to downgrade the request to HTTP 1.0 to prevent the server from using chunking.

    when HTTP_REQUEST {
        Prevent the server from sending a compressed response
        remove the compression offerings from the client
       HTTP::header remove "Accept-Encoding"
        Don't allow response data to be chunked
       if { [HTTP::version] eq "1.1" } {
           Force downgrade to HTTP 1.0, but still allow keep-alive connections.
           Since HTTP 1.1 is keep-alive by default, and 1.0 isn't,
           we need make sure the headers reflect the keep-alive status.
           Check if this is a keep alive connection
          if { [HTTP::header is_keepalive] } {
              Replace the connection header value with "Keep-Alive"
             HTTP::header replace "Connection" "Keep-Alive"
           Set server side request version to 1.0
           This forces the server to respond without chunking
          HTTP::version "1.0"

  • A question regarding this protocol downgrade. For several years we've used code like Hoolio posted for all our apps where we need to do response processing. Now that we will begin using RAM Cache, is the iRule logic to force the downgrade redundant and safe to delete?



    SOL10480 makes me think the iRule code may be omitted when using RAM Cache...









  • I think you're correct. You wouldn't need to use that HTTP_REQUEST logic as RAM Cache doesn't this already. However, I don't think having that iRule code would break the RAM cache functionality, so I'd tend to leave it in the rule in case you use the rule on a non-RAM Cache virtual server.