<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Web 2.0</title>
        <link>http://devcentral.f5.com/weblogs/macvittie/category/66.aspx</link>
        <description>Web 2.0</description>
        <language>en-US</language>
        <copyright>Lori MacVittie</copyright>
        <generator>Subtext Version 2.1.1.1</generator>
        <item>
            <title>Mobile versus Mobile: An Identity Crisis</title>
            <link>http://devcentral.f5.com/weblogs/macvittie/archive/2012/01/16/mobile-versus-mobile-an-identity-crisis.aspx</link>
            <description>&lt;p&gt;#mobile&lt;em&gt;The expansive options consumers revel in creates an identity crisis for IT that is best resolved via context-aware mobile mediation. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Are-Tablets-Mobile-or-Not_234E/mobile%20vs%20mobile_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="mobile vs mobile" border="0" alt="mobile vs mobile" align="left" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Are-Tablets-Mobile-or-Not_234E/mobile%20vs%20mobile_thumb.png" width="284" height="155" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Back in the days of the browser wars, when standards were still largely ignored and the battle for the desktop was highly competitive, developers had to make choices and compromises. They could either write extensive client-side scripts to detect the user’s browser and address the peculiarities of that environment or they could simply ignore them with a disclaimer that “this site (works best when viewed in | was written for) browser X.” &lt;/p&gt;  &lt;p&gt;As time went by, developers were able to discontinue this annoying practice as browser features converged and a common, standardized platform emerged upon which all applications were able to be delivered to any popular browser without concern. &lt;/p&gt;  &lt;p&gt;Then mobile phones appeared, and the user experience degraded again, this time driven by the relatively feeble processing power of the platform. Small screens aside, the memory and processing power available on a mobile phone was such that – when combined with a constrained networking environment – the delivery of increasingly chunky, graphic heavy, interactive applications to mobile phones was simply a bad idea for both organizations and its visitors. &lt;/p&gt;  &lt;p&gt;Developers and web ops returned to the inspection of HTTP headers to determine whether or not a visitor was using a mobile platform, and began writing leaner, more compact interfaces specifically for those platforms. &lt;/p&gt;  &lt;p&gt;Enter tablets. Neither desktop nor phone, these admittedly mobile platforms are compact but nearly as powerful as their overweight tethered cousins without sacrificing the mobility of their anorexic form-factor brethren. &lt;/p&gt;  &lt;h4&gt;&lt;font color="#d16349"&gt;&lt;a href="http://stackoverflow.com/questions/5341637/how-do-detect-android-tablets-in-general-useragent"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="mobile-vs-mobile" border="0" alt="mobile-vs-mobile" align="right" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Are-Tablets-Mobile-or-Not_234E/mobile-vs-mobile_3.png" width="522" height="298" /&gt;&lt;/a&gt;COMMON GROUND: MOBILE OPERATING SYSTEM &lt;/font&gt;&lt;/h4&gt;  &lt;p&gt;Tablets are certainly able to take advantage of emerging web application standards such as HTML5 to deliver a full, rich interactive desktop-style experience on a mobile platform, but are rarely offered it. They are by default offered up a mobile experience because of a common element: the operating system. Even if the operating system was masked, still they’ll find out by checking a second, lesser known HTTP header: &lt;strong&gt;HTTP_X_WAP_PROFILE. &lt;/strong&gt;And if not there, then potentially in &lt;strong&gt;HTTP_PROFILE. &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Unfortunately, this is not necessarily the fault of the developer. There are no standards prescribing what should or should not identity a mobile device, and thus manufacturers are left to their own devices (pun only somewhat intended). &lt;/p&gt;  &lt;p&gt;There is no reliable way, today, to identify a mobile device accurately. Developers are left writing complex scripts that strip apart user agents, profile strings and whatever other contextual data they can extract from HTTP headers to determine how best to serve up content. &lt;/p&gt;  &lt;p&gt;That often means visitors are served content that is not wholly appropriate for their device. Even if they could, the market is so volatile at this point that it’s a sure bet that a new device will enter soon that requires modification to the application yet again. More code, more string manipulation, more latency in processing. &lt;/p&gt;  &lt;h4&gt;&lt;font color="#d16349"&gt;CONTEXT-AWARE MOBILE MEDIATION  &lt;/font&gt;&lt;/h4&gt;  &lt;p&gt;It would be nice if developers could simply receive accurate inbound HTTP headers. Headers that clearly identify the device not only from an operating system perspective, but from a form-factor and network perspective in a standard way. But there are no standards, yet, and may never be. Thus a solution may be found in imposing standards upon inbound requests specifically for developers to better address the disparities in resolution, functionality, and performance between the various mobile device types. &lt;/p&gt;  &lt;p&gt;This requires some amount of pre-planning. Design, if you will, or architecture up front. It requires that developers and devops sit down together and determine a standard means of communicating information between infrastructure and the applications it supports. Consider the possibility of two custom HTTP headers, one identifying the network type and one specifying form-factor and device: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;HTTP_X_NETWORK&lt;/strong&gt; = “WIFI | MOBILE | LAN” &lt;/p&gt;    &lt;p&gt;&lt;strong&gt;HTTP_X_DEVICE&lt;/strong&gt;  = “TABLET | PHONE | DESKTOP” &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Are-Tablets-Mobile-or-Not_234E/context-aware-mobile-mediation_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="context-aware-mobile-mediation" border="0" alt="context-aware-mobile-mediation" align="left" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Are-Tablets-Mobile-or-Not_234E/context-aware-mobile-mediation_thumb.png" width="386" height="262" /&gt;&lt;/a&gt;If developers could rely on these two custom HTTP headers to exist for every inbound request, they could then develop applications based upon these characteristics that were more appropriate for the given device and network over which the device connected. Implementation requires only minimal inspection and insertion on a context-aware mediating device such as a &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/10/31/understanding-network-side-scripting.aspx"&gt;network-side scripting&lt;/a&gt; capable &lt;a title="I CAN HAZ DEFINISHUN of SoftADC and vADC? " href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/03/11/soft-adc-vadc-definition.aspx" rel="" target="_blank"&gt;application delivery controller&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Because the application delivery controller is topologically positioned in a strategic point of control, it has visibility into the network, client, and server-side environments. This gives it the ability to better interpret and execute policies that govern the delivery of applications to optimize performance and assure availability, but it also provides the ability to extract and share pertinent data with applications and other infrastructure. This data can be shared in a number of ways, including modification of the payload, of the headers, insertion of new headers, removal of old headers, etc… &lt;/p&gt;  &lt;p&gt;The flexibility inherent in network-side scripting solutions, particularly those capable of side-band connectivity, allows devops and developers to design and develop a solution that works for them – in their environment. &lt;/p&gt;  &lt;p&gt;The advantage to such a solution lies not only in more accurate, actionable data to share with applications, but in its ability to easily be modified without negatively impacting the application. A second advantage is the ability of developers to also take into consideration the network characteristics of the mobile device, data generally not available or, if available, generally inaccurate. A mobile device today may be accessing an application via WiFi or a mobile network, and that piece of information is quite pertinent as the performance and capabilities of each network are quite different and have a significant impact on the end-user experience from a delivery perspective. &lt;/p&gt;  &lt;p&gt;Yet this data is not available by default to developers and it cannot reliably be inferred from device type. By leveraging a context-aware mediating solution, however, it becomes possible to share this data with developers such that they are able to take that information into consideration when putting together a response to a given request. &lt;/p&gt;  &lt;p&gt;While not a panacea, such a solution certainly provides a more consistent and overall accurate environment in which to deliver applications to the increasingly broad and diverse spectrum of mobile devices. &lt;/p&gt;  &lt;hr color="#808080" width="100%" noshade="noshade" /&gt;&lt;center&gt;   &lt;table border="0" cellspacing="0" cellpadding="2" width="324"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="168"&gt;Connect with Lori: &lt;/td&gt;          &lt;td valign="top" width="154"&gt;Connect with &lt;a title="F5 Networks" href="http://www.f5.com/" rel="" target="_blank"&gt;F5&lt;/a&gt;: &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="168"&gt;&lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_linkedin[1]" border="0" alt="o_linkedin[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_linkedin.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="https://plus.google.com/110169987847611210070"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="google " border="0" alt="google " src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Why-Cant-We-Have-Nice-Things-Too_37AC/google+_3.jpg" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/f5/macv"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_rss[1]" border="0" alt="o_rss[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_rss.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://www.facebook.com/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_facebook[1]" border="0" alt="o_facebook[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_facebook.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_twitter[1]" border="0" alt="o_twitter[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_twitter.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;/td&gt;          &lt;td valign="top" width="154"&gt; &lt;a href="http://bitly.com/nIsT1z?r=bb"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_facebook[1]" border="0" alt="o_facebook[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_facebook.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/ne6W2R?r=bb"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_twitter[1]" border="0" alt="o_twitter[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_twitter.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/nx3XV1?r=bb/"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_slideshare[1]" border="0" alt="o_slideshare[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_slideshare.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/reFTmf?r=bb"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_youtube[1]" border="0" alt="o_youtube[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_youtube.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://links.f5.com/f5gplus"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="google " border="0" alt="google " src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Why-Cant-We-Have-Nice-Things-Too_37AC/google+_3.jpg" width="24" height="24" /&gt;&lt;/a&gt;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/center&gt;  &lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/12/02/grokking-the-goodness-of-mapreduce-and-spdy.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Fire-and-Ice-Silk-and-Chrome-SPDY-and-HT_5751/Document-icon_b8df144b-2165-4daf-a947-a55ac66bed5a.png" width="16" height="16" /&gt; &lt;/a&gt;Stack Overflow: &lt;a href="http://stackoverflow.com/questions/5341637/how-do-detect-android-tablets-in-general-useragent"&gt;How do detect Android Tablets in general. Useragent?&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/12/02/grokking-the-goodness-of-mapreduce-and-spdy.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Fire-and-Ice-Silk-and-Chrome-SPDY-and-HT_5751/Document-icon_b8df144b-2165-4daf-a947-a55ac66bed5a.png" width="16" height="16" /&gt; &lt;/a&gt;&lt;a href="http://news.cnet.com/8301-30685_3-57350968-264/mobile-browsing-reaches-all-time-high/"&gt;Mobile Browsing Reaches All Time High&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/12/02/grokking-the-goodness-of-mapreduce-and-spdy.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Fire-and-Ice-Silk-and-Chrome-SPDY-and-HT_5751/Document-icon_b8df144b-2165-4daf-a947-a55ac66bed5a.png" width="16" height="16" /&gt; &lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/12/20/the-magic-of-mobile-cloud.aspx"&gt;The Magic of Mobile Cloud&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/12/02/grokking-the-goodness-of-mapreduce-and-spdy.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Fire-and-Ice-Silk-and-Chrome-SPDY-and-HT_5751/Document-icon_b8df144b-2165-4daf-a947-a55ac66bed5a.png" width="16" height="16" /&gt; &lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/10/31/understanding-network-side-scripting.aspx"&gt;Understanding network-side scripting&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/12/02/grokking-the-goodness-of-mapreduce-and-spdy.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Fire-and-Ice-Silk-and-Chrome-SPDY-and-HT_5751/Document-icon_b8df144b-2165-4daf-a947-a55ac66bed5a.png" width="16" height="16" /&gt; &lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/11/16/at-the-intersection-of-cloud-and-controlhellip.aspx"&gt;At the Intersection of Cloud and Control…&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/12/02/grokking-the-goodness-of-mapreduce-and-spdy.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Fire-and-Ice-Silk-and-Chrome-SPDY-and-HT_5751/Document-icon_b8df144b-2165-4daf-a947-a55ac66bed5a.png" width="16" height="16" /&gt; &lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/02/09/cloud-tiered-architectural-models-are-bad-except-when-they-arenrsquot.aspx"&gt;Cloud-Tiered Architectural Models are Bad Except When They Aren’t&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/12/02/grokking-the-goodness-of-mapreduce-and-spdy.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Fire-and-Ice-Silk-and-Chrome-SPDY-and-HT_5751/Document-icon_b8df144b-2165-4daf-a947-a55ac66bed5a.png" width="16" height="16" /&gt; &lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/12/05/wils-wpo-versus-feo.aspx"&gt;WILS: WPO versus FEO&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/12/02/grokking-the-goodness-of-mapreduce-and-spdy.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Fire-and-Ice-Silk-and-Chrome-SPDY-and-HT_5751/Document-icon_b8df144b-2165-4daf-a947-a55ac66bed5a.png" width="16" height="16" /&gt; &lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/10/10/fire-and-ice-silk-and-chrome-spdy-and-http.aspx"&gt;Fire and Ice, Silk and Chrome, SPDY and HTTP&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/12/02/grokking-the-goodness-of-mapreduce-and-spdy.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Fire-and-Ice-Silk-and-Chrome-SPDY-and-HT_5751/Document-icon_b8df144b-2165-4daf-a947-a55ac66bed5a.png" width="16" height="16" /&gt; Grokking the Goodness of MapReduce and SPDY&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;hr color="#808080" width="100%" noshade="noshade" /&gt;                       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f0e87343-9bf6-413b-bb9f-5042482040a2" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/mobile" rel="tag"&gt;mobile&lt;/a&gt;,&lt;a href="http://technorati.com/tags/HTML5" rel="tag"&gt;HTML5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/tablet" rel="tag"&gt;tablet&lt;/a&gt;,&lt;a href="http://technorati.com/tags/context-aware" rel="tag"&gt;context-aware&lt;/a&gt;,&lt;a href="http://technorati.com/tags/performance" rel="tag"&gt;performance&lt;/a&gt;,&lt;a href="http://technorati.com/tags/architecture" rel="tag"&gt;architecture&lt;/a&gt;,&lt;a href="http://technorati.com/tags/network-side+scripting" rel="tag"&gt;network-side scripting&lt;/a&gt;,&lt;a href="http://technorati.com/tags/iRules" rel="tag"&gt;iRules&lt;/a&gt;,&lt;a href="http://technorati.com/tags/strategic+point+of+control" rel="tag"&gt;strategic point of control&lt;/a&gt;,&lt;a href="http://technorati.com/tags/blog" rel="tag"&gt;blog&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/1102502.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lori MacVittie</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/macvittie/archive/2012/01/16/mobile-versus-mobile-an-identity-crisis.aspx</guid>
            <pubDate>Mon, 16 Jan 2012 13:00:00 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/1102502.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/macvittie/archive/2012/01/16/mobile-versus-mobile-an-identity-crisis.aspx#feedback</comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/1102502.aspx</wfw:commentRss>
            <trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/1102502.aspx</trackback:ping>
        </item>
        <item>
            <title>WILS: WPO versus FEO</title>
            <link>http://devcentral.f5.com/weblogs/macvittie/archive/2011/12/05/wils-wpo-versus-feo.aspx</link>
            <description>&lt;p&gt;&lt;em&gt;Understanding web #acceleration techniques and when to apply them &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;We’ve already discussed the difference between acceleration and optimization, so now it’s time to quickly dig into the difference between the two major types of acceleration: WPO (Web Performance Optimization) and FEO (Front End Optimization). &lt;/p&gt;  &lt;p&gt;The difference is important because each technique is effective at addressing different performance bottlenecks, and obviously applying the wrong solution to the problem will not provide the desired results, i.e. fast, fast, fast web applications. &lt;/p&gt;  &lt;p&gt;WPO focuses on content &lt;strong&gt;delivery, &lt;/strong&gt;which means it applies different optimization techniques to counter poorly performing networks and servers. WPO will use various TCP optimizations to redress issues in the network related to TCP connections between the client and the server such as retransmission storms caused by overly congested network conditions. WPO will also apply compression to content to minimize the size and reduce the number of packets that must traverse the network. This is a boon over higher latency and/or lower bandwidth connections in improving transfer speed. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/WILS-Application-Delivery-versus-Transfo_2846/acceleration%20types_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="acceleration types" border="0" alt="acceleration types" align="left" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/WILS-Application-Delivery-versus-Transfo_2846/acceleration%20types_thumb.png" width="702" height="316" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;FEO, on the other hand, focuses on content &lt;strong&gt;transformation&lt;/strong&gt;. This requires actually changing the content in some way as a means to improve overall performance. Modifying (often merely adding) cache control headers can dramatically improve performance by forcing the use of caching on infrequently changing content. Similarly, techniques &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/12/02/f5-friday-domain-sharding-on-demand.aspx"&gt;like domain sharding&lt;/a&gt; that increase the parallelization of requests can reduce the transfer time for what are increasingly large object sets, resulting in (at least perceived) improvements in performance. &lt;/p&gt;  &lt;p&gt;Some FEO solutions further manipulate the actual content of the page, rearranging the objects and elements so as to be optimally retrieved and rendered by the browser being used. As the way in which rendering engines work varies from browser to browser, this can actually have a significant impact on the (at least perceived) performance of a web application. FEO solutions are best for complex web pages with many elements and objects, as these benefit from techniques like caching and domain sharding because the bottleneck is in the number of requests required to retrieve a page as opposed to transfer speed. The use of FEO is a primary means of improving performance to not only mobile clients but especially mobile clients over mobile networks. Elimination of white space and comments (minification), image optimization (removal of EXIF data, for example) is particularly effective at reducing content size and therefore improving performance for mobile clients. &lt;/p&gt;  &lt;p&gt;The best solution is, of course, an intelligent acceleration intermediary capable of determining based on context which combination of the two techniques will optimally improve performance, as it is generally true that no single technique will unilaterally improve performance. &lt;/p&gt;  &lt;p&gt;Happy Accelerating! &lt;/p&gt;  &lt;p style="text-transform: uppercase; font-size: 10px"&gt;&lt;font color="#a5a5a5"&gt;WILS: Write It Like Seth. Seth Godin always gets his point across with brevity and wit. WILS is an ATTEMPT TO BE concise about application delivery TOPICS AND just get straight to the point. NO DILLY DALLYING AROUND.&lt;/font&gt;&lt;/p&gt;  &lt;hr color="#808080" width="100%" noshade="noshade" /&gt; &lt;center&gt;   &lt;table border="0" cellspacing="0" cellpadding="2" width="324"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="168"&gt;Connect with Lori: &lt;/td&gt;          &lt;td valign="top" width="154"&gt;Connect with &lt;a title="F5 Networks" href="http://www.f5.com/" rel="" target="_blank"&gt;F5&lt;/a&gt;: &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="168"&gt;&lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_linkedin[1]" border="0" alt="o_linkedin[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_linkedin.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="https://plus.google.com/110169987847611210070"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="google " border="0" alt="google " src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Why-Cant-We-Have-Nice-Things-Too_37AC/google+_3.jpg" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/f5/macv"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_rss[1]" border="0" alt="o_rss[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_rss.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://www.facebook.com/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_facebook[1]" border="0" alt="o_facebook[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_facebook.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_twitter[1]" border="0" alt="o_twitter[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_twitter.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;/td&gt;          &lt;td valign="top" width="154"&gt; &lt;a href="http://bitly.com/nIsT1z?r=bb"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_facebook[1]" border="0" alt="o_facebook[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_facebook.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/ne6W2R?r=bb"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_twitter[1]" border="0" alt="o_twitter[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_twitter.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/nx3XV1?r=bb/"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_slideshare[1]" border="0" alt="o_slideshare[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_slideshare.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/reFTmf?r=bb"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_youtube[1]" border="0" alt="o_youtube[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_youtube.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://links.f5.com/f5gplus"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="google " border="0" alt="google " src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Why-Cant-We-Have-Nice-Things-Too_37AC/google+_3.jpg" width="24" height="24" /&gt;&lt;/a&gt;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/center&gt;  &lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/05/11/donrsquot-let-automation-water-down-your-data-center.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Sharing-Identities-Means-Sharing-Reputat_43DB/Document-icon_c6b444af-4d75-4e5d-b56a-5e705a1ce3d0.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/06/20/wils-content-switching-is-like-vlans-for-http.aspx"&gt;WILS: Content (Application) Switching is like VLANs for HTTP&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/05/11/donrsquot-let-automation-water-down-your-data-center.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Sharing-Identities-Means-Sharing-Reputat_43DB/Document-icon_c6b444af-4d75-4e5d-b56a-5e705a1ce3d0.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/02/16/wils-layer-7-protocol-versus-layer-7-application.aspx"&gt;WILS: Layer 7 (Protocol) versus Layer 7 (Application)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/05/11/donrsquot-let-automation-water-down-your-data-center.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Sharing-Identities-Means-Sharing-Reputat_43DB/Document-icon_c6b444af-4d75-4e5d-b56a-5e705a1ce3d0.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/09/23/concise-guide-to-load-balancing.aspx"&gt;WILS: The Concise Guide to *-Load Balancing&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/05/11/donrsquot-let-automation-water-down-your-data-center.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Sharing-Identities-Means-Sharing-Reputat_43DB/Document-icon_c6b444af-4d75-4e5d-b56a-5e705a1ce3d0.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/09/15/network-application-load-balancing.aspx"&gt;WILS: Network Load Balancing versus Application Load Balancing&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/05/11/donrsquot-let-automation-water-down-your-data-center.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Sharing-Identities-Means-Sharing-Reputat_43DB/Document-icon_c6b444af-4d75-4e5d-b56a-5e705a1ce3d0.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/08/20/application-acceleration-versus-optimization.aspx"&gt;WILS: Application Acceleration versus Optimization&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/05/11/donrsquot-let-automation-water-down-your-data-center.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Sharing-Identities-Means-Sharing-Reputat_43DB/Document-icon_c6b444af-4d75-4e5d-b56a-5e705a1ce3d0.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/09/10/wils-automation-versus-orchestration.aspx"&gt;WILS: Automation versus Orchestration&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/05/11/donrsquot-let-automation-water-down-your-data-center.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Sharing-Identities-Means-Sharing-Reputat_43DB/Document-icon_c6b444af-4d75-4e5d-b56a-5e705a1ce3d0.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/category/4335.aspx"&gt;All WILS posts on DevCentral&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;hr color="#808080" width="100%" noshade="noshade" /&gt;               &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:5b43b533-5169-464c-b447-857cf8dd9131" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/WILS" rel="tag"&gt;WILS&lt;/a&gt;,&lt;a href="http://technorati.com/tags/acceleration" rel="tag"&gt;acceleration&lt;/a&gt;,&lt;a href="http://technorati.com/tags/optimization" rel="tag"&gt;optimization&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web+application+acceleration" rel="tag"&gt;web application acceleration&lt;/a&gt;,&lt;a href="http://technorati.com/tags/performance" rel="tag"&gt;performance&lt;/a&gt;,&lt;a href="http://technorati.com/tags/FEO" rel="tag"&gt;FEO&lt;/a&gt;,&lt;a href="http://technorati.com/tags/WPO" rel="tag"&gt;WPO&lt;/a&gt;,&lt;a href="http://technorati.com/tags/compression" rel="tag"&gt;compression&lt;/a&gt;,&lt;a href="http://technorati.com/tags/transformation" rel="tag"&gt;transformation&lt;/a&gt;,&lt;a href="http://technorati.com/tags/application+delivery" rel="tag"&gt;application delivery&lt;/a&gt;,&lt;a href="http://technorati.com/tags/mobile" rel="tag"&gt;mobile&lt;/a&gt;,&lt;a href="http://technorati.com/tags/blog" rel="tag"&gt;blog&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/1102430.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lori MacVittie</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/macvittie/archive/2011/12/05/wils-wpo-versus-feo.aspx</guid>
            <pubDate>Mon, 05 Dec 2011 12:14:00 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/1102430.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/macvittie/archive/2011/12/05/wils-wpo-versus-feo.aspx#feedback</comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/1102430.aspx</wfw:commentRss>
            <trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/1102430.aspx</trackback:ping>
        </item>
        <item>
            <title>F5 Friday: Domain Sharding On-Demand</title>
            <link>http://devcentral.f5.com/weblogs/macvittie/archive/2011/12/02/f5-friday-domain-sharding-on-demand.aspx</link>
            <description>&lt;p&gt;&lt;em&gt;Domain sharding is a well-known practice to improve application performance – and you can implement automatically without modifying your applications today. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Domain-Sharding-on-Demand_3A80/f5friday_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="f5friday" border="0" alt="f5friday" align="left" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Domain-Sharding-on-Demand_3A80/f5friday_thumb.png" width="240" height="86" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you’re a web developer, especially one that deals with AJAX or is responsible for page optimization (aka “Make It Faster or Else”), then you’re likely familiar with the technique of domain sharding, if not the specific terminology. &lt;/p&gt;  &lt;p&gt;For those who aren’t familiar with the technique (or the term), domain sharding is a well-known practice used to trick browsers into opening many more connections with a server than is allowed by default. This is important for improving page load times in the face of a page containing many objects. Given that the number of objects comprising a page has more than tripled in the past 8 years, now averaging nearly 85 objects per page, this technique is not only useful, it’s often a requirement. Modern browsers like to limit browsers to 8 connections per host, which means just to load one page a browser has to not only make 85 requests over 8 connections, but it must also receive those requests over those same, limited 8 connections. Consider, too, that the browser only downloads 2-6 objects over a single connection at a time, making this process somewhat fraught with peril when it comes to performance. This is generally why bandwidth isn’t a bottleneck for web applications but rather it’s TCP related issues such as round trip time (latency). &lt;/p&gt;  &lt;blockquote style="border-left: gray 3px solid; padding-bottom: 5px; padding-left: 15px; padding-right: 5px; margin-left: 10px; padding-top: 5px"&gt;   &lt;p&gt;Here are the two main points that need to be understood when discussing Bandwidth vs. RTT in regards to page load times:&lt;/p&gt;    &lt;blockquote&gt;     &lt;p&gt;1.) The average web page has over 50 objects that will need to be downloaded (reference: &lt;a href="http://www.websiteoptimization.com/speed/tweak/average-web-page/"&gt;http://www.websiteoptimization.com/speed/tweak/average-web-page/&lt;/a&gt;) to complete page rendering of a single page.&lt;/p&gt;      &lt;p&gt;2.) Browsers cannot (generally speaking) request all 50 objects at once. They will request between 2-6 (again, generally speaking) objects at a time, depending on browser configuration.&lt;/p&gt;   &lt;/blockquote&gt;    &lt;p&gt;This means that to receive the objects necessary for an average web page you will have to wait for around 25 Round Trips to occur, maybe even more. Assuming a reasonably low 150ms average RTT, that’s a full 3.75 seconds of page loading time not counting the time to download a single file. That’s &lt;strong&gt;&lt;em&gt;just&lt;/em&gt;&lt;/strong&gt; the time it takes for the network communication to happen to and from the server. Here’s where the bandwidth vs. RTT discussion takes a turn decidedly in the favor of RTT. &lt;/p&gt;    &lt;p&gt;-- &lt;a href="http://devcentral.f5.com/weblogs/cwalker/archive/2010/05/25/rtt-round-trip-time-aka-ndash-why-bandwidth-doesnrsquot-matter.aspx"&gt;RTT (Round Trip Time): Aka – Why bandwidth doesn’t matter&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So the way this is generally addressed is to “shard” the domain – create many imaginary hosts that the browser views as being separate and thus eligible for their own set of connections. This spreads out the object requests and responses over more connections simultaneously, allowing what is effectively parallelization of page loading functions to improve performance. &lt;/p&gt;  &lt;p&gt;Obviously this requires some coordination, because every host name needs a DNS entry and then you have to … yeah, modify the application to use those “new” hosts to improve performance. The downside is that you have to modify the application, of course, but also that this results in a static mapping. On the one hand, this can be the perfect time to perform some architectural overhauls and combine domain sharding with &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/10/04/infrastructure-scalability-pattern-partition-by-function-or-type.aspx"&gt;creating scalability domains&lt;/a&gt; to improve not only performance but scalability (and thus availability). You’ll still be stuck with the problem of tightly-coupled hosts to content, but hey – you’re getting somewhere which is better than nowhere. &lt;/p&gt;  &lt;p&gt;Or the better way (this is an &lt;a title="F5 Networks" href="http://www.f5.com/" rel="" target="_blank"&gt;F5&lt;/a&gt; Friday so you knew that was coming) would be to leverage a solution capable of automatically sharding domains for you. No mess, no fuss, no modifying the application. All the benefits at one-tenth the work.   &lt;/p&gt;  &lt;h4&gt;&lt;font color="#c0504d"&gt;DOMAIN SHARDING with BIG-IP WebAccelerator &lt;/font&gt;&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Domain-Sharding-on-Demand_3A80/domain-sharding-wa_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="domain-sharding-wa" border="0" alt="domain-sharding-wa" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Domain-Sharding-on-Demand_3A80/domain-sharding-wa_thumb.png" width="768" height="378" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;What BIG-IP WebAccelerator does, automatically, is shard domains by adding a prefix to the FQDN (Fully Qualified Domain Name). The user would initiate a request for “www.example.com” and WebAccelerator would go about its business of requesting it (or pulling objects from the cache, as per its configuration). Before returning the content to the user, however, WebAccelerator then shards the domain, adding prefixes to objects. The browser then does its normal processing and opens the appropriate number of connections to each of the hosts, requesting each of the individual objects. As WebAccelerator receives those requests, it knows to deshard (unshard?) the hosts and make the proper requests to the web or application server, thus insuring that the application understands the requests. This means no changes to the actual application. The only changes necessary are to DNS to ensure the additional hosts are recognized appropriately and to WebAccelerator, to configure domain sharding on-demand. &lt;/p&gt;  &lt;p&gt;This technique is useful for improving performance of web applications and is further enhanced with BIG-IP platform technology like &lt;a href="http://www.f5.com/pdf/white-papers/f5-acceleration-portfolio.pdf"&gt;OneConnect&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Something_891E/pdf-icon_5.png"&gt;&lt;img title="pdf-icon" border="0" alt="pdf-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Something_891E/pdf-icon_thumb_1.png" width="16" height="16" /&gt;&lt;/a&gt; which multiplexes (and thus reuses) TCP connections to origin servers. This reduces the round trip time between WebAccelerator and the origin servers by keeping connections open, thus eliminating the overhead of TCP connection management. It improves page load time by allowing the browser to request more objects simultaneously. &lt;/p&gt;  &lt;p&gt;This particular feature falls into the transformative category of web application acceleration as it transforms content as a means to improve performance. This is also called FEO (Front End Optimization) as opposed to WPO (Web Performance Optimization) which focuses on optimization and acceleration of delivery channels, such as the use of compressing and caching. &lt;/p&gt;  &lt;p&gt;Happy Sharding! &lt;/p&gt;  &lt;hr color="#808080" width="100%" noshade="noshade" /&gt;&lt;center&gt;   &lt;table border="0" cellspacing="0" cellpadding="2" width="324"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="168"&gt;Connect with Lori: &lt;/td&gt;          &lt;td valign="top" width="154"&gt;Connect with F5: &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="168"&gt;&lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_linkedin[1]" border="0" alt="o_linkedin[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_linkedin.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="https://plus.google.com/110169987847611210070"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="google " border="0" alt="google " src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Why-Cant-We-Have-Nice-Things-Too_37AC/google+_3.jpg" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/f5/macv"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_rss[1]" border="0" alt="o_rss[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_rss.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://www.facebook.com/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_facebook[1]" border="0" alt="o_facebook[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_facebook.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_twitter[1]" border="0" alt="o_twitter[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_twitter.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;/td&gt;          &lt;td valign="top" width="154"&gt; &lt;a href="http://bitly.com/nIsT1z?r=bb"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_facebook[1]" border="0" alt="o_facebook[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_facebook.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/ne6W2R?r=bb"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_twitter[1]" border="0" alt="o_twitter[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_twitter.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/nx3XV1?r=bb/"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_slideshare[1]" border="0" alt="o_slideshare[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_slideshare.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/reFTmf?r=bb"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_youtube[1]" border="0" alt="o_youtube[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_youtube.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://links.f5.com/f5gplus"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="google " border="0" alt="google " src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Why-Cant-We-Have-Nice-Things-Too_37AC/google+_3.jpg" width="24" height="24" /&gt;&lt;/a&gt;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/center&gt;  &lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.quova.com/what/ip-repository/"&gt;&lt;img title="icon-html" border="0" alt="icon-html" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/HyperlocalLoadBalancing_4924/icon-html_7d6b35d9-7374-4d89-aaff-72352f6ed6e6.gif" width="14" height="14" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/10/10/fire-and-ice-silk-and-chrome-spdy-and-http.aspx"&gt;Fire and Ice, Silk and Chrome, SPDY and HTTP&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.quova.com/what/ip-repository/"&gt;&lt;img title="icon-html" border="0" alt="icon-html" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/HyperlocalLoadBalancing_4924/icon-html_7d6b35d9-7374-4d89-aaff-72352f6ed6e6.gif" width="14" height="14" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/06/17/f5-friday-the-mobile-road-is-uphill.-both-ways.aspx"&gt;F5 Friday: The Mobile Road is Uphill. Both Ways.&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.quova.com/what/ip-repository/"&gt;&lt;img title="icon-html" border="0" alt="icon-html" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/HyperlocalLoadBalancing_4924/icon-html_7d6b35d9-7374-4d89-aaff-72352f6ed6e6.gif" width="14" height="14" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/06/24/f5-friday-performance-throughput-and-dps.aspx"&gt;F5 Friday: Performance, Throughput and DPS&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.quova.com/what/ip-repository/"&gt;&lt;img title="icon-html" border="0" alt="icon-html" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/HyperlocalLoadBalancing_4924/icon-html_7d6b35d9-7374-4d89-aaff-72352f6ed6e6.gif" width="14" height="14" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/04/15/f5-friday-protocols-are-from-venus.-data-is-from-mars.aspx"&gt;F5 Friday: Protocols are from Venus. Data is from Mars.&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.quova.com/what/ip-repository/"&gt;&lt;img title="icon-html" border="0" alt="icon-html" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/HyperlocalLoadBalancing_4924/icon-html_7d6b35d9-7374-4d89-aaff-72352f6ed6e6.gif" width="14" height="14" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/04/11/solutions-are-strategic.-technology-is-tactical.aspx"&gt;Acceleration is strategic, optimization is a tactic&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/06/15/top-to-bottom-is-the-new-end-to-end.aspx"&gt;&lt;img title="icon-html" border="0" alt="icon-html" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Something_891E/icon-html_031badf1-2cfa-4b02-a003-d1c959f002f7.gif" width="14" height="14" /&gt; Top-to-Bottom is the New End-to-End&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Something_891E/pdf-icon_20.png"&gt;&lt;img title="pdf-icon" border="0" alt="pdf-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Something_891E/pdf-icon_thumb_6.png" width="17" height="16" /&gt;&lt;/a&gt; &lt;a href="http://www.joeweinman.com/Resources/Joe_Weinman_As_Time_Goes_By.pdf"&gt;As Time Goes By: The Law of Cloud Response Time" (Joe Weinman)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.quova.com/what/ip-repository/"&gt;&lt;img title="icon-html" border="0" alt="icon-html" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/HyperlocalLoadBalancing_4924/icon-html_7d6b35d9-7374-4d89-aaff-72352f6ed6e6.gif" width="14" height="14" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/category/1084420.aspx"&gt;All F5 Friday Entries on DevCentral&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.quova.com/what/ip-repository/"&gt;&lt;img title="icon-html" border="0" alt="icon-html" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/HyperlocalLoadBalancing_4924/icon-html_7d6b35d9-7374-4d89-aaff-72352f6ed6e6.gif" width="14" height="14" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/05/20/network-optimization-wonrsquot-fix-application-performance-in-the-cloud.aspx"&gt;Network Optimization Won’t Fix Application Performance in the Cloud&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;   &lt;font face="Tahoma" /&gt;                &lt;hr color="#808080" width="100%" noshade="noshade" /&gt;   &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:147abacd-69a0-4cf8-b857-9acfed10b171" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/F5+Friday" rel="tag"&gt;F5 Friday&lt;/a&gt;,&lt;a href="http://technorati.com/tags/acceleration" rel="tag"&gt;acceleration&lt;/a&gt;,&lt;a href="http://technorati.com/tags/optimization" rel="tag"&gt;optimization&lt;/a&gt;,&lt;a href="http://technorati.com/tags/BIG-IP" rel="tag"&gt;BIG-IP&lt;/a&gt;,&lt;a href="http://technorati.com/tags/BIG-IP+WebAccelerator" rel="tag"&gt;BIG-IP WebAccelerator&lt;/a&gt;,&lt;a href="http://technorati.com/tags/domain+sharding" rel="tag"&gt;domain sharding&lt;/a&gt;,&lt;a href="http://technorati.com/tags/AJAX" rel="tag"&gt;AJAX&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Web+2.0" rel="tag"&gt;Web 2.0&lt;/a&gt;,&lt;a href="http://technorati.com/tags/blog" rel="tag"&gt;blog&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/1102423.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lori MacVittie</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/macvittie/archive/2011/12/02/f5-friday-domain-sharding-on-demand.aspx</guid>
            <pubDate>Fri, 02 Dec 2011 12:19:00 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/1102423.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/macvittie/archive/2011/12/02/f5-friday-domain-sharding-on-demand.aspx#feedback</comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/1102423.aspx</wfw:commentRss>
            <trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/1102423.aspx</trackback:ping>
        </item>
        <item>
            <title>HTML5 Web Sockets Changes the Scalability Game</title>
            <link>http://devcentral.f5.com/weblogs/macvittie/archive/2011/11/07/html5-web-sockets-changes-the-scalability-game.aspx</link>
            <description>&lt;p&gt;#HTML5 &lt;em&gt;Web Sockets are poised to completely change scalability models … again. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/HTML5-Web-SocketsChanging-the-Scalabilit_7DF2/NotAgain_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="NotAgain" border="0" alt="NotAgain" align="right" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/HTML5-Web-SocketsChanging-the-Scalabilit_7DF2/NotAgain_thumb.jpg" width="189" height="223" /&gt;&lt;/a&gt;Using Web Sockets instead of XMLHTTPRequest and AJAX polling methods will dramatically reduce the number of connections required by servers and thus has a positive impact on performance. But that reliance on a single connection also changes the scalability game, at least in terms of architecture. &lt;/p&gt;  &lt;h4&gt;&lt;font color="#c0504d"&gt;Here comes the (computer) science…&lt;/font&gt;&lt;/h4&gt;  &lt;h5&gt;If you aren’t familiar with what is sure to be a disruptive web technology you should be.&lt;/h5&gt;  &lt;p&gt;Web Sockets, while not broadly in use (it is only a specification, and a non-stable one at that) today is getting a lot of attention based on its core precepts and model. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17"&gt;Web Sockets&lt;/a&gt;  &lt;/p&gt;  &lt;blockquote style="border-left: gray 3px solid; padding-bottom: 5px; padding-left: 15px; padding-right: 5px; margin-left: 10px; padding-top: 5px"&gt;   &lt;p&gt;Defined in the Communications section of the HTML5 specification, HTML5 Web Sockets represents the next evolution of web communications—a full-duplex, bidirectional communications channel that operates through a single socket over the Web. HTML5 Web Sockets provides a true standard that you can use to build scalable, real-time web applications. In addition, since it provides a socket that is native to the browser, it eliminates many of the problems Comet solutions are prone to. Web Sockets removes the overhead and dramatically reduces complexity. &lt;/p&gt;    &lt;p&gt;- &lt;a href="http://websocket.org/quantum.html"&gt;HTML5 Web Sockets: A Quantum Leap in Scalability for the Web&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So far, so good. The premise upon which the improvements in scalability coming from Web Sockets are based is the elimination of HTTP headers (reduces bandwidth dramatically) and session management overhead that can be incurred by the closing and opening of TCP connections. There’s only one connection required between the client and server over which much smaller data segments can be sent without necessarily requiring a request and a response pair.  &lt;/p&gt;  &lt;p&gt;That communication pattern is definitely more scalable from a performance perspective, and also has a positive impact of reducing the number of connections per client required on the server. Similar techniques have long been used in application delivery (TCP multiplexing) to achieve the same results – a more scalable application. So far, so good. &lt;/p&gt;  &lt;p&gt;Where the scalability model ends up having a significant impact on infrastructure and architectures is the longevity of that single connection:  &lt;/p&gt;  &lt;blockquote style="border-left: gray 3px solid; padding-bottom: 5px; padding-left: 15px; padding-right: 5px; margin-left: 10px; padding-top: 5px"&gt;   &lt;p&gt;Unlike regular HTTP traffic, which uses a request/response protocol, WebSocket connections &lt;font style="background-color: #ffff00"&gt;can remain open for a long time&lt;/font&gt;.&lt;/p&gt;    &lt;p&gt;- &lt;a href="http://www.infoq.com/articles/Web-Sockets-Proxy-Servers"&gt;How HTML5 Web Sockets Interact With Proxy Servers&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This single, persistent connection combined with a lot of, shall we say, interesting commentary on the interaction with intermediate proxies such as load balancers. But ignoring that for the nonce, let’s focus on the “remain open for a long time.” &lt;/p&gt;  &lt;p&gt;A given application instance has a limit on the number of concurrent connections it can theoretically and operationally manage before it reaches the threshold at which performance begins to dramatically degrade. That’s the price paid for TCP session management in general by every device and server that manages TCP-based connections. &lt;/p&gt;  &lt;p&gt;But Lori, you’re thinking, HTTP 1.1 connections are persistent, too. In fact, you don’t even have to tell an HTTP 1.1 server to keep-alive the connection! This really isn’t a big change. &lt;/p&gt;  &lt;p&gt;Whoa there hoss, yes it is. While you’d be right in that HTTP connections are also persistent, they generally have very short connection timeout settings. For example, the default connection timeout for Apache 2.0 is 15 seconds and for Apache 2.2 a mere 5 seconds. A well-tuned web server, in fact, will have thresholds that closely match the interaction patterns of the application it is hosting. This is because it’s a recognized truism that long and often idle connections tie up server processes or threads that negatively impact overall capacity and performance. Thus the introduction of connections that remain open for a long time changes the capacity of the server and introduces potential performance issues when that same server is also tasked with managing other short-lived, connection-oriented requests. &lt;/p&gt;  &lt;h4&gt;&lt;font color="#c0504d"&gt;Why this Changes the Game…&lt;/font&gt;&lt;/h4&gt;  &lt;h5&gt;One of the most common inhibitors of scale and high-performance for web applications today is the deployment of both near-real-time communication functions (AJAX) and traditional web content functions on the same server.&lt;/h5&gt;  &lt;p&gt;That’s because web servers do not support a per-application HTTP profile. That is to say, the configuration for a web server is global; every communication exchange uses the same configuration values such as connection timeouts. That means configuring the web server for exchanges that would benefit from a longer time out end up &lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/HTML5-Web-SocketsChanging-the-Scalabilit_7DF2/ws%20scalability%20domain_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="ws scalability domain" border="0" alt="ws scalability domain" align="left" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/HTML5-Web-SocketsChanging-the-Scalabilit_7DF2/ws%20scalability%20domain_thumb.png" width="436" height="193" /&gt;&lt;/a&gt;with a lot of hanging connections doing absolutely nothing because they were used to grab standard dynamic or static content and then ignored. Conversely, configuring for quick bursts of requests necessarily sets timeout values too low for near or real-time exchanges and can cause performance issues as a client continually opens and re-opens connections. Remember, an idle connection is a drain on resources that directly impacts the performance and capacity of applications. So it’s a Very Bad Thing™. &lt;/p&gt;  &lt;p&gt;One of the solutions to this somewhat frustrating conundrum, made more feasible by the advent of &lt;a title="" href="http://www.f5.com/solutions/cloud-computing" rel=""&gt;cloud computing &lt;/a&gt; and virtualization, is to deploy specialized servers in a scalability domain-based architecture using &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/10/04/infrastructure-scalability-pattern-partition-by-function-or-type.aspx"&gt;infrastructure scalability patterns&lt;/a&gt;. Another approach to ensuring scalability is to offload responsibility for performance and connection management to an appropriately capable intermediary.  &lt;/p&gt;  &lt;p&gt;Now, one would hope that a web server implementing support for both HTTP and Web Sockets would support separately configurable values for communication settings on at least the protocol level. Today there are very few web servers that support both HTTP and Web Sockets. It’s a nascent and still evolving standard so many of the servers are “pure” Web Sockets servers, many implemented in familiar scripting languages like PHP and Python. Which means two separate sets of servers that must be managed and scaled. Which should sound a lot like … specialized servers in a scalability domain-based architecture.  &lt;/p&gt;  &lt;p&gt;The more things change, the more they stay the same.  &lt;/p&gt;  &lt;p&gt;The second impact on scalability architectures centers on the premise that Web Sockets keep one connection open over which message bits can be exchanged. This ties up resources, but it also requires that clients maintain a connection &lt;em&gt;to a specific server instance.&lt;/em&gt;  &lt;/p&gt;  &lt;p&gt;This means infrastructure (like load balancers and web/application servers) will need to support persistence (not the same as persistent, &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/07/11/3443.aspx"&gt;you can read about the difference here if you’re so inclined&lt;/a&gt;). That’s because once connected to a Web Socket service the performance benefits are only realized if you &lt;em&gt;stay &lt;/em&gt;connected to that same service. If you don’t and end up opening a second (or Heaven-forbid a third or more) connection, the &lt;em&gt;first &lt;/em&gt;connection may remain open until it times out. Given that the premise of the Web Socket is to stay open – even through potentially longer idle intervals – it may remain open, with no client, until the configured time out. That means completely useless resources tied up by … nothing. Persistence-based &lt;a title="" href="http://www.f5.com/glossary/load-balancing.html" rel=""&gt;load balancing&lt;/a&gt; is a common feature of next-generation load balancers (application delivery controllers) and even most &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/04/08/amazon-makes-the-cloud-sticky.aspx"&gt;cloud-based load balancing services&lt;/a&gt;. It is also commonly implemented in application server clustering offerings, where you’ll find it called &lt;em&gt;server-affinity. &lt;/em&gt;It is worth noting that persistence-based load balancing is &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/06/06/load-balancing-fu-beware-the-algorithm-and-sticky-sessions.aspx"&gt;not without its own set of gotchas when it comes to performance and capacity&lt;/a&gt;. &lt;/p&gt;  &lt;h4&gt;&lt;font color="#c0504d"&gt;THE ANSWER: ARCHITECTURE &lt;/font&gt;&lt;/h4&gt;  &lt;p&gt;The reason that these two ramifications of Web Sockets impacts the scalability game is it requires an broader architectural approach to scalability. It can’t necessarily be achieved simply by duplicating services and distributing the load across them. Persistence requires collaboration with the load distribution mechanism and there are protocol-based security constraints with respect to incorporating even intra-domain content in a single page/application. While these security constraints are addressable through configuration, the same caveats with regards to the lack of granularity in configuration at the infrastructure (web/application server) layer must be made. Careful consideration of what may be accidentally allowed and/or disallowed is necessary to prevent unintended consequences. And that’s not even starting to consider the potential use of Web Sockets as an attack vector, particularly in the realm of DDoS. The long-lived nature of a Web Socket connection is bound to be exploited at some point in the future, which will engender another round of evaluating how to best address application-layer DDoS attacks. &lt;/p&gt;  &lt;p&gt;A service-focused, distributed (and collaborative) approach to scalability is likely to garner the highest levels of success when employing Web Socket-based functionality within a broader web application, as opposed to the popular cookie-cutter cloning approach made exceedingly easy by virtualization.  &lt;/p&gt;  &lt;hr color="#808080" width="100%" noshade="noshade" /&gt;&lt;center&gt;   &lt;table border="0" cellspacing="0" cellpadding="2" width="308"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="168"&gt;Connect with Lori: &lt;/td&gt;          &lt;td valign="top" width="138"&gt;Connect with &lt;a title="F5 Networks" href="http://www.f5.com/" rel="" target="_blank"&gt;F5&lt;/a&gt;: &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="168"&gt;&lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_linkedin[1]" border="0" alt="o_linkedin[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_linkedin.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="https://plus.google.com/110169987847611210070"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="google " border="0" alt="google " src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Why-Cant-We-Have-Nice-Things-Too_37AC/google+_3.jpg" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/f5/macv"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_rss[1]" border="0" alt="o_rss[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_rss.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://www.facebook.com/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_facebook[1]" border="0" alt="o_facebook[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_facebook.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_twitter[1]" border="0" alt="o_twitter[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_twitter.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;/td&gt;          &lt;td valign="top" width="138"&gt; &lt;a href="http://bitly.com/nIsT1z?r=bb"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_facebook[1]" border="0" alt="o_facebook[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_facebook.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/ne6W2R?r=bb"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_twitter[1]" border="0" alt="o_twitter[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_twitter.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/nx3XV1?r=bb/"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_slideshare[1]" border="0" alt="o_slideshare[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_slideshare.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/reFTmf?r=bb"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_youtube[1]" border="0" alt="o_youtube[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_youtube.png" width="24" height="24" /&gt;&lt;/a&gt;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/center&gt;  &lt;p align="center"&gt; &lt;/p&gt;  &lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/HTML5-Going-Like-Gangbusters.-Unlikely-_58AA/Document-icon_2284f1ff-2f17-42c8-baf1-230b282e355e.png" width="16" height="16" /&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/10/04/infrastructure-scalability-pattern-partition-by-function-or-type.aspx"&gt;Infrastructure Scalability Pattern: Partition by Function or Type&lt;/a&gt;  &lt;/li&gt;    &lt;li&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/HTML5-Going-Like-Gangbusters.-Unlikely-_58AA/Document-icon_2284f1ff-2f17-42c8-baf1-230b282e355e.png" width="16" height="16" /&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/11/01/infrastructure-scalability-pattern-sharding-sessions.aspx"&gt;Infrastructure Scalability Pattern: Sharding Sessions&lt;/a&gt;  &lt;/li&gt;    &lt;li&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/HTML5-Going-Like-Gangbusters.-Unlikely-_58AA/Document-icon_2284f1ff-2f17-42c8-baf1-230b282e355e.png" width="16" height="16" /&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/04/08/amazon-makes-the-cloud-sticky.aspx"&gt;Amazon Makes the Cloud Sticky&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/HTML5-Going-Like-Gangbusters.-Unlikely-_58AA/Document-icon_2284f1ff-2f17-42c8-baf1-230b282e355e.png" width="16" height="16" /&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/06/06/load-balancing-fu-beware-the-algorithm-and-sticky-sessions.aspx"&gt;Load Balancing Fu: Beware the Algorithm and Sticky Sessions&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/HTML5-Going-Like-Gangbusters.-Unlikely-_58AA/Document-icon_2284f1ff-2f17-42c8-baf1-230b282e355e.png" width="16" height="16" /&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/09/26/et-tu-browser.aspx"&gt;Et Tu, Browser?&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/HTML5-Going-Like-Gangbusters.-Unlikely-_58AA/Document-icon_2284f1ff-2f17-42c8-baf1-230b282e355e.png" width="16" height="16" /&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/07/06/forget-hyper-scale.-think-hyper-local-scale.aspx"&gt;Forget Hyper-Scale. Think Hyper-Local Scale.&lt;/a&gt;  &lt;/li&gt;    &lt;li&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/HTML5-Going-Like-Gangbusters.-Unlikely-_58AA/Document-icon_2284f1ff-2f17-42c8-baf1-230b282e355e.png" width="16" height="16" /&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/07/08/infrastructure-scalability-pattern-sharding-streams.aspx"&gt;Infrastructure Scalability Pattern: Sharding Streams&lt;/a&gt;  &lt;/li&gt;    &lt;li&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/HTML5-Going-Like-Gangbusters.-Unlikely-_58AA/Document-icon_2284f1ff-2f17-42c8-baf1-230b282e355e.png" width="16" height="16" /&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/10/12/infrastructure-architecture-whitelisting-with-json-and-api-keys.aspx"&gt;Infrastructure Architecture: Whitelisting with JSON and API Keys&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/HTML5-Going-Like-Gangbusters.-Unlikely-_58AA/Document-icon_2284f1ff-2f17-42c8-baf1-230b282e355e.png" width="16" height="16" /&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/07/12/does-this-application-make-my-browser-look-fat.aspx"&gt;Does This Application Make My Browser Look Fat?&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/HTML5-Going-Like-Gangbusters.-Unlikely-_58AA/Document-icon_6c820637-6618-41c0-8f9a-b718e9e6cb97.png" width="16" height="16" /&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/07/20/http-now-serving-everything.aspx"&gt;HTTP Now Serving … Everything&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;hr color="#808080" width="100%" noshade="noshade" /&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f564f7f3-b0af-44d4-ad16-9c5e658b5c23" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/HTML5" rel="tag"&gt;HTML5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Web+Sockets" rel="tag"&gt;Web Sockets&lt;/a&gt;,&lt;a href="http://technorati.com/tags/architecture" rel="tag"&gt;architecture&lt;/a&gt;,&lt;a href="http://technorati.com/tags/scalability" rel="tag"&gt;scalability&lt;/a&gt;,&lt;a href="http://technorati.com/tags/TCP" rel="tag"&gt;TCP&lt;/a&gt;,&lt;a href="http://technorati.com/tags/devops" rel="tag"&gt;devops&lt;/a&gt;,&lt;a href="http://technorati.com/tags/performance" rel="tag"&gt;performance&lt;/a&gt;,&lt;a href="http://technorati.com/tags/security" rel="tag"&gt;security&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/1100415.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lori MacVittie</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/macvittie/archive/2011/11/07/html5-web-sockets-changes-the-scalability-game.aspx</guid>
            <pubDate>Mon, 07 Nov 2011 12:36:00 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/1100415.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/macvittie/archive/2011/11/07/html5-web-sockets-changes-the-scalability-game.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/1100415.aspx</wfw:commentRss>
            <trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/1100415.aspx</trackback:ping>
        </item>
        <item>
            <title>Infrastructure Architecture: Whitelisting with JSON and API Keys</title>
            <link>http://devcentral.f5.com/weblogs/macvittie/archive/2011/10/12/infrastructure-architecture-whitelisting-with-json-and-api-keys.aspx</link>
            <description>&lt;p&gt;&lt;em&gt;Application delivery infrastructure can be a valuable partner in architecting solutions …. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;AJAX and JSON have changed the way in which we architect applications, especially with respect to their ascendancy to rule the realm of integration, i.e. the API. Policies are generally focused on the URI, which has effectively become the exposed interface to any given application function. It’s REST-ful, it’s service-oriented, and it works well. &lt;/p&gt;  &lt;p&gt;Because we’ve taken to leveraging the URI as a basic building block, as the entry-point into an application, it affords the opportunity to optimize architectures and make more efficient the use of compute power available for processing. This is an increasingly important point, as capacity has become a focal point around which cost and efficiency is measured. By offloading functions to other systems when possible, we are able to increase the useful processing capacity of an given application instance and ensure a higher ratio of valuable processing to resources is achieved. &lt;/p&gt;  &lt;p&gt;The ability of application delivery infrastructure to intercept, inspect, and manipulate the exchange of data between client and server should not be underestimated. A full-proxy based infrastructure component can provide valuable services to the application architect that can enhance the performance and reliability of applications while abstracting functionality in a way that alleviates the need to modify applications to support new initiatives. &lt;/p&gt;  &lt;h4&gt;&lt;font color="#c0504d"&gt;AN EXAMPLE &lt;/font&gt;&lt;/h4&gt;  &lt;p&gt;Consider, for example, a business requirement specifying that only certain authorized partners (in the integration sense) are allowed to retrieve certain dynamic content via an exposed application API. There are myriad ways in which such a requirement could be implemented, including requiring authentication and subsequent tokens to authorize access – likely the most common means of providing such access management in conjunction with an API. Most of these options require several steps, however, and interaction directly with the application to examine credentials and determine authorization to requested resources. This consumes valuable compute that could otherwise be used to serve requests. &lt;/p&gt;  &lt;p&gt;An alternative approach would be to provide authorized consumers with a more standards-based method of access that includes, in the request, the very means by which authorization can be determined. Taking a lesson from the credit card industry, for example, an algorithm can be used to determine the validity of a particular customer ID or authorization token. An API key, if you will, that is not stored in a database (and thus requires a lookup) but rather is algorithmic and therefore able to be verified as valid without needing a specific lookup at run-time. Assuming such a token or API key were embedded in the URI, the application delivery service can then extract the key, verify its authenticity using an algorithm, and subsequently allow or deny access based on the result. &lt;/p&gt;  &lt;p&gt;This architecture is based on the premise that the application delivery service is capable of responding with the appropriate JSON in the event that the API key is determined to be invalid. Such a service must therefore be network-side scripting capable. Assuming such a platform exists, one can easily implement this architecture and enjoy the improved capacity and resulting performance boost from the offload of &lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Infrastructure-Architecture-Whitelisting_87B5/image_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Infrastructure-Architecture-Whitelisting_87B5/image_thumb.png" width="381" height="329" /&gt;&lt;/a&gt;authorization and access management functions to the infrastructure. &lt;/p&gt;    &lt;p&gt;1. A request is received by the application delivery service. &lt;/p&gt;  &lt;p&gt;2. The application delivery service extracts the API key from the URI and determines validity. &lt;/p&gt;  &lt;p&gt;3. If the API key is not legitimate, a JSON-encoded response is returned. &lt;/p&gt;  &lt;p&gt;4. If the API key is valid, the request is passed on to the appropriate web/application server for processing. &lt;/p&gt;  &lt;p&gt;Such an approach can also be used to enable or disable functionality within an application, including live-streams. Assume a site that serves up streaming content, but only to authorized (registered) users. When requests for that content arrive, the application delivery service can dynamically determine, using an embedded key or some portion of the URI, whether to serve up the content or not. If it deems the request invalid, it can return a JSON response that effectively “turns off” the streaming content, thereby eliminating the ability of non-registered (or non-paying) customers to access live content. &lt;/p&gt;  &lt;p&gt;Such an approach could also be useful in the event of a service failure; if content is not available, the application delivery service can easily turn off and/or respond to the request, providing feedback to the user that is valuable in reducing their frustration with AJAX-enabled sites that too often simply “stop working” without any kind of feedback or message to the end user. &lt;/p&gt;  &lt;p&gt;The application delivery service could, of course, perform other actions based on the in/validity of the request, such as directing the request be fulfilled by a service generating older or non-dynamic streaming content, using its ability to perform application level routing. &lt;/p&gt;  &lt;p&gt;The possibilities are quite extensive and implementation depends entirely on goals and requirements to be met. &lt;/p&gt;  &lt;p&gt;Such features become more appealing when they are, through their capabilities, able to intelligently make use of resources in various locations. Cloud-hosted services may be more or less desirable for use in an application, and thus leveraging application delivery services to either enable or reduce the traffic sent to such services may be financially and operationally beneficial. &lt;/p&gt;  &lt;h4&gt;&lt;font color="#c0504d"&gt;ARCHITECTURE is KEY &lt;/font&gt;&lt;/h4&gt;  &lt;p&gt;The core principle to remember here is that ultimately infrastructure architecture plays (or can and should play) a vital role in designing and deploying applications today. With the increasing interest and use of &lt;a title="" href="http://www.f5.com/solutions/cloud-computing" rel=""&gt;cloud computing &lt;/a&gt; and APIs, it is rapidly becoming necessary to leverage resources and services external to the application as a means to rapidly deploy new functionality and support for new features. The abstraction offered by application delivery services provides an effective, cross-site and cross-application means of enabling what were once application-only services within the infrastructure. This abstraction and service-oriented approach reduces the burden on the application as well as its developers. &lt;/p&gt;  &lt;p&gt;The application delivery service is almost always the first service in the oft-times lengthy chain of services required to respond to a client’s request. Leveraging its capabilities to inspect and manipulate as well as route and respond to those requests allows architects to formulate new strategies and ways to provide their own services, as well as  leveraging existing and integrated resources for maximum efficiency, with minimal effort. &lt;/p&gt;  &lt;hr color="#808080" width="100%" noshade="noshade" /&gt;&lt;center&gt;   &lt;table border="0" cellspacing="0" cellpadding="2" width="308"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="168"&gt;Connect with Lori: &lt;/td&gt;          &lt;td valign="top" width="138"&gt;Connect with &lt;a title="F5 Networks" href="http://www.f5.com/" rel="" target="_blank"&gt;F5&lt;/a&gt;: &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="168"&gt;&lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_linkedin[1]" border="0" alt="o_linkedin[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_linkedin.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="https://plus.google.com/110169987847611210070"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="google " border="0" alt="google " src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Why-Cant-We-Have-Nice-Things-Too_37AC/google+_3.jpg" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/f5/macv"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_rss[1]" border="0" alt="o_rss[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_rss.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://www.facebook.com/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_facebook[1]" border="0" alt="o_facebook[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_facebook.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_twitter[1]" border="0" alt="o_twitter[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_twitter.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;/td&gt;          &lt;td valign="top" width="138"&gt; &lt;a href="http://bitly.com/nIsT1z?r=bb"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_facebook[1]" border="0" alt="o_facebook[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_facebook.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/ne6W2R?r=bb"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_twitter[1]" border="0" alt="o_twitter[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_twitter.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/nx3XV1?r=bb/"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_slideshare[1]" border="0" alt="o_slideshare[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_slideshare.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/reFTmf?r=bb"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_youtube[1]" border="0" alt="o_youtube[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_youtube.png" width="24" height="24" /&gt;&lt;/a&gt;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/center&gt;  &lt;h5&gt;&lt;strong&gt;Related blogs &amp;amp; articles: &lt;/strong&gt;&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/08/18/the-inevitable-eventual-consistency-of-cloud-computing.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/e911749ccdec_929B/Document-icon_887463e5-cd11-4f42-a5c5-28bdb2b60f94.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/08/15/html5-going-like-gangbusters-but-will-anyone-notice.aspx"&gt;HTML5 Going Like Gangbusters But Will Anyone Notice?&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/08/18/the-inevitable-eventual-consistency-of-cloud-computing.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/e911749ccdec_929B/Document-icon_887463e5-cd11-4f42-a5c5-28bdb2b60f94.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/07/26/web-2-and-cloud-make-paas-middleware-obsolete.aspx"&gt;Web 2.0 Killed the Middleware Star&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/08/18/the-inevitable-eventual-consistency-of-cloud-computing.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/e911749ccdec_929B/Document-icon_887463e5-cd11-4f42-a5c5-28bdb2b60f94.png" width="16" height="16" /&gt; The Inevitable Eventual Consistency of Cloud Computing&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/08/18/the-inevitable-eventual-consistency-of-cloud-computing.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/e911749ccdec_929B/Document-icon_a4be0173-3333-4395-b6e2-92c59b65c00f.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/07/21/paas-is-just-soa-for-platforms-without-the-baggage.aspx"&gt;Let’s Face It: PaaS is Just SOA for Platforms Without the Baggage&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/08/18/the-inevitable-eventual-consistency-of-cloud-computing.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/e911749ccdec_929B/Document-icon_30330ee1-1885-4c4b-9f2f-ea07030282e5.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/02/09/cloud-tiered-architectural-models-are-bad-except-when-they-arenrsquot.aspx"&gt;Cloud-Tiered Architectural Models are Bad Except When They Aren’t&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/08/18/the-inevitable-eventual-consistency-of-cloud-computing.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/e911749ccdec_929B/Document-icon_bc4b1586-4cba-44b9-8e71-e84a3955b223.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/12/01/the-database-tier-is-not-elastic.aspx"&gt;The Database Tier is Not Elastic&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/08/18/the-inevitable-eventual-consistency-of-cloud-computing.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/e911749ccdec_929B/Document-icon_49f296a9-4318-4656-b243-ab8e28d75382.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/07/08/new-three-tiered-architecture-changes-everything.aspx"&gt;The New Distribution of The 3-Tiered Architecture Changes Everything&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/08/18/the-inevitable-eventual-consistency-of-cloud-computing.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/e911749ccdec_929B/Document-icon_dbe3554a-80d3-4666-adea-274d632826e8.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/09/22/sessions-sessions-everywhere.aspx"&gt;Sessions, Sessions Everywhere&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;    &lt;hr color="#808080" width="100%" noshade="noshade" /&gt;   &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:90f1e098-bf23-45cf-95df-e76ce63e4f35" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/JSON" rel="tag"&gt;JSON&lt;/a&gt;,&lt;a href="http://technorati.com/tags/HTTP" rel="tag"&gt;HTTP&lt;/a&gt;,&lt;a href="http://technorati.com/tags/architecture" rel="tag"&gt;architecture&lt;/a&gt;,&lt;a href="http://technorati.com/tags/integration" rel="tag"&gt;integration&lt;/a&gt;,&lt;a href="http://technorati.com/tags/application+delivery" rel="tag"&gt;application delivery&lt;/a&gt;,&lt;a href="http://technorati.com/tags/cloud+computing" rel="tag"&gt;cloud computing&lt;/a&gt;,&lt;a href="http://technorati.com/tags/devops" rel="tag"&gt;devops&lt;/a&gt;,&lt;a href="http://technorati.com/tags/network-side+scripting" rel="tag"&gt;network-side scripting&lt;/a&gt;,&lt;a href="http://technorati.com/tags/dynamic+infrastructure" rel="tag"&gt;dynamic infrastructure&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/1098418.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lori MacVittie</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/macvittie/archive/2011/10/12/infrastructure-architecture-whitelisting-with-json-and-api-keys.aspx</guid>
            <pubDate>Wed, 12 Oct 2011 11:31:00 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/1098418.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/macvittie/archive/2011/10/12/infrastructure-architecture-whitelisting-with-json-and-api-keys.aspx#feedback</comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/1098418.aspx</wfw:commentRss>
            <trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/1098418.aspx</trackback:ping>
        </item>
        <item>
            <title>Et Tu, Browser?</title>
            <link>http://devcentral.f5.com/weblogs/macvittie/archive/2011/09/26/et-tu-browser.aspx</link>
            <description>&lt;p&gt;&lt;em&gt;Friends, foes, Internet-denizens … lend me your browser.  &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Et-Tu-Browser_556B/800px-Cesar-sa_mort_2.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="800px-Cesar-sa_mort" border="0" alt="800px-Cesar-sa_mort" align="right" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Et-Tu-Browser_556B/800px-Cesar-sa_mort_thumb.jpg" width="340" height="190" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Were you involved in any of the DDoS attacks that occurred over the past twelve months? Was your mom? Sister? Brother? Grandfather? &lt;/p&gt;  &lt;p&gt;Can you even answer that question with any degree of certainty? &lt;/p&gt;  &lt;p&gt;Reality is that the reason for attack on the web is subtly shifting to theft not necessarily of data, but of resources. While the goal may still be to obtain personal credentials for monetary gain, it is far more profitable to rip hundreds or thousands of credentials from a single source than merely getting one at a time. From a miscreant’s point of view, the return on investment is simply much higher targeting a site than it is targeting you, directly. &lt;/p&gt;  &lt;p&gt;But that doesn’t mean you’re off the hook. In fact, quite the opposite. For there are other just as nefarious purposes to which your resources can be directed, including inadvertently participating in a grand-scale DDoS attack for what is now-a-days called “hactivism.” &lt;/p&gt;  &lt;p&gt;In both cases, you are still a victim, but you may not be aware of it as the goal is to stealth-install the means by which your compute resources can be harnessed to perpetrate an attack and it may not be caught by the security you have in place (you do have some in place, right?). You can’t necessarily count on immunity from infection because you only visit “safe sites”. &lt;/p&gt;  &lt;p&gt;That’s because one of the ways in which attackers leverage your compute resources is not through installation of adware or other malware, but directly through JavaScript loaded via infected sites. At issue is the possible collision between web application and browser security. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Et-Tu-Browser_556B/quote-badge_2.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 9px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="quote-badge" border="0" alt="quote-badge" align="left" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Et-Tu-Browser_556B/quote-badge_thumb.gif" width="40" height="46" /&gt;&lt;/a&gt;attackers are recommending to develop a system by which people are lured to some other content, such as SPAM SPAM SPAM !!!graphy, but &lt;/em&gt;&lt;font style="background-color: #ffff00"&gt;&lt;em&gt;by visiting the website would invisibly launch the DDOS JavaScript tool.&lt;/em&gt; &lt;/font&gt;&lt;font style="background-color: #ffff00" /&gt;-- &lt;a href="http://scforum.info/index.php?PHPSESSID=2c8c085ab76883f16579dfa4d3d31399&amp;amp;topic=4918.msg13674#msg13674"&gt;Researchers say: DDoS "Low Orbit Ion Cannon" attackers could be easily traced&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now consider the number of serious vulnerabilities reported by &lt;a href="https://www.whitehatsec.com/assets/presentations/10PPT/PPT_stats0910.pdf"&gt;WhiteHat Security during the Fall of 2010&lt;/a&gt;. Consider the rate across Social Networking sites. Assume an attacker managed to exploit one of those vulnerabilities and plant the DDoS JavaScript tool such that unsuspecting visitors end up playing a role in a DDoS attack. &lt;/p&gt;  &lt;p&gt;It gets worse, as far as the potential impact goes. The recent &lt;a href="http://threatpost.com/en_us/blogs/new-attack-breaks-confidentiality-model-ssl-allows-theft-encrypted-cookies-091611"&gt;revelation of a new SSL/TLS vulnerability&lt;/a&gt; (BEAST) includes a pre-condition that JavaScript be injected into the browser. CSRF (Cross-Site Request Forgery) is a fairly common method of managing such a trick, and is listed by WhiteHat in the aforementioned report as having increased to 24% of all vulnerabilities. So, too, is XSS (Cross-Site Scripting) which ranks even higher in WhiteHat’s list, tying “information leakage” for the number one spot at 64%.  &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Et-Tu-Browser_556B/quote-badge_5.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="quote-badge" border="0" alt="quote-badge" align="left" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Et-Tu-Browser_556B/quote-badge_thumb_1.gif" width="40" height="46" /&gt;&lt;/a&gt;&lt;em&gt;In order to execute their attack, Rizzo and Duong use BEAST (Browser Exploit Against SSL/TLS) against a victim who is on a network on which they have a man-in-the-middle position. Once a victim visits a high-value site, such as PayPal, that uses TLS 1.0, and logs in and receives a cookie, they inject the client-side BEAST code into the victim's browser. This can be done through the use of an iframe ad or just loading the BEAST JavaScript into the victim's browser.&lt;/em&gt; -- &lt;a href="http://threatpost.com/en_us/blogs/new-attack-breaks-confidentiality-model-ssl-allows-theft-encrypted-cookies-091611"&gt;New Attack Breaks Confidentiality Model of SSL, Allows Theft of Encrypted Cookies&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Such an attack is designed to steal high-value data such as might be stored in an encrypted cookie used to conduct transactions with Paypal or an online banking service. &lt;/p&gt;  &lt;p&gt;Depending on the level of protection at the web application layer, the delivery of such JavaScript may go completely unnoticed. Most web application security focuses on verifying user input, not application responses, are free from infection. And too many consumers believe running anti-virus scanning solutions are enough to detect and prevent infection in general, not realizing that a dynamically injected JavaScript (something many sites do all the time for monitoring performance and to enable real-time interaction) may, in fact, be “malicious” or at the very least an attempt at resource theft. &lt;/p&gt;  &lt;p&gt;How do you stop a browser that essentially stabs you in the back by accepting, without question, questionable content? &lt;/p&gt;  &lt;p&gt;Without layering additional security on the browser that parses through each and every piece of content delivered, there isn’t a whole lot you can do – other than turn off the ability to execute JavaScript which, today, essentially renders the Internet useless. &lt;/p&gt;  &lt;h4&gt;&lt;font color="#c0504d"&gt;&lt;font style="font-weight: bold"&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Et-Tu-Browser_556B/image_8.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Et-Tu-Browser_556B/image_thumb_3.png" width="417" height="391" /&gt;&lt;/a&gt;GO to the SOURCE &lt;/font&gt;&lt;/font&gt;&lt;/h4&gt;  &lt;p&gt;If we look at the &lt;strong&gt;source &lt;/strong&gt;of browser infections we invariably find the only viable, reasonable, effective answer is to eliminate the source. When you have a pandemic you figure out what’s causing it and you go to the source. Yes, you treat the symptoms of the victims if possible, but what you want to really do is locate and whack the source so it stops spreading. &lt;/p&gt;  &lt;p&gt;In “Perceptions about Network Security” (Ponemon Institute, June 2011) surveys show that the top three sources of a breach were insider abuse (52%), malicious software download (48%), and malware from a website (43%). Interestingly, 29% indicated the breach resulted from malicious content coming from a “social networking site”, which would – when added to the malware from a website (of which social networking sites are certainly a type) &lt;em&gt;that &lt;/em&gt;source tops the chart with 72% of all causes of breaches being a direct result of the failure of a website to secure itself, and essentially allow itself to become a carrier of an outbreak. &lt;/p&gt;  &lt;p&gt;Certainly if you have control over the desktops, laptops, and mobile devices from which a client will interact with your web site or network &lt;em&gt;and &lt;/em&gt;you have the capability to deploy policies on those clients that can aid in securing and protecting that client, you should. But that capability is rapidly dwindling with the introduction of a vast host of clients with wildly different OS footprints and the incompatibility of client-side, OS specific agents and apps capable of supporting a holistic client-side security strategy. &lt;/p&gt;  &lt;p&gt;Enforcing policies regarding interaction with corporate resources is really your best and most complete option. Like a DDoS attack, you are unlikely to be able to stop the infection of a client. You can, however, stop the spread and possible infection of your corporate resources as a carrier. The more organizations that attend to their own house’s security and protection, the better off end-users will likely be. Reducing the sources of the pandemic of client-side infections will reduce the risk not only to your own organization and users, but to others. And if we can all reduce the potential sources down to sites relying on user’s specifically visiting an infected site, the client-side mechanisms in place to protect users against known malware distribution sites will get us further to a safer and more enjoyable Internet. &lt;/p&gt;  &lt;hr color="#808080" width="100%" noshade="noshade" /&gt;&lt;center&gt;   &lt;table border="0" cellspacing="0" cellpadding="2" width="308"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="168"&gt;Connect with Lori: &lt;/td&gt;          &lt;td valign="top" width="138"&gt;Connect with &lt;a title="F5 Networks" href="http://www.f5.com/" rel="" target="_blank"&gt;F5&lt;/a&gt;: &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="168"&gt;&lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_linkedin[1]" border="0" alt="o_linkedin[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_linkedin.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="https://plus.google.com/110169987847611210070"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="google " border="0" alt="google " src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Why-Cant-We-Have-Nice-Things-Too_37AC/google+_3.jpg" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/f5/macv"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_rss[1]" border="0" alt="o_rss[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_rss.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://www.facebook.com/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_facebook[1]" border="0" alt="o_facebook[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_facebook.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_twitter[1]" border="0" alt="o_twitter[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_twitter.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;/td&gt;          &lt;td valign="top" width="138"&gt; &lt;a href="http://bitly.com/nIsT1z?r=bb"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_facebook[1]" border="0" alt="o_facebook[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_facebook.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/ne6W2R?r=bb"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_twitter[1]" border="0" alt="o_twitter[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_twitter.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/nx3XV1?r=bb/"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_slideshare[1]" border="0" alt="o_slideshare[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_slideshare.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/reFTmf?r=bb"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_youtube[1]" border="0" alt="o_youtube[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_youtube.png" width="24" height="24" /&gt;&lt;/a&gt;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/center&gt;  &lt;p align="center"&gt;&lt;a title="Subscribe using any feed reader!" href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1="&gt;&lt;img border="0" alt="AddThis Feed Button" src="http://s9.addthis.com/button1-fd.gif" width="125" height="18" /&gt;&lt;/a&gt; &lt;a title="Bookmark and Share" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" href="http://www.addthis.com/bookmark.php" target="_blank"&gt;&lt;img border="0" alt="Bookmark and Share" src="http://s9.addthis.com/button1-share.gif" width="125" height="18" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/12/16/the-many-faces-of-ddos-variations-on-a-theme-or.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/341b8a123712_10B8E/Document-icon_d0fbfbc7-2acf-4719-8262-8c294caac450.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/06/22/when-the-data-center-is-under-siege-donrsquot-forget-to.aspx"&gt;When the Data Center is Under Siege Don’t Forget to Watch Under the Floor&lt;/a&gt;  &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/12/16/the-many-faces-of-ddos-variations-on-a-theme-or.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/341b8a123712_10B8E/Document-icon_d0fbfbc7-2acf-4719-8262-8c294caac450.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/12/16/the-many-faces-of-ddos-variations-on-a-theme-or.aspx"&gt;The Many Faces of DDoS: Variations on a Theme or Two&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/12/16/the-many-faces-of-ddos-variations-on-a-theme-or.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/341b8a123712_10B8E/Document-icon_845e1340-80cc-4ecd-a951-9421f4bd7d18.png" width="16" height="16" /&gt; &lt;/a&gt;&lt;a href="http://www.bbc.co.uk/news/technology-13749181"&gt;Spanish police website hit by Anonymous hackers (June 2011)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/12/16/the-many-faces-of-ddos-variations-on-a-theme-or.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/341b8a123712_10B8E/Document-icon_46c3413a-7db9-4d80-8be5-5602c7db6039.png" width="16" height="16" /&gt; &lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/12/15/what-we-learned-from-anonymous-ddos-is-now-3dos.aspx"&gt;What We Learned from Anonymous: DDoS is now 3DoS&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/12/16/the-many-faces-of-ddos-variations-on-a-theme-or.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/341b8a123712_10B8E/Document-icon_46877a95-67c6-413b-9b26-58f0ac6ff6a0.png" width="16" height="16" /&gt; &lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/psilva/archive/2011/06/14/custom-code-for-targeted-attacks.aspx"&gt;Custom Code for Targeted Attacks&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/12/16/the-many-faces-of-ddos-variations-on-a-theme-or.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/341b8a123712_10B8E/Document-icon_806c396a-e07e-4d2a-8f64-ef5e8dd70421.png" width="16" height="16" /&gt; &lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/psilva/archive/2011/03/16/defense-in-depth-in-context.aspx"&gt;Defense in Depth in Context&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/12/16/the-many-faces-of-ddos-variations-on-a-theme-or.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/341b8a123712_10B8E/Document-icon_c70eb83e-7c2a-4244-943f-084a15a163a4.png" width="16" height="16" /&gt; &lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/psilva/archive/2011/03/30/the-big-attacks-are-backhellipnot-that-they-ever-stopped.aspx"&gt;The Big Attacks are Back…Not That They Ever Stopped&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/12/16/the-many-faces-of-ddos-variations-on-a-theme-or.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/341b8a123712_10B8E/Document-icon_a13ce049-62cd-4810-bb0d-94bea4100df2.png" width="16" height="16" /&gt; &lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/05/16/application-identity-theft-in-the-cloud.aspx"&gt;(IP) Identity Theft in Cloud Computing Environments&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/12/16/the-many-faces-of-ddos-variations-on-a-theme-or.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/341b8a123712_10B8E/Document-icon_257f8796-2c3c-4e2c-8649-5277672f5a37.png" width="16" height="16" /&gt; &lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/05/09/if-security-in-the-cloud-were-handled-like-car-accidents.aspx"&gt;If Security in the Cloud Were Handled Like Car Accidents&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;hr color="#808080" width="100%" noshade="noshade" /&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:de3768be-a8ab-4a1d-afec-05c222d28df9" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/security" rel="tag"&gt;security&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web+application+security" rel="tag"&gt;web application security&lt;/a&gt;,&lt;a href="http://technorati.com/tags/browser" rel="tag"&gt;browser&lt;/a&gt;,&lt;a href="http://technorati.com/tags/malware" rel="tag"&gt;malware&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Ponemon" rel="tag"&gt;Ponemon&lt;/a&gt;,&lt;a href="http://technorati.com/tags/client" rel="tag"&gt;client&lt;/a&gt;,&lt;a href="http://technorati.com/tags/mobile" rel="tag"&gt;mobile&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/1098375.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lori MacVittie</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/macvittie/archive/2011/09/26/et-tu-browser.aspx</guid>
            <pubDate>Mon, 26 Sep 2011 12:59:00 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/1098375.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/macvittie/archive/2011/09/26/et-tu-browser.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/1098375.aspx</wfw:commentRss>
            <trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/1098375.aspx</trackback:ping>
        </item>
        <item>
            <title>The Real News is Not that Facebook Serves Up 1 Trillion Pages a Month&amp;hellip;</title>
            <link>http://devcentral.f5.com/weblogs/macvittie/archive/2011/09/21/the-real-news-is-not-that-facebook-serves-up-1.aspx</link>
            <description>&lt;p&gt;&lt;em&gt;It’s how much load that really generates and how it scales to meet the challenge. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/How-Does-Facebook-Do-It-1-Trillion-Page-_A49D/image_4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 10px 5px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/How-Does-Facebook-Do-It-1-Trillion-Page-_A49D/image_thumb_1.png" width="336" height="269" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;There’s some amount of debate whether Facebook &lt;em&gt;really &lt;/em&gt;crossed over the one trillion page view per month threshold. While one report says it did, &lt;a href="http://money.cnn.com/2011/08/26/technology/facebook_1_trillion_page_views/index.htm"&gt;another respected firm says it did not&lt;/a&gt;; that its monthly page views are a mere 467 billion per month. &lt;/p&gt;  &lt;p&gt;In the big scheme of things, the discrepancy is somewhat irrelevant, as neither show the &lt;em&gt;true &lt;/em&gt;load on Facebook’s infrastructure – which is far more impressive a set of numbers than its externally measured “page view” metric.  Mashable reported in “&lt;a href="http://mashable.com/2011/08/24/facebook-1-trillion-pageviews/"&gt;Facebook Surpasses 1 Trillion Pageviews per Month&lt;/a&gt;” that the social networking giant saw “approximately 870 million unique visitors in June and 860 million in July” and followed up with some per visitor statistics, indicating “each visitor averaged approximately 1,160 page views in July and 40 per visit — enormous by any standard. Time spent on the site was around 25 minutes per user.” &lt;/p&gt;  &lt;p&gt;From an architectural standpoint it’s not &lt;em&gt;just &lt;/em&gt;about the page views. It’s about requests and responses, many of which occur under the radar from metrics and measurements typically gathered by external services like Google. Much of Facebook’s interactive features are powered by AJAX, which is hidden “in” the page and thus obscured from external view and a “page view” doesn’t necessarily include a count of all the external objects (scripts, images, etc…) that comprises a “page”. So while 1 trillion (or 467 billion, whichever you prefer) is impressive, consider that this is likely only a  fraction of the actual requests and responses handled by Facebook’s massive infrastructure on any given day. &lt;/p&gt;  &lt;p&gt;Let’s examine what the actual requests and responses might mean in terms of load on Facebook’s infrastructure, shall we? &lt;/p&gt;  &lt;h4&gt;&lt;font color="#c0504d"&gt;&lt;font style="font-weight: bold"&gt;SOME QUICK MATH &lt;/font&gt;&lt;/font&gt;&lt;/h4&gt;  &lt;p&gt;Loading up Facebook yields 125 requests to load various scripts, images, and content. That’s a “page view”. Sitting on the page for a few minutes and watching Firebug’s console, you’ll note a request to update content occurs approximately every minute you are on a page. If we do the math – based on approximate page views per visitor, each of which incurs 125 GET requests – we can math that up to an approximation of 19,468 RPS (Requests per Second). &lt;/p&gt;  &lt;p&gt;That’s only an approximation, mind you, and doesn’t take into consideration the time factor, which &lt;em&gt;also &lt;/em&gt;incurs AJAX-based requests to update content occurring on a fairly regular basis. These also add to the overall load on Facebook’s massive infrastructure. And that’s before we start considering the impact from “unseen” integrated traffic via Facebook’s API which, &lt;a href="http://blog.programmableweb.com/2011/05/25/who-belongs-to-the-api-billionaires-club/"&gt;according to the most recently available data (2009)&lt;/a&gt; was adding 5 billion requests a &lt;strong&gt;day &lt;/strong&gt;to that load. If you’re wondering, that’s an additional 57,870 requests &lt;em&gt;per second&lt;/em&gt;, which gives us a more complete number of 77,338 requests per second. &lt;span style="float: left" /&gt;&lt;/p&gt;  &lt;p&gt;SOURCE: &lt;a href="http://www.f5.com/news-press-events/web-media/webcasts/2009-interop-f5-keynote.html"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="webcast" border="0" alt="webcast" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/How-Does-Facebook-Do-It-1-Trillion-Page-_A49D/webcast_f45d934a-f414-4150-95f8-4d9d6d12085a.png" width="16" height="16" /&gt;2009 Interop F5 Keynote&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/How-Does-Facebook-Do-It-1-Trillion-Page-_A49D/image_8.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/How-Does-Facebook-Do-It-1-Trillion-Page-_A49D/image_thumb_2.png" width="257" height="286" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Let’s take a moment to digest that, because that’s a lot of load on a site – and I’m sure it still isn’t taking into consideration everything. We also have to remember that the load at any given time could be higher – or lower – based on usage patterns. Averaging totals over a month and distilling down to a per second average is just that – a mathematical average. It doesn’t take into consideration that peaks and valleys occur in usage throughout the day and that Facebook may be averaging only a fraction of that load with spikes two and three times as high throughout the day. &lt;/p&gt;  &lt;p&gt;That realization should be a bit sobering, as we’ve seen recent DDoS attacks that have crippled and even toppled sites with less traffic than Facebook handles in any given minute of the day.  &lt;/p&gt;  &lt;p&gt;The question is, how do they do it? How do they manage to keep the service up and available despite the overwhelming load and certainty of traffic spikes? &lt;/p&gt;  &lt;h4&gt;&lt;font color="#c0504d"&gt;&lt;font style="font-weight: bold"&gt;IT’S the ARCHITECTURE &lt;/font&gt;&lt;/font&gt;&lt;/h4&gt;  &lt;p&gt;Facebook itself does a great job of discussing exactly how it manages to sustain such load over time while simultaneously managing growth, and its secret generally revolves around architectural choices. Not just the “Facebook” application architecture, but its use of infrastructure architecture as well. That may not always be apparent from Facebook’s engineering blog, which generally focuses on application and software architecture topics, but it is inherent in those architectural decisions. &lt;/p&gt;  &lt;p&gt;Take, for example, an engineer’s discussion on Facebook’s secrets to &lt;a href="http://www.facebook.com/note.php?note_id=409881258919"&gt;scaling to over 500 million users and beyond&lt;/a&gt;. The very first point made is to “scale &lt;strong&gt;horizontally”&lt;/strong&gt;.  &lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_start_quote_rb.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="quote-badge" border="0" alt="quote-badge" align="left" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_start_quote_rb.gif" width="16" height="9" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;blockquote style="margin: 10px; padding-left: 10px; padding-right: 10px; background: white"&gt;   &lt;p&gt;&lt;font color="#666666"&gt;This isn't at all novel but it's really important. If something is increasing exponentially, the &lt;font style="background-color: #ffff00"&gt;only sensible way to deal with it is to get it spread across arbitrarily many machines&lt;/font&gt;. Remember, there are only three numbers in computer science: 0, 1, and n. &lt;/font&gt;&lt;img src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_end_quote_rb.gif" width="16" height="9" /&gt;(&lt;a href="http://www.facebook.com/note.php?note_id=409881258919"&gt;Scaling Facebook to 500 Million Users and Beyond (Facebook Engineering Blog)&lt;/a&gt;)       &lt;br /&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Horizontal scalability is, of course, enabled via &lt;a title="" href="http://www.f5.com/glossary/load-balancing.html" rel=""&gt;load balancing&lt;/a&gt; which generally (but not always) implies infrastructure components that are critical to an overall growth and scalability strategy. The abstraction afforded by the use of load balancing services also has the added benefit of enabling agile operations as it becomes cost and time effective to add and remove (provision and decommission) compute resources as a means to meet scaling challenges on-demand, which is a key component of &lt;a title="" href="http://www.f5.com/solutions/cloud-computing" rel=""&gt;cloud computing &lt;/a&gt; models. &lt;/p&gt;  &lt;p&gt;In other words, in addition to Facebook’s attention to application architecture as a means to enable scalability, it also takes advantage of infrastructure components providing load balancing services to ensure that its massive load is distributed not just geographically but efficiently across its various clusters of application functionality. It’s a collaborative architecture that spans infrastructure &lt;em&gt;and &lt;/em&gt;application tiers, taking advantage of the speed and scalability benefits afforded by both approaches simultaneously. &lt;/p&gt;  &lt;p&gt;Yet Facebook is not shy about revealing its use of infrastructure as a means to scale and implement its architecture; you just have to dig around to find it. Consider as an example of a collaborative architecture the solution to some of the challenges Facebook has faced trying to scale out its database, particularly in the area of synchronization across data centers. This is a typical enterprise challenge made even more difficult by Facebook’s decision to separate “write” databases from “read” to enhance the scalability of its application architecture. The solution is found in something Facebook engineers call “Page Routing” but most of us in the industry call “&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/08/12/3529.aspx"&gt;Layer 7 Switching” or “Application Switching&lt;/a&gt;”: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_start_quote_rb.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="quote-badge" border="0" alt="quote-badge" align="left" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_start_quote_rb.gif" width="16" height="9" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;font color="#666666"&gt;The problem thus boiled down to, when a user makes a request for a page, how do we decide if it is "safe" to send to Virginia or if it must be routed to California?&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#666666"&gt;This question turned out to have a relatively straightforward answer. One of the first servers a user request to Facebook hits is called a &lt;a title="" href="http://www.f5.com/glossary/load-balancer.html" rel=""&gt;Load balancer&lt;/a&gt;; this machine's primary responsibility is picking a web server to handle the request but it also serves a number of other purposes: protecting against denial of service attacks and multiplexing user connections to name a few. &lt;font style="background-color: #ffff00"&gt;This load balancer has the capability to run in Layer 7 mode where it can examine the URI a user is requesting and make routing decisions based on that information&lt;/font&gt;. This feature meant it was easy to tell the load balancer about our "safe" pages and it could decide whether to send the request to Virginia or California based on the page name and the user's location.&lt;/font&gt;&lt;img src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_end_quote_rb.gif" width="16" height="9" /&gt; (&lt;a href="http://www.facebook.com/note.php?note_id=23844338919"&gt;Scaling Out (Facebook Engineering Blog)&lt;/a&gt;) &lt;/p&gt;  &lt;p&gt;That’s the hallmark of the modern, agile data center and the core of cloud computing models: collaborative, dynamic infrastructure and applications leveraging technology to enable a cost-efficient, scalable architectures able to maintain growth along with the business. &lt;/p&gt;  &lt;h4&gt;&lt;font color="#c0504d"&gt;SCALABILITY TODAY REQUIRES a COMPREHENSIVE ARCHITECTURAL STRATEGY &lt;/font&gt;&lt;/h4&gt;  &lt;p&gt;Today’s architectures – both application and infrastructure – are growing necessarily complex to meet the explosive growth of a variety of media and consumers. &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/08/31/application-driven-scalability-in-cloud-computing.aspx"&gt;Applications alone cannot scale themselves out&lt;/a&gt; – there simply aren’t physical machines large enough to support the massive number of users and load on applications created by the nearly insatiable demand consumers have for online games, shopping, interaction, and news. Modern applications must be deployed and delivered collaboratively with infrastructure if they are to scale and support growth in an operationally and financially efficient manner. &lt;/p&gt;  &lt;p&gt;Facebook’s ability to grow and scale along with demand is enabled by its holistic, &lt;strong&gt;&lt;font color="#c0504d"&gt;architectural&lt;/font&gt;&lt;/strong&gt; approach that leverages both modern application scalability patterns as well as infrastructure scalability patterns. Together, infrastructure and applications are enabling the social networking giant to continue to grow steadily with very few hiccups along the way. Its approach is one that is well-suited for any organization wishing to scale efficiently over time with the least amount of disruption and with the speed of deployment required of today’s demanding business environments. &lt;/p&gt;  &lt;hr color="#808080" width="100%" noshade="noshade" /&gt;&lt;center&gt;   &lt;table border="0" cellspacing="0" cellpadding="2" width="308"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="168"&gt;Connect with Lori: &lt;/td&gt;          &lt;td valign="top" width="138"&gt;Connect with &lt;a title="F5 Networks" href="http://www.f5.com/" rel="" target="_blank"&gt;F5&lt;/a&gt;: &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="168"&gt;&lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_linkedin[1]" border="0" alt="o_linkedin[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_linkedin.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="https://plus.google.com/110169987847611210070"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="google " border="0" alt="google " src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Why-Cant-We-Have-Nice-Things-Too_37AC/google+_3.jpg" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/f5/macv"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_rss[1]" border="0" alt="o_rss[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_rss.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://www.facebook.com/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_facebook[1]" border="0" alt="o_facebook[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_facebook.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_twitter[1]" border="0" alt="o_twitter[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_twitter.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;/td&gt;          &lt;td valign="top" width="138"&gt; &lt;a href="http://bitly.com/nIsT1z?r=bb"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_facebook[1]" border="0" alt="o_facebook[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_facebook.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/ne6W2R?r=bb"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_twitter[1]" border="0" alt="o_twitter[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_twitter.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/nx3XV1?r=bb/"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_slideshare[1]" border="0" alt="o_slideshare[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_slideshare.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/reFTmf?r=bb"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_youtube[1]" border="0" alt="o_youtube[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_youtube.png" width="24" height="24" /&gt;&lt;/a&gt;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/center&gt;  &lt;p align="center"&gt;&lt;a title="Subscribe using any feed reader!" href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1="&gt;&lt;img border="0" alt="AddThis Feed Button" src="http://s9.addthis.com/button1-fd.gif" width="125" height="18" /&gt;&lt;/a&gt; &lt;a title="Bookmark and Share" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" href="http://www.addthis.com/bookmark.php" target="_blank"&gt;&lt;img border="0" alt="Bookmark and Share" src="http://s9.addthis.com/button1-share.gif" width="125" height="18" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/10/22/wils-why-does-load-balancing-improve-application-performance.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Load-Balancing-Fu-Beware-the-Algorithm-a_30F5/Document-icon_23d56711-5fac-4ebf-901b-e616786852e0.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://money.cnn.com/2011/08/26/technology/facebook_1_trillion_page_views/index.htm"&gt;Facebook Hits One Trillion Page Views? Nope.&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/10/22/wils-why-does-load-balancing-improve-application-performance.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Load-Balancing-Fu-Beware-the-Algorithm-a_30F5/Document-icon_23d56711-5fac-4ebf-901b-e616786852e0.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://mashable.com/2011/08/24/facebook-1-trillion-pageviews/"&gt;Facebook Surpasses 1 Trillion Pageviews per Month&lt;/a&gt;  &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/10/22/wils-why-does-load-balancing-improve-application-performance.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Load-Balancing-Fu-Beware-the-Algorithm-a_30F5/Document-icon_23d56711-5fac-4ebf-901b-e616786852e0.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://www.facebook.com/note.php?note_id=23844338919"&gt;Scaling Out (Facebook Engineering Blog)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/10/22/wils-why-does-load-balancing-improve-application-performance.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Load-Balancing-Fu-Beware-the-Algorithm-a_30F5/Document-icon_23d56711-5fac-4ebf-901b-e616786852e0.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://www.facebook.com/note.php?note_id=409881258919"&gt;Scaling Facebook to 500 Million Users and Beyond (Facebook Engineering Blog)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/10/22/wils-why-does-load-balancing-improve-application-performance.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Load-Balancing-Fu-Beware-the-Algorithm-a_30F5/Document-icon_23d56711-5fac-4ebf-901b-e616786852e0.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/06/20/wils-content-switching-is-like-vlans-for-http.aspx"&gt;WILS: Content (Application) Switching is like VLANs for HTTP&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/10/22/wils-why-does-load-balancing-improve-application-performance.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Load-Balancing-Fu-Beware-the-Algorithm-a_30F5/Document-icon_23d56711-5fac-4ebf-901b-e616786852e0.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/08/12/3529.aspx"&gt;Layer 7 Switching + Load Balancing = Layer 7 Load Balancing&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/10/22/wils-why-does-load-balancing-improve-application-performance.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Load-Balancing-Fu-Beware-the-Algorithm-a_30F5/Document-icon_23d56711-5fac-4ebf-901b-e616786852e0.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/10/04/infrastructure-scalability-pattern-partition-by-function-or-type.aspx"&gt;Infrastructure Scalability Pattern: Partition by Function or Type&lt;/a&gt;  &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/10/22/wils-why-does-load-balancing-improve-application-performance.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Load-Balancing-Fu-Beware-the-Algorithm-a_30F5/Document-icon_3da35ae1-c9f8-4fab-a0f2-6c9f5071336b.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/11/01/infrastructure-scalability-pattern-sharding-sessions.aspx"&gt;Infrastructure Scalability Pattern: Sharding Sessions&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/10/22/wils-why-does-load-balancing-improve-application-performance.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Load-Balancing-Fu-Beware-the-Algorithm-a_30F5/Document-icon_3da35ae1-c9f8-4fab-a0f2-6c9f5071336b.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/dmacvittie/archive/2011/07/07/architecturally-is-there-such-a-thing-as-too-scalable.aspx"&gt;Architecturally, Is There Such A Thing As Too Scalable?&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/10/22/wils-why-does-load-balancing-improve-application-performance.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Load-Balancing-Fu-Beware-the-Algorithm-a_30F5/Document-icon_3da35ae1-c9f8-4fab-a0f2-6c9f5071336b.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/07/06/forget-hyper-scale.-think-hyper-local-scale.aspx"&gt;Forget Hyper-Scale. Think Hyper-Local Scale.&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;hr color="#808080" width="100%" noshade="noshade" /&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f6acfbd2-a93f-47a1-bb70-38ed4b64b6b8" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Facebook" rel="tag"&gt;Facebook&lt;/a&gt;,&lt;a href="http://technorati.com/tags/architecture" rel="tag"&gt;architecture&lt;/a&gt;,&lt;a href="http://technorati.com/tags/scalability" rel="tag"&gt;scalability&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Page+Routing" rel="tag"&gt;Page Routing&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Layer+7+Switching" rel="tag"&gt;Layer 7 Switching&lt;/a&gt;,&lt;a href="http://technorati.com/tags/application+delivery" rel="tag"&gt;application delivery&lt;/a&gt;,&lt;a href="http://technorati.com/tags/VIPRION" rel="tag"&gt;VIPRION&lt;/a&gt;,&lt;a href="http://technorati.com/tags/dynamic+infrastructure" rel="tag"&gt;dynamic infrastructure&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/1098364.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lori MacVittie</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/macvittie/archive/2011/09/21/the-real-news-is-not-that-facebook-serves-up-1.aspx</guid>
            <pubDate>Wed, 21 Sep 2011 13:14:00 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/1098364.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/macvittie/archive/2011/09/21/the-real-news-is-not-that-facebook-serves-up-1.aspx#feedback</comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/1098364.aspx</wfw:commentRss>
            <trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/1098364.aspx</trackback:ping>
        </item>
        <item>
            <title>Who Took the Cookie from the Cookie Jar &amp;hellip; and Did They Have Proper Consent?</title>
            <link>http://devcentral.f5.com/weblogs/macvittie/archive/2011/09/14/cookies-as-a-service.aspx</link>
            <description>&lt;p&gt;&lt;em&gt;Cookies as a service enabled via infrastructure services provide an opportunity to improve your operational posture.  &lt;/em&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/c3bbebc78cfa_30FC/Cookie-standing_2.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 5px 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Cookie-standing" border="0" alt="Cookie-standing" align="left" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/c3bbebc78cfa_30FC/Cookie-standing_thumb.jpg" width="189" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h5&gt;Fellow &lt;a href="http://devcentral.f5.com/"&gt;DevCentral&lt;/a&gt; blogger &lt;a href="http://devcentral.f5.com/weblogs/rhaynes/"&gt;Robert Haynes&lt;/a&gt; posted a great look at a UK law regarding cookies. Back in May a new law went info effect regarding “how cookies and other “cookie-like” objects are stored on users’ devices.” If you haven’t heard about it, don’t panic – there’s a one-year grace period before enforcement begins and those £500 000 fines are being handed out. The clock is ticking, however.&lt;/h5&gt;  &lt;blockquote style="border-left: black 5px solid; margin: 10px; padding-left: 10px; padding-right: 10px; background: white; border-right: black 5px solid"&gt;   &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_start_quote_rb.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="quote-badge" border="0" alt="quote-badge" align="left" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_start_quote_rb.gif" width="24" height="13" /&gt;&lt;/a&gt; What do the new regulations say? Well essentially whereas cookies could be stored with what I, as a non-lawyer, would term implied consent, i.e. the cookies you set are listed along with their purpose and how to opt out in some interminable privacy policy on your site, you are now going to have to obtain a more active and informed consent to store cookies on a user’s device. &lt;img src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_end_quote_rb.gif" /&gt;&lt;/p&gt;    &lt;p&gt;-- &lt;a href="http://devcentral.f5.com/weblogs/rhaynes/archive/2011/06/10/the-uk-cookie-law-ndash-ltplace-your-own-bad-pun.aspx"&gt;The UK Cookie Law – &amp;lt;place your own bad pun here&amp;gt;  &lt;/a&gt;      &lt;br /&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Robert goes on to explain that the solution to this problem requires (1) capturing cookies and (2) implementing some mechanism to allow users to grant consent. Mind you, this is not a trivial task. There are logic considerations – not all cookies are set at the same time – as well as logistical issues – how do you present a request for consent? Once consent is granted, where do you store that? In a cookie? That you must gain consent to store? Infinite loops are never good. And of course, what do you if consent is &lt;em&gt;not&lt;/em&gt; granted, but the application depends on that cookie existing? &lt;/p&gt;  &lt;p&gt;To top it all off, the process of gathering consent requires modification to application behavior, which means new code, testing and eventually deployment. &lt;/p&gt;  &lt;p&gt;Infrastructure services may present an alternative approach that is less disruptive technologically, but does not necessarily address the business or logic ramifications resulting from such a change. &lt;/p&gt;  &lt;h3&gt;&lt;font color="#c0504d"&gt;&lt;font style="font-weight: bold"&gt;COOKIES as a SERVICE &lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/c3bbebc78cfa_30FC/image_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/c3bbebc78cfa_30FC/image_thumb.png" width="473" height="276" /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/h3&gt;  &lt;p&gt;Cookies as a Service, a.k.a. cookie gateways, wherein cookie authorization and management is handled by an intermediate proxy, is likely best able to mitigate the expense and time associated with modifying applications to meet the new UK regulation. As Robert describes, he’s currently working on a network-side scripting solution to meet the UK requirements that leverages a full-proxy architecture’s ability to mediate for applications and communicate directly with clients before passing requests on to the application. &lt;/p&gt;  &lt;p&gt;Not only is this a valid approach to managing privacy regulations, it’s also a good means of providing additional security against attacks that leverage cookies either directly or indirectly. Cross-site scripting, browser vulnerabilities and other attacks that bypass the same origin policy of modern web browsers – sometimes by design to circumvent restrictions on integration methods – as well as piggy-backing on existing cookies as a means to gain unauthorized access to applications are all potential dangerous of cookies. By leveraging &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/01/15/google-gmail-ssl-cookie-encryption.aspx"&gt;encryption of cookies in conjunction with transport layer security,&lt;/a&gt; i.e. SSL, organizations can better protect both users and applications from unintended security consequences. &lt;/p&gt;  &lt;p&gt;Implementing a cookie gateway should make complying with regulations like the new UK policy a less odious task. By centralizing cookie management on an intermediate device, they can be easily collected and displayed along with the appropriate opt-out / consent policies without consuming application resources or requiring every application to be modified to include the functionality to do so. &lt;/p&gt;  &lt;h3&gt;&lt;font color="#c0504d"&gt;&lt;font style="font-weight: bold"&gt;AN INFRASTRUCTURE SERVICE &lt;/font&gt;&lt;/font&gt;&lt;/h3&gt;  &lt;p&gt;This is one of the (many) ways in which an infrastructure service hosted in “the network” can provide value to both application developers and business stakeholders. Such a reusable infrastructure-hosted service can be leveraged to provide services to all applications and users simultaneously, dramatically reducing the time and effort required to support such a new initiative. Reusing an infrastructure service also reduces the possibility of human error during the application modification, which can drag out the deployment lifecycle and delay time to market. In the case of meeting the requirements of the new UK regulations, that delay could become costly.  &lt;/p&gt;  &lt;p&gt;According to a poll of CIOs regarding their budgets for 2010, The Society for &lt;a href="http://www.baselinemag.com/#"&gt;Information Management&lt;/a&gt; found that “&lt;em&gt;Approximately 69% of IT spending in 2010 will be allocated to existing systems, while about 31% will be spent on building and buying new systems. This ratio remains largely the same compared to this year's numbers&lt;/em&gt;.” If we are to be more responsive to new business initiatives and flip that ratio such that we are spending less on maintaining existing systems and more on developing new systems and methods of management (i.e. &lt;a title="" href="http://www.f5.com/solutions/cloud-computing" rel=""&gt;cloud computing &lt;/a&gt;) we need to leverage strategic points of control within the network to provide services that minimize resources, time and money on existing systems. Infrastructure services such as cookie gateways provide the opportunity to enhance security, comply with regulations and eliminate costs in application development that can be reallocated to new initiatives and projects. &lt;/p&gt;  &lt;p&gt;We need to start treating the network and its unique capabilities as &lt;strong&gt;assets to be leveraged&lt;/strong&gt; and &lt;strong&gt;services to be enabled&lt;/strong&gt; instead of a fat, dumb pipe. &lt;/p&gt;  &lt;hr color="#808080" width="100%" noshade="noshade" /&gt;&lt;center&gt;   &lt;table border="0" cellspacing="0" cellpadding="2" width="308"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="168"&gt;Connect with Lori: &lt;/td&gt;          &lt;td valign="top" width="138"&gt;Connect with &lt;a title="F5 Networks" href="http://www.f5.com/" rel="" target="_blank"&gt;F5&lt;/a&gt;: &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="168"&gt;&lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_linkedin[1]" border="0" alt="o_linkedin[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_linkedin.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="https://plus.google.com/110169987847611210070"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="google " border="0" alt="google " src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Why-Cant-We-Have-Nice-Things-Too_37AC/google+_3.jpg" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/Rss.aspx"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_rss[1]" border="0" alt="o_rss[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_rss.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://www.facebook.com/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_facebook[1]" border="0" alt="o_facebook[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_facebook.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_twitter[1]" border="0" alt="o_twitter[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_twitter.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;/td&gt;          &lt;td valign="top" width="138"&gt; &lt;a href="http://www.facebook.com/f5networksinc"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_facebook[1]" border="0" alt="o_facebook[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_facebook.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://twitter.com/f5networks"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_twitter[1]" border="0" alt="o_twitter[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_twitter.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://www.slideshare.net/f5dotcom/"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_slideshare[1]" border="0" alt="o_slideshare[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_slideshare.png" width="24" height="24" /&gt;&lt;/a&gt; &lt;a href="http://www.youtube.com/f5networksinc"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="o_youtube[1]" border="0" alt="o_youtube[1]" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_youtube.png" width="24" height="24" /&gt;&lt;/a&gt;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/center&gt;  &lt;p align="center"&gt;&lt;a title="Subscribe using any feed reader!" href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1="&gt;&lt;img border="0" alt="AddThis Feed Button" src="http://s9.addthis.com/button1-fd.gif" width="125" height="18" /&gt;&lt;/a&gt; &lt;a title="Bookmark and Share" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" href="http://www.addthis.com/bookmark.php" target="_blank"&gt;&lt;img border="0" alt="Bookmark and Share" src="http://s9.addthis.com/button1-share.gif" width="125" height="18" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/04/06/now-witness-the-power-of-this-fully-operational-feedback-loop.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Cloud-Will-Kill-the-Need-for-Configurati_95C2/Document-icon_70567905-b4a2-48cd-b5f1-3edebf4f5cf0.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/10/31/understanding-network-side-scripting.aspx"&gt;Understanding network-side scripting&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/04/06/now-witness-the-power-of-this-fully-operational-feedback-loop.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Cloud-Will-Kill-the-Need-for-Configurati_95C2/Document-icon_70567905-b4a2-48cd-b5f1-3edebf4f5cf0.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/07/11/this-is-why-we-canrsquot-have-nice-things.aspx"&gt;This is Why We Can’t Have Nice Things&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/04/06/now-witness-the-power-of-this-fully-operational-feedback-loop.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Cloud-Will-Kill-the-Need-for-Configurati_95C2/Document-icon_70567905-b4a2-48cd-b5f1-3edebf4f5cf0.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/06/22/when-the-data-center-is-under-siege-donrsquot-forget-to.aspx"&gt;When the Data Center is Under Siege Don’t Forget to Watch Under the Floor&lt;/a&gt;  &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/04/06/now-witness-the-power-of-this-fully-operational-feedback-loop.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Cloud-Will-Kill-the-Need-for-Configurati_95C2/Document-icon_70567905-b4a2-48cd-b5f1-3edebf4f5cf0.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/06/13/it-as-a-service-a-stateless-infrastructure-architecture-model.aspx"&gt;IT as a Service: A Stateless Infrastructure Architecture Model&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/04/06/now-witness-the-power-of-this-fully-operational-feedback-loop.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Cloud-Will-Kill-the-Need-for-Configurati_95C2/Document-icon_0fff0b89-a267-4c86-9d01-0ee95cefe61e.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/09/08/you-canrsquot-have-it-as-a-service-until-it-has.aspx"&gt;You Can’t Have IT as a Service Until IT Has Infrastructure as a Service&lt;/a&gt;  &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/04/06/now-witness-the-power-of-this-fully-operational-feedback-loop.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Cloud-Will-Kill-the-Need-for-Configurati_95C2/Document-icon_70567905-b4a2-48cd-b5f1-3edebf4f5cf0.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/07/01/f5-friday-eliminating-the-blind-spot-in-your-data-center.aspx"&gt;F5 Friday: Eliminating the Blind Spot in Your Data Center Security Strategy&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/04/06/now-witness-the-power-of-this-fully-operational-feedback-loop.aspx"&gt;&lt;img title="Document-icon" border="0" alt="Document-icon" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Cloud-Will-Kill-the-Need-for-Configurati_95C2/Document-icon_70567905-b4a2-48cd-b5f1-3edebf4f5cf0.png" width="16" height="16" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/rhaynes/archive/2011/06/10/the-uk-cookie-law-ndash-ltplace-your-own-bad-pun.aspx"&gt;The UK Cookie Law – &amp;lt;place your own bad pun here&amp;gt;  &lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;hr color="#808080" width="100%" noshade="noshade" /&gt;     &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:19f04e1f-768d-4f76-be63-b53b96609261" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/security" rel="tag"&gt;security&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web+application+security" rel="tag"&gt;web application security&lt;/a&gt;,&lt;a href="http://technorati.com/tags/compliance" rel="tag"&gt;compliance&lt;/a&gt;,&lt;a href="http://technorati.com/tags/regulation" rel="tag"&gt;regulation&lt;/a&gt;,&lt;a href="http://technorati.com/tags/cookie" rel="tag"&gt;cookie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/cookie+gateway" rel="tag"&gt;cookie gateway&lt;/a&gt;,&lt;a href="http://technorati.com/tags/encryption" rel="tag"&gt;encryption&lt;/a&gt;,&lt;a href="http://technorati.com/tags/dynamic+infrastructure" rel="tag"&gt;dynamic infrastructure&lt;/a&gt;,&lt;a href="http://technorati.com/tags/UK" rel="tag"&gt;UK&lt;/a&gt;,&lt;a href="http://technorati.com/tags/network-side+scripting" rel="tag"&gt;network-side scripting&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/1096412.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lori MacVittie</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/macvittie/archive/2011/09/14/cookies-as-a-service.aspx</guid>
            <pubDate>Wed, 14 Sep 2011 10:04:10 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/1096412.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/macvittie/archive/2011/09/14/cookies-as-a-service.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/1096412.aspx</wfw:commentRss>
            <trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/1096412.aspx</trackback:ping>
        </item>
        <item>
            <title>F5 Friday: Zero-Day Apache Exploit? Zero-Problem</title>
            <link>http://devcentral.f5.com/weblogs/macvittie/archive/2011/08/26/f5-friday-zero-day-apache-exploit-zero-problem.aspx</link>
            <description>&lt;p&gt;#infosec A recently discovered 0-day Apache exploit is no problem for &lt;a href="http://www.f5.com/products/big-ip/"&gt;BIG-IP&lt;/a&gt;. Here’s a couple of different options using &lt;a target="_blank" rel="" href="http://www.f5.com/" title="F5 Networks"&gt;F5&lt;/a&gt; solutions to secure your site against it. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Zero-Day-Apache-Exploit-Zero-_2994/f5friday_2.png"&gt;&lt;img width="240" height="86" border="0" align="left" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Zero-Day-Apache-Exploit-Zero-_2994/f5friday_thumb.png" alt="f5friday" title="f5friday" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It’s called “Apache Killer” and it’s yet another example of exploiting not a vulnerability, but a protocol’s behavior.  &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight: bold;"&gt;UPDATE &lt;/span&gt;(8/26/2011) &lt;span style="background-color: rgb(255, 255, 0);"&gt;We're hearing that other Range-* HTTP headers are &lt;/span&gt;&lt;a href="http://lwn.net/Articles/456513/" style="background-color: rgb(255, 255, 0);"&gt;also vulnerable.&lt;/a&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt; Take care to secure against these potential attack vectors as well!&lt;/span&gt; &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;In this case, the target is Apache and the “vulnerability” is in the way multiple ranges are handled by the Apache HTTPD server. The RANGE HTTP header is used to request one or more sub-ranges of the response, instead of the entire response entity. Ranges are sometimes used by thin clients (an example given was an eReader) that are memory constrained and may want to display just portions of the web page.  Generally speaking, multiple byte ranges are not used very often.&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Zero-Day-Apache-Exploit-Zero-_2994/image_2.png"&gt;&lt;img width="300" height="199" border="0" align="right" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Zero-Day-Apache-Exploit-Zero-_2994/image_thumb.png" alt="image" title="image" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35"&gt;RFC 2616 Section 14.35.2&lt;/a&gt; (Range retrieval request) explains: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_start_quote_rb.gif"&gt;&lt;img width="24" height="13" border="0" align="left" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_start_quote_rb.gif" alt="quote-badge" title="quote-badge" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt; HTTP retrieval requests using conditional or unconditional GET methods MAY request one or more sub-ranges of the entity, instead of the entire entity, using the Range request header, which applies to the entity returned as the result of the request:&lt;/p&gt;
