Forum Discussion
Adding properly formatted headers to maintenance messages
Hey Guys,
I've spent a bit of time trying to figure out how to build an i-Rule that will respond in a manner that we would like. The gist of it is that we would like to add the retry-after (set to 10800) and set the connection to close.
I've read through a handful of articles, including https://devcentral.f5.com/community/group/aft/2163373/asg/50, which discusses a similar concept. I've attempted every option they've discussed there with no positive results.
Here's the gist of our i-Rule (note, there's a section I've not copied in which is basically the creation of a variable called maintenance_msg, which is just the HTML for the page).
Original i-Rule:
when HTTP_REQUEST {
if {[active_members [LB::server pool]] == 0 || [HTTP::uri] == "/maintenance.htm"}{
if {$::debug}{log local0. "Displaying maintence page."}
HTTP::respond 503 content $::maintenance_msg
}
}
Attempted to modify it and add the Retry-After: 10800 (also Retry-After 10800). Results showed no difference in the header, and the page still worked just fine.
when HTTP_REQUEST {
if {[active_members [LB::server pool]] == 0 || [HTTP::uri] == "/maintenance.htm"}{
if {$::debug}{log local0. "Displaying maintence page."}
HTTP::respond 503 Retry-After: 10800 content $::maintenance_msg
}
}
I attempted to add HTTP::header replace Retry-After 10800 as a separate line pre and post the HTTP::respond. Post responded as above, while pre broke the web page.
The very end of that link above discusses having an HTTP_REQUEST_SEND, SERVER_DATA, and HTTP_RESPONSE. This gave the same results as above where the page broke.
When the page broke, I loaded up Fiddler to see what was going on (which is also what I was using to view the response header). I ended up getting this error:
"The server did not return properly formatted HTTP Headers. HTTP headers should be terminated with CRLFCRLF. These were terminated with LFLF."
Based on this, I need to add some carriage returns to my header, but I'm not certain how to do that. Also, I expect that once I get the Retry-After function to work, simply adding the Connection function will work in an identical manner, so I've not tinkered with it yet.
Thanks!
2 Replies
- Kevin_Stewart
Employee
A few tings to consider:
1. First, Headers are inserted AFTER content in the HTTP::respond command:when HTTP_REQUEST { if { ( [active_members [LB::server pool]] == 0 ) or ( [HTTP::uri] equals "/maintenance.htm" ) } { HTTP::respond 503 content "blah" "Retry-After" 5 "Connection" "Close" } }
2. The Retry-After header value is in seconds, so 10800 is 3 hours.
3. I don't know of ANY browser that pays attention to this header. I've read that some web spiders do (ex. Googlebot), but that's about it.
4. If this is for browser-based traffic, I'd probably recommend something like a meta-refresh header in the maintenance page that redirected back to the site. You could even dynamically fill the refresh header with the last URI requested. - reseob_90588
Nimbostratus
Thanks for your response!
I wasn't aware of the header locations, so thank you for that information. I was aware of the retry after value, and this is the number our web admins requested. I will recommend the other options to them and see if they'd like another tool for the retries.
Help guide the future of your DevCentral Community!
What tools do you use to collaborate? (1min - anonymous)Recent Discussions
Related Content
* 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