cancel
Showing results for 
Search instead for 
Did you mean: 
Jer_O_
Cirrus
Cirrus

Problem this snippet solves:

Validates (using JavaScript) that the client browser supports cookies before continuing. It's a good idea to back up the Modernizr script libraries and store them locally in case something happens to them.

There is an exception for OPTIONS HTTP requests. This was a requirement in our environment, because there was an inbound application that could not accept cookies. The saving grace is that they told me they were using OPTIONS instead of GET, so I was able to create an exception to bypass the iRule. You'll want to keep this in mind in case you run into similar scenarios.

Feedback or suggestions are welcome.

How to use this snippet:

The iRule MUST be in last position of order. For some reason it doesn't work otherwise.

This site was damaging the code. You can download it as txt.zip or retrieve it from my first comment.

Shoutout to my webdev coworker for supplying the JavaScript portion, which I tweaked a bit and added the alert to. "If only there was some way to force the client to reload the page," I mused. Doh!

Code :

69783

Tested this on version:

11.5
Comments
Jer_O_
Cirrus
Cirrus
author: Jer O. devcentral.f5.com/users/175899 title: Browser Cookie Support Required iRule Using Modernizr notes: PLACE THIS IRULE IN THE LAST POSITION ONLY (I suggest stating this in your iRule title) when HTTP_REQUEST { if { [HTTP::cookie count] equals 0 and not ( [HTTP::method] contains "OPTIONS" ) } { HTTP::respond 200 content { } noserver } else { return } }
Kai_Wilke
MVP
MVP

The snippet looks very elegant! 🙂

 

Note: To make the ordering of the iRules more robust, you could tweak the iRule a little bit, so that your iRule could be assigned with the highest priority (would make much sense to check this iRule before processing other iRules, right?).

 

Just issue a event disable all and TCP::close right after HTTP::respond to stop further iRule processing on the current TCP connection and to get rid of possible "Operation not supported. Multiple redirect/respond invocations not allowed.." error messages.

 

If you want o stick with the approach to assign the lowest priority to your iRule, then you may want to include a if { [catch {HTTP::payload replace 0 0 {}}] } then { return } check at the beginning of this iRule to see if other iRules with lower priorities had already responded the HTTP request (e.g. some Redirect) to avoid the "Operation not supported..." error messages.

 

Cheers, Kai

 

Jer_O_
Cirrus
Cirrus

I see what you mean. I'll give that a test soon.

 

I'm not clear on what purpose Modernizr is serving. It seems like js.cookie is doing everything needed? I disabled it in a test scenario I built and it seems to function even if it's commented out.

 

Jer_O_
Cirrus
Cirrus

Hey, that's great info. I'll try the same soon.

 

Version history
Last update:
‎02-Aug-2016 16:42
Updated by:
Contributors