&lt;pre&gt;      Range = "Range" ":" ranges-specifier&lt;/pre&gt;
&lt;p&gt;A server MAY ignore the Range header. However, HTTP/1.1 origin servers and intermediate caches ought to support byte ranges when possible, since Range supports efficient recovery from partially failed transfers, and supports efficient partial retrieval of large entities.&lt;img src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_end_quote_rb.gif" alt="" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The attack is simple. It’s a simple HTTP request with lots – and lots – of ranges. While this example uses the HEAD method, it can also be used with a GET. &lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;  HEAD / HTTP/1.1 Host:xxxx  Range:bytes=0-,5-1,5-2,5-3,…&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;According to researchers testing the vulnerability, a successful attack requires a “modest” number of requests. &lt;/p&gt;
&lt;h3&gt;&lt;font color="#c0504d"&gt;&lt;font style="font-weight: bold"&gt;BIG-IP SOLUTIONS &lt;/font&gt;&lt;/font&gt;&lt;/h3&gt;
&lt;p&gt;There are several options to prevent this attack using BIG-IP solutions. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Zero-Day-Apache-Exploit-Zero-_2994/1_2.jpg"&gt;&lt;img width="50" height="68" border="0" align="left" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Zero-Day-Apache-Exploit-Zero-_2994/1_thumb.jpg" alt="1" title="1" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;&lt;font style="font-weight: bold"&gt;HEADER SANITIZATION &lt;/font&gt;&lt;/h4&gt;
&lt;p&gt;First, you can modify the HTTP profile to simply remove the Range header. HTTP header removal – and replacement – is a common means of manipulating request and response headers as a means to “fix” broken applications, clients, or enable other functionality. This is a form of header sanitization, used typically to remove non-compliant header values that may or may not be malicious, but are undesirable. The Apache suggestion is to remove any Range header with 5 or more values. &lt;/p&gt;
&lt;p&gt;Note that this could itself break clients whose functionality expects a specific data set as specified by the RANGE header. As it is a rarely used header it is unlikely to impact clients adversely, but caution is always advised. Collaborate with developers and understand the implications before arbitrarily removing HTTP headers that may be necessary to application functionality. &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Zero-Day-Apache-Exploit-Zero-_2994/2_2.jpg"&gt;&lt;img width="50" height="63" border="0" align="left" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Zero-Day-Apache-Exploit-Zero-_2994/2_thumb.jpg" alt="2" title="2" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;&lt;font style="font-weight: bold"&gt;HEADER VALUE SCRUBBING &lt;/font&gt;&lt;/h4&gt;
&lt;p&gt;You can also use an &lt;a href="http://devcentral.f5.com/iRules"&gt;iRule&lt;/a&gt; to scrub the headers. By inspecting and thus detecting large numbers of ranges in the RANGE header, you can subsequently handle the request based on your specific needs. Possible reactions include removal of the header, rejection of the request, redirection to a honey pot, or replacement of the header. &lt;/p&gt;
&lt;p&gt;Sample iRule code (always test before deploying into production!) &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;when HTTP_REQUEST {&lt;/p&gt;
&lt;p&gt;    # remove Range requests for CVE-2011-3192 if more than 5 ranges are requested&lt;/p&gt;
&lt;p&gt;    if { [HTTP::header "Range"] matches_regex {bytes=(([0-9\- ])+,){5,}} } { &lt;/p&gt;
&lt;p&gt;        HTTP::header remove Range&lt;/p&gt;
&lt;p&gt;    }&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Again, changing an HTTP header may have negative consequences on the functionality of the application and/or client, so tread carefully. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Zero-Day-Apache-Exploit-Zero-_2994/3_4.jpg"&gt;&lt;img width="50" height="62" border="0" align="left" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Zero-Day-Apache-Exploit-Zero-_2994/3_thumb_1.jpg" alt="3" title="3" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;&lt;font style="font-weight: bold"&gt;BIG-IP ASM ATTACK SIGNATURE &lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Zero-Day-Apache-Exploit-Zero-_2994/clip_image002_2.jpg"&gt;&lt;img width="533" height="304" border="0" align="right" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Zero-Day-Apache-Exploit-Zero-_2994/clip_image002_thumb.jpg" alt="clip_image002" title="clip_image002" style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px 0px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/h4&gt;
&lt;p&gt;Another method of mitigation using BIG-IP solutions is to use a &lt;a href="http://www.f5.com/products/big-ip/application-security-manager.html"&gt;BIG-IP Application Security Manager (ASM)&lt;/a&gt; attack signature to detect and act upon an attack using this technique. The signature to add looks like: &lt;/p&gt;
&lt;p&gt;&lt;em&gt;pcre:"/Range:[\t ]*bytes=(([0-9\- ])+,){5,}/Hi"; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;It is important to be aware of this exploit and how it works, as it is likely that once it is widely mitigated, attacks will begin (if they already are not) to explore the ways in which this header can be exploited. There are multiple “range” style headers, any of which may be vulnerable to similar exploitation, so it may be time to consider your current security strategy and determine whether the field of potential exploitable headers is such that a more negative approach (default deny unless specifically allowed) may be required to secure against future DoS attacks targeting HTTP headers. &lt;/p&gt;
&lt;p&gt;There are also alternative solutions available already, including &lt;a href="http://blog.spiderlabs.com/2011/08/mitigation-of-apache-range-header-dos-attack.html"&gt;this writeup from SpiderLabs&lt;/a&gt; with a link to an OWASP mod_security rule file for mitigations. &lt;/p&gt;
&lt;p&gt;Stay safe out there! &lt;/p&gt;
&lt;hr width="100%" noshade="noshade" color="#808080" /&gt;
&lt;center&gt;
&lt;table width="308" cellspacing="0" cellpadding="2" border="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td width="168" valign="top"&gt;Connect with Lori: &lt;/td&gt;
            &lt;td width="138" valign="top"&gt;Connect with F5: &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td width="168" valign="top"&gt;&lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img width="24" height="24" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_linkedin.png" alt="o_linkedin[1]" title="o_linkedin[1]" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt; &lt;a href="https://plus.google.com/110169987847611210070"&gt;&lt;img width="24" height="24" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Why-Cant-We-Have-Nice-Things-Too_37AC/google+_3.jpg" alt="google " title="google " style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/f5/macv"&gt;&lt;img width="24" height="24" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_rss.png" alt="o_rss[1]" title="o_rss[1]" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt; &lt;a href="http://www.facebook.com/lmacvittie"&gt;&lt;img width="24" height="24" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_facebook.png" alt="o_facebook[1]" title="o_facebook[1]" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt; &lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img width="24" height="24" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_twitter.png" alt="o_twitter[1]" title="o_twitter[1]" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt; &lt;/td&gt;
            &lt;td width="138" valign="top"&gt; &lt;a href="http://bitly.com/nIsT1z?r=bb"&gt;&lt;img width="24" height="24" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_facebook.png" alt="o_facebook[1]" title="o_facebook[1]" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/ne6W2R?r=bb"&gt;&lt;img width="24" height="24" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_twitter.png" alt="o_twitter[1]" title="o_twitter[1]" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/nx3XV1?r=bb/"&gt;&lt;img width="24" height="24" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_slideshare.png" alt="o_slideshare[1]" title="o_slideshare[1]" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/reFTmf?r=bb"&gt;&lt;img width="24" height="24" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_youtube.png" alt="o_youtube[1]" title="o_youtube[1]" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/center&gt;
&lt;p align="center"&gt;&lt;a href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1=" title="Subscribe using any feed reader!"&gt;&lt;img width="125" height="18" border="0" src="http://s9.addthis.com/button1-fd.gif" alt="AddThis Feed Button" /&gt;&lt;/a&gt; &lt;a target="_blank" href="http://www.addthis.com/bookmark.php" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" title="Bookmark and Share"&gt;&lt;img width="125" height="18" border="0" src="http://s9.addthis.com/button1-share.gif" alt="Bookmark and Share" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://apache.slashdot.org/story/11/08/24/2213201/Apache-Warns-Web-Server-Admins-of-DoS-Attack-Tool"&gt;&lt;img width="16" height="16" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Zero-Day-Apache-Exploit-Zero-_2994/Document-icon_14ef5da3-a793-4c36-a1a0-37ba096bf0a0.png" alt="Document-icon" title="Document-icon" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" /&gt; Apache Warns Web Server Admins of DoS Attack Tool&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a href="http://apache.slashdot.org/story/11/08/24/2213201/Apache-Warns-Web-Server-Admins-of-DoS-Attack-Tool"&gt;&lt;img width="16" height="16" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Zero-Day-Apache-Exploit-Zero-_2994/Document-icon_8a00298e-d99f-45f7-a25d-15933165a7be.png" alt="Document-icon" title="Document-icon" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" /&gt; &lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/12/16/the-many-faces-of-ddos-variations-on-a-theme-or.aspx"&gt;The Many Faces of DDoS: Variations on a Theme or Two&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a href="http://apache.slashdot.org/story/11/08/24/2213201/Apache-Warns-Web-Server-Admins-of-DoS-Attack-Tool"&gt;&lt;img width="16" height="16" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Zero-Day-Apache-Exploit-Zero-_2994/Document-icon_246d913e-7d06-46ae-aa03-cf6c6f73e32a.png" alt="Document-icon" title="Document-icon" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" /&gt; &lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/12/27/how-to-limit-uri-length-without-recompiling-apache.aspx"&gt;How To Limit URI Length Without Recompiling Apache&lt;/a&gt;  &lt;/li&gt;
    &lt;li&gt;&lt;a href="http://apache.slashdot.org/story/11/08/24/2213201/Apache-Warns-Web-Server-Admins-of-DoS-Attack-Tool"&gt;&lt;img width="16" height="16" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Zero-Day-Apache-Exploit-Zero-_2994/Document-icon_e4501fd1-5bb3-48fb-bd94-bc8d7c089a9c.png" alt="Document-icon" title="Document-icon" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" /&gt; &lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/12/17/f5-friday-multi-layer-security-for-multi-layer-attacks.aspx"&gt;F5 Friday: Multi-Layer Security for Multi-Layer Attacks&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a href="http://apache.slashdot.org/story/11/08/24/2213201/Apache-Warns-Web-Server-Admins-of-DoS-Attack-Tool"&gt;&lt;img width="16" height="16" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Zero-Day-Apache-Exploit-Zero-_2994/Document-icon_f91fcd8d-d0e4-4274-ab4c-213465dbccf3.png" alt="Document-icon" title="Document-icon" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" /&gt; &lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/10/01/f5-friday-mitigating-the-lsquopadding-oraclersquo-exploit-for-asp.net.aspx"&gt;F5 Friday: Mitigating the ‘Padding Oracle’ Exploit for ASP.NET&lt;/a&gt;  &lt;/li&gt;
    &lt;li&gt;&lt;a href="http://apache.slashdot.org/story/11/08/24/2213201/Apache-Warns-Web-Server-Admins-of-DoS-Attack-Tool"&gt;&lt;img width="16" height="16" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Zero-Day-Apache-Exploit-Zero-_2994/Document-icon_223b14eb-7ebc-4156-8e00-9a7185d5b9e1.png" alt="Document-icon" title="Document-icon" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" /&gt; &lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/04/01/f5-friday-the-art-of-efficient-defense.aspx"&gt;F5 Friday: The Art of Efficient Defense&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a href="http://apache.slashdot.org/story/11/08/24/2213201/Apache-Warns-Web-Server-Admins-of-DoS-Attack-Tool"&gt;&lt;img width="16" height="16" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Zero-Day-Apache-Exploit-Zero-_2994/Document-icon_4320e964-dc3c-4348-9431-848947d5fde5.png" alt="Document-icon" title="Document-icon" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" /&gt; &lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/08/22/dynamic-infrastructure-security.aspx"&gt;The Infrastructure 2.0–Security Connection&lt;/a&gt;  &lt;/li&gt;
    &lt;li&gt;&lt;a href="http://apache.slashdot.org/story/11/08/24/2213201/Apache-Warns-Web-Server-Admins-of-DoS-Attack-Tool"&gt;&lt;img width="16" height="16" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-Zero-Day-Apache-Exploit-Zero-_2994/Document-icon_c6961b5b-5838-4d77-955c-3eadb4fba7be.png" alt="Document-icon" title="Document-icon" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" /&gt; &lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/07/01/f5-friday-eliminating-the-blind-spot-in-your-data-center.aspx"&gt;F5 Friday: Eliminating the Blind Spot in Your Data Center Security Strategy&lt;/a&gt;  &lt;/li&gt;
&lt;/ul&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:09293d72-fb3e-4660-a608-033a4743f503" style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px"&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/F5"&gt;F5&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/F5+Friday"&gt;F5 Friday&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/MacVittie"&gt;MacVittie&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Apache"&gt;Apache&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/exploit"&gt;exploit&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Range"&gt;Range&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/HTTP"&gt;HTTP&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/security"&gt;security&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/web+application+firewall"&gt;web application firewall&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/BIG-IP+ASM"&gt;BIG-IP ASM&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/iRules"&gt;iRules&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/1096369.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lori MacVittie</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/macvittie/archive/2011/08/26/f5-friday-zero-day-apache-exploit-zero-problem.aspx</guid>
            <pubDate>Fri, 26 Aug 2011 15:21:32 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/1096369.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/macvittie/archive/2011/08/26/f5-friday-zero-day-apache-exploit-zero-problem.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/1096369.aspx</wfw:commentRss>
            <trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/1096369.aspx</trackback:ping>
        </item>
        <item>
            <title>F5 Friday: If Only the Odds of a Security Breach were the Same as Being Hit by Lightning</title>
            <link>http://devcentral.f5.com/weblogs/macvittie/archive/2011/08/19/f5-friday-if-only-the-odds-of-a-security-breach.aspx</link>
            <description>&lt;p&gt;#v11 &lt;em&gt;AJAX, JSON and an ever increasing web application spread increase the odds of succumbing to a breach. BIG-IP ASM v11 reduces those odds, making it more likely you’ll win at the security table &lt;/em&gt;&lt;/p&gt;
&lt;p style="font-weight: bold;"&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-AJAX-JSON-and_65E2/f5friday_2.png"&gt;&lt;img width="240" height="86" border="0" align="left" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-AJAX-JSON-and_65E2/f5friday_thumb.png" alt="f5friday" title="f5friday" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When we use analogy often enough it becomes pervasive, to the point of becoming an idiom. One such idiom is the expression of unlikelihood of an event by comparing it to being hit by lightning. The irony is that the odds of being hit by lightning are actually fairly significant – about &lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-AJAX-JSON-and_65E2/image_2.png"&gt;&lt;img width="338" height="390" border="0" align="right" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-AJAX-JSON-and_65E2/image_thumb.png" alt="image" title="image" style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" /&gt;&lt;/a&gt;1:576,000. Too many organizations view their risk of a breach as bring akin to being hit by lightning because they’re small, or don’t have a global presence or what have you. The emergence years ago of “mass” web attacks rendered – or should have rendered - such arguments ineffective. Given the increasing number of web transactions on the Internet and the success of web-based attacks to enact a breach, even comparing the risk to the odds of being hit by lightning does little but prove that eventually, you’re going to get hit. &lt;/p&gt;
&lt;strong&gt;  &lt;/strong&gt;
&lt;p&gt;Research by &lt;a href="http://research.zscaler.com/2011/01/web-transactions-per-user-per-day.html"&gt;ZScaler earlier this year&lt;/a&gt; indicated an average (median) number of web transactions per day, per user at 1912. Analysts put the number of Internet users at about two billion. That translates into more than three trillion web transactions &lt;em&gt;per day&lt;/em&gt;. Every day, three trillion transactions are flying around the web. Based on the odds of being hit by lightning, that means over 6 million of those transactions would breach an organization. &lt;/p&gt;
&lt;strong&gt;  &lt;/strong&gt;
&lt;p&gt;The odds suddenly aren’t looking as good as they might seem, are they? If you think that’s bad, you ain’t read the most recent Ponemon results, which &lt;a href="http://links.f5.com/v11-2"&gt;recently concluded that the odds of being breached&lt;/a&gt; in the next year were a “statistical certainty.”  &lt;/p&gt;
&lt;strong&gt;  &lt;/strong&gt;
&lt;p&gt;No, it’s not paranoia if they really are out to get you and guess what? Apparently they are out to get you. &lt;/p&gt;
&lt;strong&gt;  &lt;/strong&gt;
&lt;p&gt;Truth be told, I’m not entirely convinced of the certainty of a breach because it assumes precautionary measures and behavior is not modified in the face of such a dire prediction. If organizations were to say, change their strategy as a means to get better odds, then the only statistical certainty would likely be that a breach would be attempted – but not necessarily be successful. &lt;/p&gt;
&lt;strong&gt;  &lt;/strong&gt;&lt;strong&gt;
&lt;p&gt;&lt;span style="font-weight: normal;"&gt;The bad news is that even if you have protections in place, the bad guys methods are evolving. If your primary means of protection are internal to your applications, the possibility remains that a new attack will require a rewrite – and redeployment. And even if you are taking advantage of external protection such as a &lt;/span&gt;&lt;a rel="" href="http://www.f5.com/glossary/web-application-firewall.html" title="" style="font-weight: normal;"&gt;web application firewall&lt;/a&gt;&lt;span style="font-weight: normal;"&gt; like &lt;/span&gt;&lt;a href="http://www.f5.com/products/big-ip/application-security-manager.html" style="font-weight: normal;"&gt;BIG-IP ASM (Application Security Manager)&lt;/a&gt; it’s possible that it hasn’t provided complete coverage or accounted for what are misconfiguration errors: typographical case-sensitivity errors that can effectively erode protections. &lt;/p&gt;
&lt;/strong&gt;
&lt;p&gt;The good news is that even as the bad guys are evolving, so too are those external protective mechanisms like BIG-IP ASM. BIG-IP ASM v11 introduced significant enhancements that provide better protection for emerging development format standards as well as address those operational oops that can leave an application vulnerable to being breached. &lt;/p&gt;
&lt;strong&gt;
&lt;h4&gt;&lt;font color="#c0504d"&gt;&lt;font style="font-weight: bold"&gt;BIG-IP v11 Enhancements &lt;/font&gt;&lt;/font&gt;&lt;/h4&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;AJAX and JSON Support   &lt;br /&gt;
    &lt;/strong&gt;&lt;span style="font-weight: normal;"&gt;AJAX growth over the past few years have established it as the status quo for building interactive web applications. Increasingly these interaction exchanges via AJAX use JSON as their preferred data format of choice. Previous versions of BIG-IP ASM were unable to properly parse and therefore secure JSON payloads.       &lt;/span&gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;span style="font-weight: normal;"&gt;A secondary issue with AJAX is related to the blocking pages generally returned by web application firewalls. For example, a BIG-IP ASM blocking page is HTML-based. When an AJAX embedded control triggers a policy violation, this means it can't present the blocking page because it doesn't expect to receive back HTML – it expects JSON. This leaves operators in the dark as it makes troubleshooting AJAX issues very difficult.       &lt;/span&gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;span style="font-weight: normal;"&gt;To address both these issues, BIG-IP ASM v11 can now parse JSON payloads and enforce proper security policies. This is advantageous not only for protecting AJAX-exchanged payloads, but for managing integration via JSON-based APIs from external sources. Being able to secure what is essentially third-party content  is paramount to ensuring a positive security posture regardless of external providers’ level of security. BIG-IP ASM v11 can also now also display a blocking page by injecting JavaScript into the response that will popup a window with a support ID, traceable by operators for easier troubleshooting. The ability to display a blocking page and ID is unique to BIG-IP ASM v11.       &lt;/span&gt;&lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Case Insensitivity        &lt;br /&gt;
    &lt;/strong&gt;&lt;span style="font-weight: normal;"&gt;Case sensitivity in general is derived from the underlying web server OS. While having a case sensitivity policy is an advantage on Unix/Linux platforms it can be painful to manage on other platforms. This is due to the fact that many times developers will write code without considering sensitivity. For example, a web server configured to serve a single file type, “html”, may also need to configure Html, hTml, HTml, etc… because a developer may have fat-fingered links in the code with these typographical errors. On Windows platforms, this is not a problem for the application, but it becomes an issue for the web application firewall because it is sensitive to case necessarily. BIG-IP ASM v11 now includes a simple checkbox-style flag that indicates it should ignore case, making it more adaptable to Windows-based platforms in which case may be variable. This is important in reducing false positives – situations where the security device thinks a request is malicious but in reality it is not. As web application firewalls generally contain very granular, URI-level policies to better protect against injection-style attacks, they often flag case differences as being “errors” or “possible attacks.” If configured to block such requests, the web application firewall would incorrectly reject requests for pages or URIs with case differences caused by typographical errors. This enhancement allows operators to ignore case and focus on securing the payload.       &lt;/span&gt;&lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;BIG-IP ASM VE&lt;/strong&gt;       &lt;br /&gt;
    &lt;br /&gt;
    &lt;span style="font-weight: normal;"&gt;BIG-IP ASM is now available in a virtual form-factor, ASM VE. A virtual form-factor makes it easier to evaluate and test in lab environments, as well as enabling developers to assist in troubleshooting when vulnerabilities or issues arise that involve the application directly. Virtual patching, as well, is better enabled by a virtual form factor, as is the ability to deploy remotely in &lt;/span&gt;&lt;a rel="" href="http://www.f5.com/solutions/cloud-computing" title="" style="font-weight: normal;"&gt;cloud computing &lt;/a&gt; environments.  &lt;/li&gt;
&lt;/ul&gt;
&lt;/strong&gt;
&lt;p&gt;There is no solution short of a scissors that can reduce your risk of breach to 0. But there are solutions that can reduce that risk to a more acceptable level, and one of those solutions is BIG-IP ASM. Getting hit by lightning on the Internet is a whole lot more likely than the idiom makes it sound, and anything that can reduce the odds is worth investigating sooner rather than later. &lt;/p&gt;
&lt;strong&gt;
&lt;h4&gt;&lt;font color="#c0504d"&gt;&lt;font style="font-weight: bold"&gt;More BIG-IP ASM v11 Resources: &lt;/font&gt;&lt;/font&gt;&lt;/h4&gt;
&lt;/strong&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://www.f5.com/pdf/white-papers/asm-cloud-app-security-wp.pdf"&gt;&lt;img width="16" height="16" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-AJAX-JSON-and_65E2/pdf-icon_0ad1d36a-91cf-40ea-a851-d6a17b1b4f33.png" alt="pdf-icon" title="pdf-icon" style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" /&gt; Application Security in the Cloud with BIG-IP ASM&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.f5.com/pdf/white-papers/asm-cloud-app-security-wp.pdf"&gt;&lt;img width="16" height="16" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-AJAX-JSON-and_65E2/pdf-icon_f26fbf1e-adbb-471f-bef8-f9a471fc8cf3.png" alt="pdf-icon" title="pdf-icon" style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" /&gt;&lt;/a&gt; &lt;a href="http://www.f5.com/pdf/solution-profiles/asm-security-ajax-json-sp.pdf"&gt;Securing JSON and AJAX Messages with F5 BIG-IP ASM&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.f5.com/news-press-events/press/2011/20110725a.html"&gt;&lt;img width="16" height="14" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday--on-a-Monday_510F/f5-red-lg_de5f8a3e-d166-4c1f-bbed-52369049c1f8.jpg" alt="f5-red-lg" title="f5-red-lg" /&gt;&lt;/a&gt; &lt;a href="http://www.f5.com/products/big-ip/application-security-manager.html"&gt;BIG-IP Application Security Manager Page&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/psilva/archive/2011/08/15/audio-white-paper-application-security-in-the-cloud-with.aspx"&gt;&lt;img width="16" height="16" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday-AJAX-JSON-and_65E2/webcast_icon2_029fff91-1963-41cd-ab12-82f5978db37f.png" alt="webcast_icon2" title="webcast_icon2" style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" /&gt;Audio White Paper - Application Security in the Cloud with BIG-IP ASM&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;strong&gt;  &lt;hr width="100%" noshade="noshade" color="#808080" /&gt;
&lt;center&gt;
&lt;table width="308" cellspacing="0" cellpadding="2" border="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td width="168" valign="top"&gt;Connect with Lori: &lt;/td&gt;
            &lt;td width="138" valign="top"&gt;Connect with &lt;a target="_blank" rel="" href="http://www.f5.com/" title="F5 Networks"&gt;F5&lt;/a&gt;: &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td width="168" valign="top"&gt;&lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img width="24" height="24" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_linkedin.png" alt="o_linkedin[1]" title="o_linkedin[1]" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt; &lt;a href="https://plus.google.com/110169987847611210070"&gt;&lt;img width="24" height="24" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Why-Cant-We-Have-Nice-Things-Too_37AC/google+_3.jpg" alt="google " title="google " style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/f5/macv"&gt;&lt;img width="24" height="24" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_rss.png" alt="o_rss[1]" title="o_rss[1]" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt; &lt;a href="http://www.facebook.com/lmacvittie"&gt;&lt;img width="24" height="24" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_facebook.png" alt="o_facebook[1]" title="o_facebook[1]" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt; &lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img width="24" height="24" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_twitter.png" alt="o_twitter[1]" title="o_twitter[1]" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt; &lt;/td&gt;
            &lt;td width="138" valign="top"&gt; &lt;a href="http://bitly.com/nIsT1z?r=bb"&gt;&lt;img width="24" height="24" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_facebook.png" alt="o_facebook[1]" title="o_facebook[1]" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/ne6W2R?r=bb"&gt;&lt;img width="24" height="24" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_twitter.png" alt="o_twitter[1]" title="o_twitter[1]" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/nx3XV1?r=bb/"&gt;&lt;img width="24" height="24" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_slideshare.png" alt="o_slideshare[1]" title="o_slideshare[1]" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt; &lt;a href="http://bitly.com/reFTmf?r=bb"&gt;&lt;img width="24" height="24" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/1086440/o_youtube.png" alt="o_youtube[1]" title="o_youtube[1]" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/center&gt;
&lt;p align="center"&gt;&lt;a href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1=" title="Subscribe using any feed reader!"&gt;&lt;img width="125" height="18" border="0" src="http://s9.addthis.com/button1-fd.gif" alt="AddThis Feed Button" /&gt;&lt;/a&gt; &lt;a target="_blank" href="http://www.addthis.com/bookmark.php" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" title="Bookmark and Share"&gt;&lt;img width="125" height="18" border="0" src="http://s9.addthis.com/button1-share.gif" alt="Bookmark and Share" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;
&lt;/strong&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/10/22/wils-why-does-load-balancing-improve-application-performance.aspx"&gt;&lt;img width="16" height="16" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Load-Balancing-Fu-Beware-the-Algorithm-a_30F5/Document-icon_36a49430-28c2-4f6a-a23c-29e3173e60b1.png" alt="Document-icon" title="Document-icon" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/07/29/f5-friday-you-will-appsolutely-love-v11.aspx"&gt;F5 Friday: You Will Appsolutely Love v11&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/10/22/wils-why-does-load-balancing-improve-application-performance.aspx"&gt;&lt;img width="16" height="16" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/Load-Balancing-Fu-Beware-the-Algorithm-a_30F5/Document-icon_36a49430-28c2-4f6a-a23c-29e3173e60b1.png" alt="Document-icon" title="Document-icon" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/okatz/archive/2011/08/11/sql-injection-ndash-past-present-and-future.aspx"&gt;SQL injection – past, present and future&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/f5news/archive/2011/07/25/able-infrastructure-the-next-generation-ndash-introducing-v11.aspx"&gt;&lt;img width="16" height="16" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday--on-a-Monday_510F/Document-icon_73bfc8e6-6d08-4710-896f-daf66d4b762c.png" alt="Document-icon" title="Document-icon" /&gt; Introducing v11: The Next Generation of Infrastructure&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.f5.com/news-press-events/press/2011/20110725a.html"&gt;&lt;img width="16" height="14" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday--on-a-Monday_510F/f5-red-lg_de5f8a3e-d166-4c1f-bbed-52369049c1f8.jpg" alt="f5-red-lg" title="f5-red-lg" /&gt;&lt;/a&gt; &lt;a href="http://www.f5.com/products/big-ip/v11.html"&gt;BIG-IP v11 Information Page&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/f5news/archive/2011/05/09/medium-is-the-new-large-in-enterprise.aspx"&gt;&lt;img width="16" height="16" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday_2B66/Document-icon_118a1f4d-4114-4f3a-a00c-25eb69a6d32a.png" alt="Document-icon" title="Document-icon" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/07/25/the-evolution-toward-it-as-a-service-continues-in-the.aspx"&gt;F5 Monday? The Evolution To IT as a Service Continues … in the Network&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/f5news/archive/2011/05/09/medium-is-the-new-large-in-enterprise.aspx"&gt;&lt;img width="16" height="16" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday_2B66/Document-icon_118a1f4d-4114-4f3a-a00c-25eb69a6d32a.png" alt="Document-icon" title="Document-icon" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/07/22/f5-friday-the-gap-that-become-a-chasm.aspx"&gt;F5 Friday: The Gap That become a Chasm&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/f5news/archive/2011/05/09/medium-is-the-new-large-in-enterprise.aspx"&gt;&lt;img width="16" height="16" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday_2B66/Document-icon_118a1f4d-4114-4f3a-a00c-25eb69a6d32a.png" alt="Document-icon" title="Document-icon" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/category/1084420.aspx"&gt;All F5 Friday Posts on DevCentral&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/f5news/archive/2011/05/09/medium-is-the-new-large-in-enterprise.aspx"&gt;&lt;img width="16" height="16" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/Windows-Live-Writer/F5-Friday_2B66/Document-icon_118a1f4d-4114-4f3a-a00c-25eb69a6d32a.png" alt="Document-icon" title="Document-icon" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/f5news/archive/2011/07/25/able-infrastructure-the-next-generation-ndash-introducing-v11.aspx"&gt;ABLE Infrastructure: The Next Generation – Introducing v11&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a179293d-5323-406c-bb5f-22a322ca1235" style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px"&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/F5"&gt;F5&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/F5+Friday"&gt;F5 Friday&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/MacVittie"&gt;MacVittie&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/security"&gt;security&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/web+application+security"&gt;web application security&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/web+application+firewall"&gt;web application firewall&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/JSON"&gt;JSON&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/HTTP"&gt;HTTP&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/AJAX"&gt;AJAX&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/virtualization"&gt;virtualization&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Web+2.0"&gt;Web 2.0&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/1096356.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lori MacVittie</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/macvittie/archive/2011/08/19/f5-friday-if-only-the-odds-of-a-security-breach.aspx</guid>
            <pubDate>Fri, 19 Aug 2011 10:43:48 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/1096356.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/macvittie/archive/2011/08/19/f5-friday-if-only-the-odds-of-a-security-breach.aspx#feedback</comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/1096356.aspx</wfw:commentRss>
            <trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/1096356.aspx</trackback:ping>
        </item>
    </channel>
</rss>
