Forum Discussion
Igor_Morgado_38
Nimbostratus
Feb 03, 2011HTTP response data (html body) rewrite - questions
Helloset as
Im trying to apply a stream profile to change a string in html response from server the source is:
body marginheight="0" marginwidth="0" rightmargin="0" leftmargin="0" topmargin="0" onload="onLoadBody()"I want to
body marginheight="0" marginwidth="0" rightmargin="0" leftmargin="0" topmargin="0"Creating a stream profile seems not work, my actual configuration in stream profile is:
Source: onload="onLoadBody()"
Target: (empty) tried put some placeholder and also didnt worked.My VS has the following configs:
virtual vs_mgp {
snat automap
pool mgp_http_pool
destination 172.27.0.251:http
ip protocol tcp
persist mgp_pr_srcaddr
profiles {
mgp-http-lan-optimized-caching {}
mgp-oneconnect {}
mgp-tcp-lan-optimized {
serverside
}
mgp_remove_onload {}
tcp-wan-optimized {
clientside
}
}
}
ltm profile http mgp-http-lan-optimized-caching {
defaults-from http-lan-optimized-caching
insert-xforwarded-for disabled
ramcache disabled
ramcache-uri-exclude none
ramcache-uri-include none
ramcache-uri-pinned none
response-chunking rechunk
}
ltm profile one-connect mgp-oneconnect {
defaults-from oneconnect
}
ltm profile stream mgp_remove_onload {
defaults-from stream
source "onload=\"onLoadBody()\""
target TAGME
}6 Replies
- hoolio
Cirrostratus
Hi Igor,
Can you wrap the code and configuration portions in [ code ] [/ code ] tags so the post is legible?
Thanks, Aaron - hoolio
Cirrostratus
Is the server sending compressed response payloads? If so, LTM won't decompress it before applying the stream profile. You could check the responses using a browser plugin like HttpFox for Firefox or Fiddler2. If you want to prevent server response payload compression, you can use a simple iRule:when HTTP_REQUEST { HTTP:header remove "Accept-Encoding" }
You could also use an iRule to configure the stream filter and only apply it to text responses. By default, when you use a stream profile and HTTP profile, both request and response payloads will have the stream filter applied. For examples of an iRule, you can check the STREAM::expression wiki page:
http://devcentral.f5.com/wiki/default.aspx/iRules/stream__expression
Aaron - Igor_Morgado_38
Nimbostratus
Right,
As you told, stream is applied *before* the decompression. But on iRules will I got the payload uncompressed?
If so I can let the compress working as is, and do the irule.
Something like: (shamelessly coppied from devcentral wiki üòâwhen HTTP_REQUEST { Disable the stream filter for all requests STREAM::disable } when HTTP_RESPONSE { Check if response type is text if {[HTTP::header value Content-Type] contains "text"}{ Remove Body onload attribute STREAM::expression "@onload=\"onLoadBody()\"@@" Enable the stream filter for this response only STREAM::enable } }
That is it? - hoolio
Cirrostratus
That looks good to me. You could avoid the backslash escapes by using curly braces to prevent interpretation:
STREAM::expression {@onload="onLoadBody()"@@}
Also, I'm referring to server response payload. LTM compression should be done to responses after the stream filter is applied (though I haven't explicitly tested this before).
Aaron - Igor_Morgado_38
Nimbostratus
Nice. It worked, but I have noticed that my problem was the Accept Encoding.
I understood that stream happens BEFORE deflating. But removing the Accept-encoding header didnt I lose the compression client site? If so how can I get the best of two worlds?
Being able to stream profile and keep compression on client side.
Cheers, - hoolio
Cirrostratus
If you have compression licensed on LTM, you could enable it in a custom HTTP profile. LTM would apply the stream profile/iRule first and then compress the response content.
Aaron
Recent Discussions
Related Content
DevCentral Quicklinks
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com
Discover DevCentral Connects
