<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Fiddler Web Debugger</title><link>http://blogs.msdn.com/b/fiddler/</link><description>Fiddler is a web debugging tool which is owned, developed, and distributed by Eric Lawrence.</description><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>Blog Closed: Fiddler now a part of the Telerik family</title><link>http://blogs.msdn.com/b/fiddler/archive/2012/09/10/10347815.aspx</link><pubDate>Mon, 10 Sep 2012 13:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10347815</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10347815</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2012/09/10/10347815.aspx#comments</comments><description>&lt;p&gt;Read more here &lt;a href="http://fiddler2.com/r/?telerik"&gt;http://fiddler2.com/r/?telerik&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Follow this link for &lt;a href="http://fiddler2.com/r/?FiddlerBlog"&gt;the new Fiddler blog&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10347815" width="1" height="1"&gt;</description></item><item><title>Visual Studio 2012, IIS Express, and Fiddler</title><link>http://blogs.msdn.com/b/fiddler/archive/2012/08/22/http-400-invalid-host-error-with-iis-express-and-urls-containing-ipv4.fiddler.aspx</link><pubDate>Wed, 22 Aug 2012 21:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10342514</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10342514</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2012/08/22/http-400-invalid-host-error-with-iis-express-and-urls-containing-ipv4.fiddler.aspx#comments</comments><description>&lt;p&gt;&lt;span style="color: #888888; background-color: #ffffff;"&gt;From the mail bag...&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q:&lt;/strong&gt;&lt;em&gt;When&amp;nbsp;I use IE10 on Windows 8 to visit&amp;nbsp;an IIS Express instance using the following URL&amp;nbsp;http://ipv4.fiddler:2468/, I get an unexpected error message. &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: courier new,courier;"&gt;HTTP/1.1 400 Bad Request&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new,courier;"&gt;Content-Type: text/html;&lt;/span&gt;&lt;span style="font-family: courier new,courier;"&gt;charset=us-ascii&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new,courier;"&gt;Server: Microsoft-HTTPAPI/2.0&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new,courier;"&gt;Date: Wed, 22 Aug 2012 &lt;/span&gt;&lt;span style="font-family: courier new,courier;"&gt;19:59:52 GMT&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new,courier;"&gt;Connection: close&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new,courier;"&gt;Content-Length: 334&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;lt;HTML&amp;gt;&amp;lt;HEAD&amp;gt;&amp;lt;TITLE&amp;gt;Bad Request&amp;lt;/TITLE&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;lt;META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"&amp;gt;&amp;lt;/HEAD&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;lt;BODY&amp;gt;&amp;lt;h2&amp;gt;&lt;span style="color: #ff0000;"&gt;Bad Request - Invalid Hostname&lt;/span&gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;lt;hr&amp;gt;&amp;lt;p&amp;gt;HTTP Error &lt;/span&gt;&lt;span style="font-family: courier new,courier;"&gt;400. &lt;span style="color: #ff0000;"&gt;&lt;strong&gt;The request hostname is invalid.&lt;span style="color: #000000;"&gt;&amp;lt;/&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;p&amp;gt;&amp;lt;/BODY&amp;gt;&amp;lt;/HTML&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;What's up with that?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; First, it's important to understand that you don&amp;rsquo;t need to use any special &amp;ldquo;.fiddler&amp;rdquo; addresses for Fiddler to capture local traffic&amp;nbsp;when using IE (&lt;a href="http://blogs.msdn.com/b/fiddler/archive/2011/02/10/fiddler-is-better-with-internet-explorer-9.aspx"&gt;since version 9&lt;/a&gt;). You only need to use those when your client is making&amp;nbsp;its HTTP requests using System.Net (e.g. HTTPWebRequest), which&amp;nbsp;unconditionally bypasses the proxy for&amp;nbsp;addresses it deems "local."&lt;/p&gt;
&lt;p&gt;Having said that, you'll find that the same request works if you use the address &lt;strong&gt;http://localhost.fiddler:2468/&lt;/strong&gt;. The reason that &lt;strong&gt;localhost.fiddler&lt;/strong&gt; works is that when Fiddler gets this URL, it sets the request's&amp;nbsp;&lt;strong&gt;Host&lt;/strong&gt; header to &amp;ldquo;&lt;strong&gt;localhost&lt;/strong&gt;&amp;rdquo; before passing it to the IIS Express server. If you instead use &lt;strong&gt;ipv6.fiddler &lt;/strong&gt;as the request URL's hostname, Fiddler sets the &lt;strong&gt;Host&lt;/strong&gt; header to &amp;ldquo;&lt;strong&gt;[::1]&lt;/strong&gt;&amp;rdquo;. If you use &lt;strong&gt;ipv4.fiddler&lt;/strong&gt;, Fiddler sets the &lt;strong&gt;Host &lt;/strong&gt;header to &amp;ldquo;&lt;strong&gt;127.0.0.1&lt;/strong&gt;&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;IIS Express only&amp;nbsp;expects the &amp;ldquo;&lt;strong&gt;localhost&lt;/strong&gt;&amp;rdquo; &lt;strong&gt;Host&lt;/strong&gt; header value&amp;nbsp;and returns the HTTP/400 for the &amp;ldquo;127.0.0.1&amp;rdquo; Host, saying, in effect &amp;ldquo;&lt;em&gt;I don&amp;rsquo;t have a website with that hostname.&lt;/em&gt;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;-Eric&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10342514" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Fiddler/">Fiddler</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/HowTo/">HowTo</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/interop/">interop</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Win8/">Win8</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Problems/">Problems</category></item><item><title>Update on Fiddler Telemetry</title><link>http://blogs.msdn.com/b/fiddler/archive/2012/08/04/fiddler-collects-real-world-dotnet-feature-usage-telemetry-using-redgate-smartassembly.aspx</link><pubDate>Sat, 04 Aug 2012 20:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10336900</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10336900</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2012/08/04/fiddler-collects-real-world-dotnet-feature-usage-telemetry-using-redgate-smartassembly.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;" size="3" face="Calibri"&gt;Back in October of last year, I &lt;a href="http://blogs.msdn.com/b/fiddler/archive/2011/10/07/news-on-fiddler-surveys-and-telemetry.aspx"&gt;blogged&lt;/a&gt; the results of some surveys and announced that some telemetry features would be added to the Fiddler beta builds. Now that 10 months have passed, I&amp;rsquo;ll provide an update on how things are going.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-family: Calibri; font-size: medium;" size="4" face="Calibri"&gt;&lt;span style="font-weight: bold;"&gt;SmartAssembly Telemetry&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;" size="3" face="Calibri"&gt;Microsoft products use the &lt;a href="https://www.microsoft.com/products/ceip/EN-US/default.mspx"&gt;Customer Experience Improvement Program&lt;/a&gt; (CEIP, sometimes called &lt;a href="http://msdn.microsoft.com/en-us/library/hh554414(v=prot.10)"&gt;SQM&lt;/a&gt;) to collect telemetry from customer computers so we can better understand the configuration of those PCs and how the software is being used. Unfortunately, unlike &lt;a href="http://en.wikipedia.org/wiki/Windows_Error_Reporting"&gt;Windows Error Reporting&lt;/a&gt; (sometimes called Watson) 3rd-party applications like Fiddler can&amp;rsquo;t participate in CEIP. Fortunately, as I &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: small;" size="3" face="Calibri"&gt;announced in October, I discovered an alternative. Since then, the &lt;a href="http://www.getfiddler.com/dl/Fiddler2BetaSetup.exe"&gt;beta builds&lt;/a&gt; of Fiddler have been instrumented using &lt;a href="http://www.red-gate.com/products/dotnet-development/smartassembly/"&gt;RedGate&amp;rsquo;s SmartAssembly&lt;/a&gt; tool. SmartAssembly contains a bunch of useful features, including obfuscation, automated error reporting, and the one&lt;sup&gt;&lt;span style="font-size: x-small;" size="2"&gt;1&lt;/span&gt;&lt;/sup&gt; Fiddler uses-- &lt;a href="http://www.red-gate.com/products/dotnet-development/smartassembly/learn-more/walkthroughs/walkthrough-feature-usage-reporting"&gt;feature usage reporting&lt;/a&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;" size="3" face="Calibri"&gt;I elected to instrument only the beta version to keep the amount of data collected to a reasonable size&amp;mdash;while only a small fraction of the overall user-base, the beta audience is large enough to be statistically significant for the entire Fiddler population. There&amp;rsquo;s probably a bit of a bias because Beta users tend to be more &amp;ldquo;Advanced&amp;rdquo; than the average users, but I expect the effect is slight. I probably &lt;em&gt;should &lt;/em&gt;change my strategy here to instead use a sampling percentage (e.g. 5% of users) but I haven&amp;rsquo;t found the need to do so thus far.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;" size="3" face="Calibri"&gt;A total of 31,000 beta users have opted-in to data collection; data collected from the Version Check webservice (described shortly) suggests that this is about 20% of the users of the beta. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;" size="3" face="Calibri"&gt;With just one call in Fiddler&amp;rsquo;s startup routine:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Courier New; font-size: small;" size="3" face="Courier New"&gt;&amp;nbsp; SmartAssembly.ReportUsage.PlatformData.ReportAll();&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;" size="3" face="Calibri"&gt;&amp;hellip;a set of basic information about the user&amp;rsquo;s environment is collected. The results were definitely interesting; more users than I had expected have .NET4 installed, while only a small percentage of users have multiple monitors. XP usage is still common, although Windows Vista and later account for 56 (and growing) percent&amp;nbsp;of the machines running Fiddler.&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/5826.image_5F00_6648E06F.png" width="444" height="340" /&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/8168.image_5F00_462DD3B2.png" width="351" height="315" /&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/7563.image_5F00_7825743C.png" width="260" height="259" /&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/2705.image_5F00_2A1D14C7.png" width="260" height="259" /&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/1200.image_5F00_1EF38A7D.png" width="290" height="161" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;" size="3" face="Calibri"&gt;Despite the fact that Fiddler itself is only available in English, a majority of Fiddler users run Fiddler on machines with a non-English locale (blue and purple are the US and Great Britain; all other colors are non-English):&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/5432.image_5F00_50EB2B07.png" width="287" height="304" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;" size="3" face="Calibri"&gt;This data should prove useful if I ever decide to translate Fiddler into other languages.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;" size="3" face="Calibri"&gt;While the environment information is useful, the most interesting information comes from feature usage reporting. Basic information, including the count of sessions-per-user-per-day and the Fiddler version, is captured automatically. Adding application-specific metrics is simple. &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: small;" size="3" face="Calibri"&gt;SmartAssembly offers two easy methods to instrument your code. First, you can add an attribute to any method and when that method is called, its counter will be incremented:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Courier New; font-size: x-small;" size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #if TELEMETRY &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [SmartAssembly.ReportUsage.ReportUsage] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endif &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// Show Fiddler's Options dialog &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [CodeDescription("Show the Fiddler Options dialog")] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void actShowOptions()&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;" size="3" face="Calibri"&gt;In some cases, you&amp;rsquo;ll want to capture events at a more granular level; in that case, just call the ReportUsage method with a string specifying the feature name:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Courier New; font-size: x-small;" size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #if TELEMETRY &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SmartAssembly.ReportUsage.UsageCounter.ReportUsage("FiddlerBoot"); &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;" size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (CONFIG.bIsBeta) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SmartAssembly.ReportUsage.UsageCounter.ReportUsage("IsBeta"); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;" size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;" size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endif&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;" size="3" face="Calibri"&gt;Feature usage reporting allows me to quickly see which features in Fiddler are most popular, as well as which features need to have their discoverability improved. For instance, I know which of Fiddler&amp;rsquo;s tabs are used in a session (AutoResponder tab is activated in 7 times as many sessions as the Composer), and which features are getting overlooked (Fiddler&amp;rsquo;s insanely powerful &lt;a href="http://www.fiddler2.com/fiddler/help/quickexec.asp"&gt;QuickExec feature&lt;/a&gt; gets used in only 1% of Sessions).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;" size="3" face="Calibri"&gt;By pairing the SmartAssembly telemetry data with surveys and &lt;a href="http://blogs.msdn.com/b/fiddler/archive/2010/05/07/the-fiddler-community.aspx"&gt;community&lt;/a&gt; feedback, a tiny team (i.e. me) can&amp;nbsp;prioritize improvements to maximize the benefits for&amp;nbsp;the tool's&amp;nbsp;huge user-base.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-family: Calibri;" face="Calibri"&gt;&lt;span style="font-size: medium; font-weight: bold;" size="4"&gt;Version Check Analysis&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;" size="3" face="Calibri"&gt;Of course, while rich telemetry is the most valuable, I&amp;rsquo;m also interested in getting some basic statistics from the entire userbase. &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: small;" size="3" face="Calibri"&gt;By default, when Fiddler starts, it pings a web service to see whether a new version is available. As a part of this request, the current Windows version and Fiddler version are provided so that the web service can check for a compatible upgrade. I picked a random day, August 1st, and analyzed the data. It appears that only about 66% of users are using the latest version of Fiddler, released on &lt;a href="http://www.fiddler2.com/Fiddler/changelog.asp#v2"&gt;June 23rd&lt;/a&gt;. Nearly a quarter of Fiddler users are using builds from the last two years, and about 4% of users are using truly ancient builds. 6% of the calls didn&amp;rsquo;t provide meaningful version information, either because the calls were fiddled (something that Fiddler is quite good at :-) or the builds were so old that the version information wasn&amp;rsquo;t present.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/4846.image_5F00_45C1A0BD.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/7178.image_5F00_thumb_5F00_49CBEE8F.png" width="304" height="251" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;" size="3" face="Calibri"&gt;It&amp;rsquo;s a little sad to see that so many users aren&amp;rsquo;t getting the maximum benefit out of the many hundreds of hours of investment made in Fiddler over the past two years. (Not to mention the hundreds of bugfixes!) If you&amp;rsquo;re running an older version of Fiddler, &lt;em&gt;please &lt;/em&gt;upgrade today. &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-family: Calibri; font-size: medium;" size="4" face="Calibri"&gt;&lt;span style="font-weight: bold;"&gt;Book Survey&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;" size="3" face="Calibri"&gt;In last fall's survey, just over a thousand Fiddler users indicated that they would buy a printed Fiddler book, and ~600 users indicated that they would purchase an E-Book on the topic. About 900 users said they&amp;rsquo;d read the EBook if it were free.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;" size="3" face="Calibri"&gt;The Fiddler book was completed in June and is &lt;a href="http://fiddlerbook.com"&gt;now available&lt;/a&gt; in paperback and DRM-less PDF format ($19 in paperback and $10 in PDF). The book turned out about 33% longer than I expected (it&amp;rsquo;s 330 pages) and has received good reviews. &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: small;" size="3" face="Calibri"&gt;Sales have been brisk, and while I haven&amp;rsquo;t yet surpassed the goals suggested by the survey, I&amp;rsquo;m pretty happy with the results from the first two months. Additionally, two international publishers have tendered proposals for translated versions (Korean and Chinese) and a third (Japanese) is under consideration but not yet committed. Unfortunately, my plan to make the book available for free borrowing via the Kindle Lending Library hit two snags: first, the book doesn't work well on the non-Fire Kindles (because images and source code don't reformat well in .epub/.mobi), and second, Amazon's terms for books in the lending library prohibit making the book available from &lt;em&gt;any other source &lt;/em&gt;in electronic form. That would preclude me offering the book to everyone&amp;nbsp;who prefers the&amp;nbsp;PDF format (which looks great on the iPad and PCs).&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;" size="3" face="Calibri"&gt;-Eric &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri;" face="Calibri"&gt;&lt;span style="font-size: x-small;" size="2"&gt;&lt;sup&gt;1 &lt;/sup&gt;Fiddler doesn&amp;rsquo;t use the obfuscation feature because most of the classes are chock full of public methods, properties, and fields which must be callable from FiddlerScript and Extensions. Similarly, Fiddler already included a (manual) exception-reporting feature, so I elected not to switch over to the SmartAssembly version.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10336900" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Internals/">Internals</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/feedback/">feedback</category></item><item><title>Find Proxy Authentication bugs with Fiddler</title><link>http://blogs.msdn.com/b/fiddler/archive/2012/08/03/find-proxy-authentication-bugs-with-fiddler.aspx</link><pubDate>Fri, 03 Aug 2012 18:27:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10336698</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10336698</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2012/08/03/find-proxy-authentication-bugs-with-fiddler.aspx#comments</comments><description>&lt;p&gt;Over on my other blog, I &lt;a href="http://blogs.msdn.com/b/ieinternals/archive/2012/08/03/manual-proxy-authentication-requiring-basic-or-digest-breaks-many-applications.aspx"&gt;just posted an article&lt;/a&gt; showing how you can use Fiddler to find bugs in applications that don't expect authenticating proxies.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10336698" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/debugging/">debugging</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/authentication/">authentication</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/http/">http</category></item><item><title>My book “Debugging with Fiddler”, is now available</title><link>http://blogs.msdn.com/b/fiddler/archive/2012/06/23/debugging-with-fiddler-book-now-available.aspx</link><pubDate>Sat, 23 Jun 2012 18:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10323240</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10323240</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2012/06/23/debugging-with-fiddler-book-now-available.aspx#comments</comments><description>&lt;p&gt;I&amp;rsquo;m delighted to announce that my new full-length book on Fiddler is now available. Weighing in at 330 pages, it covers every feature in Fiddler, and provides the most comprehensive available documentation of how to develop Fiddler extensions (including Inspectors, Transcoders, and IFiddlerExtensions) and build on the FiddlerCore class library. The book is available in paperback and DRM-free PDF formats.&lt;/p&gt;
&lt;p&gt;You can learn more about the book at &lt;a href="http://fiddlerbook.com"&gt;http://fiddlerbook.com&lt;/a&gt;. The site includes a link to the final &lt;a href="http://fiddler2.com/book/DWF-TOCAndSample.pdf"&gt;Table-of-Contents&lt;/a&gt;, as well as all of the code samples in the book.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/8461.Isolated_5F00_09D16533.jpg"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="Isolated" border="0" alt="Isolated" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/8484.Isolated_5F00_thumb_5F00_1BADF900.jpg" width="347" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thanks for your interest in Fiddler!&lt;/p&gt;
&lt;p&gt;-Eric&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10323240" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Announcements/">Announcements</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/FiddlerCore/">FiddlerCore</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Fiddler/">Fiddler</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/HowTo/">HowTo</category></item><item><title>.NET HTTPS connections timeout on SNI TLS Warning</title><link>http://blogs.msdn.com/b/fiddler/archive/2012/03/29/https-request-hangs-.net-application-connection-on-tls-server-name-indicator-warning.aspx</link><pubDate>Wed, 28 Mar 2012 23:54:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10288724</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10288724</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2012/03/29/https-request-hangs-.net-application-connection-on-tls-server-name-indicator-warning.aspx#comments</comments><description>&lt;p&gt;Recently, a handful of folks have emailed me complaining that some HTTPS sites cannot be reached by their .NET programs or from any program when Fiddler is configured to decrypt traffic. Notably, these users only have problems when running on Windows Vista or later.&lt;/p&gt;
&lt;p&gt;So, what&amp;rsquo;s going on?&lt;/p&gt;
&lt;p&gt;When I need to troubleshoot issues that occur below Fiddler, &lt;a href="http://fiddler2.com/r/?netmon"&gt;NetMon&lt;/a&gt; is a good choice. Taking a look at the HTTPS handshake, the problem is immediately apparent:&lt;/p&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="Netmon Screenshot showing 01 70 bytes" border="0" alt="Netmon Screenshot showing 01 70 bytes" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/3036.image_5F00_3E366031.png" width="1060" height="386" /&gt;&lt;/p&gt;
&lt;p&gt;This server is returning a &lt;a href="http://en.wikipedia.org/wiki/Transport_Layer_Security#Alert_protocol"&gt;TLS Encrypted Alert&lt;/a&gt; at the beginning of the handshake. The alert severity is 1 meaning &lt;span style="font-family: Courier New;" face="Courier New"&gt;WARNING&lt;/span&gt;, and the code is 112 (0x70) which is the &lt;span style="font-family: Courier New;" face="Courier New"&gt;unrecognized_name&lt;/span&gt; alert. With this alert, the server is indicating that it does not recognize the hostname provided by the server&amp;rsquo;s &lt;a href="http://blogs.msdn.com/b/ieinternals/archive/2009/12/07/certificate-name-mismatch-warnings-and-server-name-indication.aspx"&gt;Server Name Indication&lt;/a&gt; TLS extension. This warning is only encountered when the client is running on Windows Vista and later because the SChannel HTTPS stack on Windows XP doesn&amp;rsquo;t support SNI and other TLS extensions.&lt;/p&gt;
&lt;p&gt;The server&amp;rsquo;s behavior is explicitly not recommended according to the standards:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Courier New; font-size: x-small;" face="Courier New" size="2"&gt;If the server understood the ClientHello extension but &lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;" face="Courier New" size="2"&gt;does not recognize the server name, the server SHOULD take one of two &lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;" face="Courier New" size="2"&gt;actions: either abort the handshake by sending a fatal-level &lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;" face="Courier New" size="2"&gt;unrecognized_name(112) alert or continue the handshake. It is NOT RECOMMENDED to send a warning-level unrecognized_name(112) alert, because the client's behavior in response to warning-level alerts is unpredictable. If there is a mismatch between the server name used &lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;" face="Courier New" size="2"&gt;by the client application and the server name of the credential chosen by the server, this mismatch will become apparent when the client application performs the server endpoint identification, at which point the client application will have to decide whether to proceed with the communication.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The server&amp;rsquo;s behavior is problematic because the .NET Framework&amp;rsquo;s HTTPS implementation is unable to ignore this warning and it is not able to &lt;a href="http://blogs.msdn.com/b/ieinternals/archive/2009/12/08/aes-is-not-a-valid-cipher-for-sslv3.aspx"&gt;automatically &amp;ldquo;fail over&amp;rdquo;&lt;/a&gt; to an earlier protocol version, leading to a&amp;nbsp; lengthy delay (~80 seconds) before a connection failure in Fiddler or other .NET applications.&lt;/p&gt;
&lt;p&gt;To enable Fiddler to workaround sites with this problematic configuration, click &lt;strong&gt;Rules&lt;/strong&gt; &amp;gt; &lt;strong&gt;Customize Rules&lt;/strong&gt;. Scroll to the &lt;strong&gt;OnBeforeRequest&lt;/strong&gt; method and add the following block:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="color: #0000ff; font-family: Courier New; font-size: x-small;" face="Courier New" size="2" color="#0000ff"&gt;if (oSession.HTTPMethodIs("CONNECT") &amp;amp;&amp;amp; oSession.HostnameIs("BuggySite.com")) &lt;br /&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff; font-family: Courier New; font-size: x-small;" face="Courier New" size="2" color="#0000ff"&gt;&amp;nbsp; oSession["x-OverrideSslProtocols"] = "ssl3"; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;&lt;span style="font-family: Courier New; font-size: x-small;" face="Courier New" size="2"&gt;&amp;nbsp; FiddlerApplication.Log.LogString("Legacy compat applied for inbound request to BuggySite.com"); &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;" face="Courier New" size="2"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Save the script and this block will force Fiddler to handshake with the server using only the SSLv3 protocol, which does not send TLS extensions, avoiding the problem.&lt;/p&gt;
&lt;p&gt;To apply the same workaround in your .NET application without Fiddler, use the &lt;a href="http://stackoverflow.com/a/169396/126229"&gt;same trick&lt;/a&gt;: &lt;span style="color: #0000ff; font-family: Courier New; font-size: x-small;" face="Courier New" size="2" color="#0000ff"&gt;ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-Eric&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10288724" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/HowTo/">HowTo</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/interop/">interop</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/https/">https</category></item><item><title>Cookie Scanning with Fiddler</title><link>http://blogs.msdn.com/b/fiddler/archive/2012/02/21/showing-cookie-and-p3p-information-in-fiddler-using-a-simple-extension.aspx</link><pubDate>Tue, 21 Feb 2012 23:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10270767</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10270767</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2012/02/21/showing-cookie-and-p3p-information-in-fiddler-using-a-simple-extension.aspx#comments</comments><description>&lt;p&gt;With the recent kerfuffle about sites &lt;a href="http://blogs.msdn.com/b/ie/archive/2012/02/20/google-bypassing-user-privacy-settings.aspx"&gt;providing misleading P3P statements&lt;/a&gt;, I decided to throw together a quick Fiddler add-on that displays privacy information simply in the Fiddler UI.&lt;/p&gt;
&lt;p&gt;Install &lt;a href="http://fiddler2.com/dl/fiddlerprivacyscanner.exe"&gt;&lt;span style="font-size: medium;" size="4"&gt;the new Privacy Scanner add-on&lt;/span&gt;&lt;/a&gt; and Fiddler will gain a new top-level menu named &lt;strong&gt;Privacy. &lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/5123.image_5F00_thumb_5F00_33BD7F6F.png" width="240" height="68" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The menu has two options. The &lt;strong&gt;Enabled &lt;/strong&gt;option controls whether the add-on does anything at all; it&amp;rsquo;s a good practice for Add-ons to offer a simple way to turn them off when they&amp;rsquo;re not wanted.&lt;/p&gt;
&lt;p&gt;When the add-on is enabled,&amp;nbsp;it will add a &lt;strong&gt;Privacy Info &lt;/strong&gt;column to the session list and&amp;nbsp;will flag HTTP/HTTPS responses which set cookies. Evaluation of&amp;nbsp;any P3P statements that come along with those cookies will change the session's background color:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/6683.image_5F00_13A272B2.png" width="481" height="279" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sessions that send a satisfactory P3P policy are shown in green. Sessions that set a cookie without a P3P policy are yellow; in the default IE settings, these cookies will not be sent to a 3rd party context. Sessions that send a P3P policy that does &lt;a href="http://msdn.microsoft.com/en-us/library/ie/ms537343(v=vs.85).aspx#unsatisfactory_cookies"&gt;not permit use of the cookie in a 3rd party context&lt;/a&gt; are rendered in orange. Sessions that send invalid P3P header tokens will have a red background.&lt;/p&gt;
&lt;p&gt;When the menu option &lt;strong&gt;Rename P3P header if invalid&lt;/strong&gt; is checked, if a session presents a P3P statement that is malformed, that P3P header will be renamed to &lt;strong&gt;Malformed-P3P &lt;/strong&gt;to prevent the browser from interpreting it as the P3P 1.0 specification suggested (e.g. ignoring the unknown tokens). You can see the difference when you load this &lt;a href="http://www.enhanceie.com/test/cookie/"&gt;test page&lt;/a&gt;; the cookies with bogus compact policies will be dropped in a 3rd party context.&lt;/p&gt;
&lt;p&gt;For folks looking to build their own Fiddler extension, the code is provided below.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-Eric&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;" id="codeSnippetWrapper"&gt;
&lt;div style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;" id="codeSnippet"&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Collections;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Globalization;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Windows.Forms;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Text;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; Fiddler;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.IO;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Diagnostics;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; Microsoft.Win32;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Reflection;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Text.RegularExpressions;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;[assembly: Fiddler.RequiredVersion(&lt;span style="color: #006080;"&gt;"2.3.9.0"&lt;/span&gt;)]&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;[assembly: AssemblyVersion(&lt;span style="color: #006080;"&gt;"1.0.1.0"&lt;/span&gt;)]&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;[assembly: AssemblyTitle(&lt;span style="color: #006080;"&gt;"PrivacyScanner"&lt;/span&gt;)]&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;[assembly: AssemblyDescription(&lt;span style="color: #006080;"&gt;"Scans for Cookies and P3P"&lt;/span&gt;)]&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;[assembly: AssemblyCompany(&lt;span style="color: #006080;"&gt;"Eric Lawrence"&lt;/span&gt;)]&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;[assembly: AssemblyProduct(&lt;span style="color: #006080;"&gt;"PrivacyScanner"&lt;/span&gt;)]&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; TagCookies : IAutoTamper2&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;{&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; bEnabled = &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; bEnforceP3PValidity = &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; bCreatedColumn = &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; System.Windows.Forms.MenuItem miEnabled;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; System.Windows.Forms.MenuItem miEnforceP3PValidity;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; System.Windows.Forms.MenuItem mnuCookieTag;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; OnLoad()&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #008000;"&gt;/*&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #008000;"&gt; * NB: You might not get called here until ~after~ one of the AutoTamper methods was called.&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #008000;"&gt; * This is okay for us, because we created our mnuContentBlock in the constructor and its simply not&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #008000;"&gt; * visible anywhere until this method is called and we merge it onto the Fiddler Main menu.&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #008000;"&gt; */&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        FiddlerApplication.UI.mnuMain.MenuItems.Add(mnuCookieTag);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; OnBeforeUnload() {  &lt;span style="color: #008000;"&gt;/*noop*/&lt;/span&gt;   }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; InitializeMenu()&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.miEnabled = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; System.Windows.Forms.MenuItem(&lt;span style="color: #006080;"&gt;"&amp;amp;Enabled"&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.miEnforceP3PValidity = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; System.Windows.Forms.MenuItem(&lt;span style="color: #006080;"&gt;"&amp;amp;Rename P3P header if invalid"&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.miEnabled.Index = 0;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.miEnforceP3PValidity.Index = 1;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.mnuCookieTag = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; System.Windows.Forms.MenuItem();&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.mnuCookieTag.MenuItems.AddRange(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; System.Windows.Forms.MenuItem[] { &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.miEnabled, &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.miEnforceP3PValidity });&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.mnuCookieTag.Text = &lt;span style="color: #006080;"&gt;"Privacy"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.miEnabled.Click += &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; System.EventHandler(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.miEnabled_Click);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.miEnabled.Checked = bEnabled;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.miEnforceP3PValidity.Click += &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; System.EventHandler(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.miEnforceP3PValidity_Click);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.miEnforceP3PValidity.Checked = bEnforceP3PValidity;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; miEnabled_Click(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        miEnabled.Checked = !miEnabled.Checked;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        bEnabled = miEnabled.Checked;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.miEnforceP3PValidity.Enabled = bEnabled;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (bEnabled) { EnsureColumn(); }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        FiddlerApplication.Prefs.SetBoolPref(&lt;span style="color: #006080;"&gt;"extensions.tagcookies.enabled"&lt;/span&gt;, bEnabled);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; miEnforceP3PValidity_Click(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        miEnforceP3PValidity.Checked = !miEnforceP3PValidity.Checked;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        bEnforceP3PValidity = miEnforceP3PValidity.Checked;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        FiddlerApplication.Prefs.SetBoolPref(&lt;span style="color: #006080;"&gt;"extensions.tagcookies.EnforceP3PValidity"&lt;/span&gt;, bEnforceP3PValidity);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; EnsureColumn()&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (bCreatedColumn) &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        FiddlerApplication.UI.lvSessions.AddBoundColumn(&lt;span style="color: #006080;"&gt;"Privacy Info"&lt;/span&gt;, 1, 120, &lt;span style="color: #006080;"&gt;"X-Privacy"&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        bCreatedColumn = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; TagCookies()&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.bEnabled = FiddlerApplication.Prefs.GetBoolPref(&lt;span style="color: #006080;"&gt;"extensions.tagcookies.enabled"&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.bEnforceP3PValidity = FiddlerApplication.Prefs.GetBoolPref(&lt;span style="color: #006080;"&gt;"extensions.tagcookies.EnforceP3PValidity"&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        InitializeMenu();&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (bEnabled) { EnsureColumn(); } &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; { &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.miEnforceP3PValidity.Enabled = &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; SetP3PStateFromHeader(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; sValue, &lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt; P3PState oP3PState)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;.IsNullOrEmpty(sValue))&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; sUnsatCat = String.Empty;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; sUnsatPurpose = String.Empty;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        sValue = sValue.Replace(&lt;span style="color: #006080;"&gt;'\''&lt;/span&gt;, &lt;span style="color: #006080;"&gt;'"'&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; sCP = &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        Regex r = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Regex(&lt;span style="color: #006080;"&gt;"CP\\s?=\\s?[\"]?(?&amp;lt;TokenValue&amp;gt;[^\";]*)"&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        Match m = r.Match(sValue);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (m.Success &amp;amp;&amp;amp; (&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt; != m.Groups[&lt;span style="color: #006080;"&gt;"TokenValue"&lt;/span&gt;]))&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            sCP = m.Groups[&lt;span style="color: #006080;"&gt;"TokenValue"&lt;/span&gt;].Value;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (String.IsNullOrEmpty(sCP))&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #008000;"&gt;// Okay, we've got a compact policy token.&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        oP3PState = P3PState.P3POk;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;[] sTokens = sCP.Split(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;char&lt;/span&gt;[] { &lt;span style="color: #006080;"&gt;' '&lt;/span&gt; }, StringSplitOptions.RemoveEmptyEntries);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; sToken &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; sTokens)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            &lt;span style="color: #008000;"&gt;// Reject clearly invalid tokens...&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; ((sToken.Length &amp;lt; 3) || (sToken.Length &amp;gt; 4))&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                oP3PState = P3PState.P3PMalformed;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color: #006080;"&gt;",PHY,ONL,GOV,FIN,"&lt;/span&gt;.IndexOf(&lt;span style="color: #006080;"&gt;","&lt;/span&gt; + sToken + &lt;span style="color: #006080;"&gt;","&lt;/span&gt;, StringComparison.OrdinalIgnoreCase) &amp;gt; -1)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                sUnsatCat += (sToken + &lt;span style="color: #006080;"&gt;" "&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                &lt;span style="color: #0000ff;"&gt;continue&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color: #006080;"&gt;",SAM,OTR,UNR,PUB,IVA,IVD,CON,TEL,OTP,"&lt;/span&gt;.IndexOf(&lt;span style="color: #006080;"&gt;","&lt;/span&gt; + sToken + &lt;span style="color: #006080;"&gt;","&lt;/span&gt;, StringComparison.OrdinalIgnoreCase) &amp;gt; -1)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                sUnsatPurpose += (sToken + &lt;span style="color: #006080;"&gt;" "&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                &lt;span style="color: #0000ff;"&gt;continue&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            &lt;span style="color: #008000;"&gt;// TODO: Look up the token in the complete collection and check validity&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #008000;"&gt;// If a cookie contains an unsatisfactory purpose and an unsatisfactory category, mark it&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #008000;"&gt;// http://msdn.microsoft.com/en-us/library/ie/ms537343(v=vs.85).aspx#unsatisfactory_cookies&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; ((sUnsatCat.Length &amp;gt; 0) &amp;amp;&amp;amp; (sUnsatPurpose.Length &amp;gt; 0))&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (oP3PState == P3PState.P3POk)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                oP3PState = P3PState.P3PUnsatisfactory;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;enum&lt;/span&gt; P3PState&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        NoCookies,&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        NoP3PAndSetsCookies,&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        P3POk,&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        P3PUnsatisfactory,&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        P3PMalformed&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; OnPeekAtResponseHeaders(Session oSession) &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!bEnabled) &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        P3PState oP3PState = P3PState.NoCookies;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!oSession.oResponse.headers.Exists(&lt;span style="color: #006080;"&gt;"Set-Cookie"&lt;/span&gt;))&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        oP3PState = P3PState.NoP3PAndSetsCookies;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (oSession.oResponse.headers.Exists(&lt;span style="color: #006080;"&gt;"P3P"&lt;/span&gt;))&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            SetP3PStateFromHeader(oSession.oResponse.headers[&lt;span style="color: #006080;"&gt;"P3P"&lt;/span&gt;], &lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt; oP3PState);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        &lt;span style="color: #0000ff;"&gt;switch&lt;/span&gt; (oP3PState)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            &lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; P3PState.P3POk:&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                oSession[&lt;span style="color: #006080;"&gt;"ui-backcolor"&lt;/span&gt;] = &lt;span style="color: #006080;"&gt;"#ACDC85"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                oSession[&lt;span style="color: #006080;"&gt;"X-Privacy"&lt;/span&gt;] = &lt;span style="color: #006080;"&gt;"Sets cookies &amp;amp; P3P"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            &lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; P3PState.NoP3PAndSetsCookies:&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                oSession[&lt;span style="color: #006080;"&gt;"ui-backcolor"&lt;/span&gt;] = &lt;span style="color: #006080;"&gt;"#FAFDA4"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                oSession[&lt;span style="color: #006080;"&gt;"X-Privacy"&lt;/span&gt;] = &lt;span style="color: #006080;"&gt;"Sets cookies without P3P"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            &lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; P3PState.P3PUnsatisfactory:&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                oSession[&lt;span style="color: #006080;"&gt;"ui-backcolor"&lt;/span&gt;] = &lt;span style="color: #006080;"&gt;"#EC921A"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                oSession[&lt;span style="color: #006080;"&gt;"X-Privacy"&lt;/span&gt;] = &lt;span style="color: #006080;"&gt;"Sets cookies; P3P unsatisfactory for 3rd-party use"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;            &lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; P3PState.P3PMalformed:&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                oSession[&lt;span style="color: #006080;"&gt;"ui-backcolor"&lt;/span&gt;] = &lt;span style="color: #006080;"&gt;"#E90A05"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (bEnforceP3PValidity)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                    oSession.oResponse.headers[&lt;span style="color: #006080;"&gt;"MALFORMED-P3P"&lt;/span&gt;] = oSession.oResponse.headers[&lt;span style="color: #006080;"&gt;"P3P"&lt;/span&gt;];&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                    oSession[&lt;span style="color: #006080;"&gt;"X-Privacy"&lt;/span&gt;] = &lt;span style="color: #006080;"&gt;"MALFORMED P3P: "&lt;/span&gt; + oSession.oResponse.headers[&lt;span style="color: #006080;"&gt;"P3P"&lt;/span&gt;];&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                    oSession.oResponse.headers.Remove(&lt;span style="color: #006080;"&gt;"P3P"&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;                &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AutoTamperRequestBefore(Session oSession) { }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AutoTamperRequestAfter(Session oSession){ &lt;span style="color: #008000;"&gt;/*noop*/&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AutoTamperResponseAfter(Session oSession) {&lt;span style="color: #008000;"&gt;/*noop*/&lt;/span&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AutoTamperResponseBefore(Session oSession) { &lt;span style="color: #008000;"&gt;/*noop*/&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; OnBeforeReturningError(Session oSession) {&lt;span style="color: #008000;"&gt;/*noop*/&lt;/span&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10270767" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/extensions/">extensions</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Fiddler/">Fiddler</category></item><item><title>New Tricks in Fiddler 2.3.8.2</title><link>http://blogs.msdn.com/b/fiddler/archive/2012/01/09/fiddler-2.3.8.2-beta-views-woff-mp3-h264-datauris-and-autoresponder-supports-regular-expression-groups.aspx</link><pubDate>Mon, 09 Jan 2012 20:44:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10254725</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10254725</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2012/01/09/fiddler-2.3.8.2-beta-views-woff-mp3-h264-datauris-and-autoresponder-supports-regular-expression-groups.aspx#comments</comments><description>&lt;p&gt;The &lt;a href="http://fiddler2.com/r/?GetFiddler2Beta"&gt;new Fiddler Beta&lt;/a&gt; has a few useful tricks. First, you can copy a &lt;a href="http://en.wikipedia.org/wiki/Data_URI_scheme"&gt;DataURI&lt;/a&gt; to your clipboard (from Fiddler itself, or anywhere else):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/6215.image_5F00_58B677F6.png" width="480" height="64" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and use the new&lt;strong&gt; Edit &amp;gt; Paste Files as Sessions&lt;/strong&gt; command:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/4152.image_5F00_038EDC09.png" width="242" height="123" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;hellip; to instruct Fiddler to parse the DataURI and create a new Session for it. You can then use Fiddler&amp;rsquo;s inspectors to examine the resulting object:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/3175.image_5F00_6373CF4B.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/7360.image_5F00_thumb_5F00_0A41E58C.png" width="697" height="236" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Next, the WebView Inspector has been enhanced to render previews of WOFF font, MP3 audio, and H264 video responses, if you have IE9+ installed:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/7382.image_5F00_18142B87.png" width="519" height="316" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/5238.image_5F00_10F4EF0F.png" width="521" height="101" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/8546.image_5F00_70D9E251.png" width="520" height="237" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Lastly, Fiddler&amp;rsquo;s AutoResponder now permits you to use Regular Expression Group Replacements to map one URL to another. For instance, this rule:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/2273.image_5F00_1088BC1A.png" width="463" height="270" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;hellip;will convert &lt;span style="font-size: x-small;" size="2"&gt;&lt;span style="color: #0000ff; font-family: Lucida Console;" face="Lucida Console" color="#0000ff"&gt;http://somesite.com/assets/Test1.gif&lt;/span&gt; &lt;/span&gt;to &lt;span style="color: #0000ff; font-family: Lucida Console; font-size: x-small;" face="Lucida Console" size="2" color="#0000ff"&gt;http://www.example.com/mockup/Test1.gif&lt;/span&gt;. This capability makes it even easier to replace content using Fiddler&amp;rsquo;s AutoResponder.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This new build of Fiddler has a ton of other fixes and performance improvements. I hope you enjoy it!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-Eric&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10254725" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Announcements/">Announcements</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/extensions/">extensions</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/HowTo/">HowTo</category></item><item><title>ThinkPad Scrolling and Fiddler</title><link>http://blogs.msdn.com/b/fiddler/archive/2011/12/29/lenovo-thinkpad-trackpoint-scroll-wheel-does-not-work-in-fiddler-and-other-dotnet-applications.aspx</link><pubDate>Thu, 29 Dec 2011 19:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10251828</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10251828</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2011/12/29/lenovo-thinkpad-trackpoint-scroll-wheel-does-not-work-in-fiddler-and-other-dotnet-applications.aspx#comments</comments><description>&lt;p&gt;I&amp;rsquo;m a long-time ThinkPad fan and owner&amp;mdash;the keyboards are sublime, and I &lt;em&gt;love&lt;/em&gt; the TrackPoint interface. What I &lt;em&gt;don&amp;rsquo;t &lt;/em&gt;love is the ThinkPad driver software, which doesn&amp;rsquo;t send the standard WM_MOUSEWHEEL messages to the system. That bug means that many .NET controls don&amp;rsquo;t scroll properly. Over the years, I&amp;rsquo;ve fixed many of the controls in Fiddler to workaround the problem, but not all of them. For instance, ThinkPad users will notice that when they try to middle-click-scroll the HexView controls, they get the scroll-cursor, but no scrolling as they move the cursor:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="HexView scrolling in ThinkPad" border="0" alt="Screenshot of HexView tab" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/0804.image_5F00_19E40DE1.png" width="240" height="110" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Over on his blog, &lt;a href="http://blogs.msdn.com/b/markrideout/archive/2006/01/12/datagridview-mouse-scrolling-button-with-ibm-ultranav-driver.aspx"&gt;Mark Rideout explains the root cause of Lenovo&amp;rsquo;s scrolling problem&lt;/a&gt; and explains how .NET developers can workaround the bug by adding hidden scrollbar controls to trick the driver software. I&amp;rsquo;ll be looking at using this trick in a future version of Fiddler. For now, a &lt;a href="http://stackoverflow.com/a/7372196/126229"&gt;cumbersome but effective configuration&lt;/a&gt; tweak to the Lenovo driver settings allows end-users to get scrolling working properly in Fiddler and most other applications.&lt;/p&gt;
&lt;p&gt;Start &lt;strong&gt;Notepad&lt;/strong&gt; using the &lt;strong&gt;Run As Administrator &lt;/strong&gt;option. Open the file &lt;span style="font-family: Lucida Console;" face="Lucida Console"&gt;C:\program files\lenovo\trackpoint\tp4table.dat &lt;/span&gt;(note that the tp4table.dat file may be in another path on your computer). Add the lines in blue under the existing lines in grey.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Courier New;" face="Courier New"&gt;&lt;span style="color: #a5a5a5;" color="#a5a5a5"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; &lt;br /&gt;; Pass 1 rules (These rules run last) &lt;br /&gt;; &lt;br /&gt;; If no scrolling method was found with the builtin logic, then &lt;br /&gt;; these rules are checked. &lt;br /&gt;; &lt;br /&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;; Fiddler &lt;br /&gt;*,*,Fiddler.exe,*,*,*,WheelStd,1,9&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Restart your system to force the driver software to reload its settings, and you should find that middle-click-scrolling works properly in Fiddler.&lt;/p&gt;
&lt;p&gt;Until next time&amp;hellip;&lt;/p&gt;
&lt;p&gt;-Eric&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10251828" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Fiddler/">Fiddler</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Problems/">Problems</category></item><item><title>Revisiting Fiddler and Windows 8 Metro-style applications</title><link>http://blogs.msdn.com/b/fiddler/archive/2011/12/10/fiddler-windows-8-apps-enable-loopback-network-isolation-exemption.aspx</link><pubDate>Sat, 10 Dec 2011 16:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10246360</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>22</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10246360</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2011/12/10/fiddler-windows-8-apps-enable-loopback-network-isolation-exemption.aspx#comments</comments><description>&lt;p&gt;Back in September, I blogged about the configuration steps required to &lt;a href="http://blogs.msdn.com/b/fiddler/archive/2011/09/14/fiddler-and-windows-8-metro-style-applications-https-and-private-network-capabilities.aspx"&gt;debug Windows 8 &amp;ldquo;Metro-style&amp;rdquo; apps using Fiddler&lt;/a&gt;. Since that post was originally written, I&amp;rsquo;ve made available a &lt;a href="http://fiddler2.com/r/?GetFiddler4Beta"&gt;new version of Fiddler&lt;/a&gt; which runs natively on the .NETv4 Framework, enabling Windows 8 users to run Fiddler without installing older versions of the Framework.&lt;/p&gt;
&lt;p&gt;As I mentioned in that post, Metro-style applications run inside isolated processes&amp;nbsp;known as &amp;ldquo;AppContainers,&amp;rdquo; and by default, AppContainers are forbidden from sending network traffic to the local computer (loopback). This is, of course, problematic when debugging with Fiddler, as Fiddler is a proxy server which runs on the local computer. The post went on to explain how the &lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/Hh780593.aspx"&gt;CheckNetIsolation&lt;/a&gt; tool can be used to permit an AppContainer to send traffic to the local computer. However, using CheckNetIsolation is pretty cumbersome&amp;mdash;it requires that you know the AppContainer&amp;rsquo;s name or security ID, and you must configure each AppContainer individually. To resolve those difficulties, I have built a GUI tool that allows you to very easily reconfigure an AppContainer to enable loopback traffic. This tool requires Windows 8 and runs on the .NET Framework v4. When launched, the utility scans your computer&amp;rsquo;s AppContainers and displays them in a list view. Each entry has a checkbox to the left of it, indicating whether the AppContainer may send loopback traffic. You can toggle these checkboxes individually, or use the buttons at the top to set all of the checkboxes at once. Click &lt;strong&gt;Save Changes&lt;/strong&gt; to commit the configuration changes you&amp;rsquo;ve made, or click &lt;strong&gt;Refresh&lt;/strong&gt; to reload the current configuration settings.&lt;/p&gt;
&lt;p&gt;After you &lt;span style="font-size: medium;"&gt;&lt;strong&gt;install the &lt;a href="https://www.fiddler2.com/dl/EnableLoopbackUtility.exe"&gt;EnableLoopback Utility&lt;/a&gt;&lt;/strong&gt;&lt;/span&gt;, a new &amp;ldquo;Win8 Loopback Exemptions&amp;rdquo; item is added to Fiddler&amp;rsquo;s Tools menu; clicking this item launches the utility. To make changes to the exemption list, you must elevate to Administrator.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Screenshot of the EnableLoopback Utility" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/2425.EnableLoopbackUtility_5F00_41276413.png" alt="EnableLoopback Utility screenshot" width="742" height="304" border="0" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note: &lt;/strong&gt;When you run &lt;strong&gt;Unit Tests in Visual Studio 2012&lt;/strong&gt;,&amp;nbsp;an ephemeral&amp;nbsp;AppContainer is created for the duration of the unit test, and removed later.&amp;nbsp;In order to ensure that this temporary container is shown in the EnableLoopback utility, you must click the &lt;strong&gt;Refresh &lt;/strong&gt;button &lt;em&gt;while the&amp;nbsp;Unit Test is running&lt;/em&gt;. Learn more &lt;a href="http://stackoverflow.com/questions/13360309/using-fiddler-with-windows-store-unit-test"&gt;here&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-Eric&lt;/p&gt;
&lt;p&gt;PS: For the technically-inclined, this tool relies on calling the new Network Isolation APIs introduced with Windows 8. Their .NET declarations (as of the&amp;nbsp;BUILD conference)&amp;nbsp;are as follows:&lt;/p&gt;
&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;
&lt;div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #008000;"&gt;// Call this API to enumerate all of the AppContainers on the system &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;[DllImport(&lt;span style="color: #006080;"&gt;"FirewallAPI.dll"&lt;/span&gt;)] &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;internal&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;extern&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;uint&lt;/span&gt; NetworkIsolationEnumAppContainers(&lt;span style="color: #0000ff;"&gt;out&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;uint&lt;/span&gt; pdwCntPublicACs, &lt;span style="color: #0000ff;"&gt;out&lt;/span&gt; IntPtr ppACs); &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #008000;"&gt;// Call this API to free the memory returned by the Enumeration API &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;[DllImport(&lt;span style="color: #006080;"&gt;"FirewallAPI.dll"&lt;/span&gt;)] &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;internal&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;extern&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; NetworkIsolationFreeAppContainers(IntPtr pACs); &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #008000;"&gt;// Call this API to load the current list of Loopback-enabled AppContainers&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;[DllImport(&lt;span style="color: #006080;"&gt;"FirewallAPI.dll"&lt;/span&gt;)] &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;internal&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;extern&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;uint&lt;/span&gt; NetworkIsolationGetAppContainerConfig(&lt;span style="color: #0000ff;"&gt;out&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;uint&lt;/span&gt; pdwCntACs, &lt;span style="color: #0000ff;"&gt;out&lt;/span&gt; IntPtr appContainerSids); &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #008000;"&gt;// Call this API to set the Loopback-exemption list &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;[DllImport(&lt;span style="color: #006080;"&gt;"FirewallAPI.dll"&lt;/span&gt;)]&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;internal&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;extern&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;uint&lt;/span&gt; NetworkIsolationSetAppContainerConfig(&lt;span style="color: #0000ff;"&gt;uint&lt;/span&gt; pdwCntACs, SID_AND_ATTRIBUTES[] appContainerSids); &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #008000;"&gt;// Use this API to convert a string SID into an actual SID &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;[DllImport(&lt;span style="color: #006080;"&gt;"advapi32.dll"&lt;/span&gt;, SetLastError=&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;internal&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;extern&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; ConvertStringSidToSid(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; strSid, &lt;span style="color: #0000ff;"&gt;out&lt;/span&gt; IntPtr pSid); &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #008000;"&gt;// Use this API to convert a string reference (e.g. "@{blah.pri?ms-resource://whatever}") into a plain string &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;[DllImport(&lt;span style="color: #006080;"&gt;"shlwapi.dll"&lt;/span&gt;, CharSet=CharSet.Unicode, ExactSpelling=&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;)] &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;internal&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;extern&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; SHLoadIndirectString(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; pszSource, StringBuilder pszOutBuf, &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; cchOutBuf, IntPtr ppvReserved);&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10246360" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Announcements/">Announcements</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Fiddler/">Fiddler</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Win8/">Win8</category></item><item><title>Glimpse of the future: Fiddler and HTML5 WebSockets</title><link>http://blogs.msdn.com/b/fiddler/archive/2011/11/22/fiddler-and-websockets.aspx</link><pubDate>Tue, 22 Nov 2011 04:35:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10239419</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10239419</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2011/11/22/fiddler-and-websockets.aspx#comments</comments><description>&lt;p&gt;Much work remains, but the basic architecture is in place for Fiddling with both secure and insecure HTML5 WebSockets:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50/1565.WebSockets.png"&gt;&lt;img alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50/1565.WebSockets.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10239419" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Announcements/">Announcements</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Fiddler/">Fiddler</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/HTML5/">HTML5</category></item><item><title>.NET HttpWebRequests and Expect: 100-continue</title><link>http://blogs.msdn.com/b/fiddler/archive/2011/11/05/http-expect-continue-delays-transmitting-post-bodies-by-up-to-350-milliseconds.aspx</link><pubDate>Sat, 05 Nov 2011 21:47:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10234318</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10234318</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2011/11/05/http-expect-continue-delays-transmitting-post-bodies-by-up-to-350-milliseconds.aspx#comments</comments><description>&lt;p&gt;Recently, a colleague asked me to look at a network capture in which a .NET client application&amp;rsquo;s communication with a web service was not meeting their performance goals. In particular, he noted that this was primarily a problem on high-latency networks; each of the dozens of requests took hundreds of milliseconds, even when existing connections were being reused.&lt;/p&gt;
&lt;p&gt;Even when he took a capture locally on a fast network, most of the time was spent in an unexpected place:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/3771.image_5F00_4BAFA3A6.png" width="314" height="272" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You can see that the client and server were both reusing connections (the session above took place on a client connection that was established for an earlier session 4 seconds earlier, and the server connection was established 63 seconds earlier).&amp;nbsp; In particular, note that the entire session took 468 milliseconds, but the time between ClientBeginRequest and ClientDoneRequest is 359 milliseconds, nearly 77% of the total time. As Fiddler is a locally-running proxy, and Fiddler only took 93 milliseconds to send the request to the remote server and get back the first byte of the response, it&amp;rsquo;s surprising that it took over three times as long to actually read the request from the client program on the same computer.&lt;/p&gt;
&lt;p&gt;So, why is the client taking so long to send the request to Fiddler?&lt;/p&gt;
&lt;p&gt;I noticed that each of these requests was a HTTP POST, uploading a small SOAP XML body, each just over 1kb. So, it&amp;rsquo;s unlikely that the client was taking a long time to generate the request body or load it off of the disk. However, each request did contain an &lt;strong&gt;Expect &lt;/strong&gt;header.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/7065.image_5F00_4B4370B1.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/5822.image_5F00_thumb_5F00_2B2863F4.png" width="343" height="182" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Section 8.2.3 of &lt;a href="http://www.ietf.org/rfc/rfc2616.txt"&gt;RFC 2616&lt;/a&gt; explains what the Expect header is used for&amp;mdash;the basic idea is that a client sending a POST body may send an &lt;strong&gt;Expect: 100-continue &lt;/strong&gt;request header to the server. The server is expected to immediately evaluate the (incomplete) request&amp;rsquo;s headers, and if they seem reasonable (e.g. of a MIME-type the server supports, and with an appropriate Content-Length) the server sends back a non-final response header set with a status code of 100, indicating that the client&amp;rsquo;s plan to send this body is acceptable. Alternatively, if the headers suggest that the client&amp;rsquo;s pending post is unacceptable (e.g. the client needs to authenticate itself), the server may immediately return an error code (e.g. a HTTP/401 with an Authentication challenge), saving bandwidth by allowing the client to abort the request before sending the body.&lt;/p&gt;
&lt;p&gt;In the case where the request is acceptable, the client receives the HTTP 100 response and then transmits the body as it had promised. The traffic for this scenario looks&lt;sup&gt;[1] &lt;/sup&gt;somewhat like this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;Client-&amp;gt;Server &lt;br /&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="color: #0000ff; font-family: Courier New; font-size: x-small;" size="2" color="#0000ff" face="Courier New"&gt;POST /Page HTTP/1.1 &lt;br /&gt;Content-Type: text/plain &lt;br /&gt;Content-Length: 26&amp;nbsp; &lt;br /&gt;Expect: Continue&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;Server-&amp;gt;Client &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000; font-family: Courier New; font-size: x-small;" size="2" color="#008000" face="Courier New"&gt;HTTP/1.1 100 Continue &lt;br /&gt;Server: Microsoft-IIS/7.5 &lt;br /&gt;Date: Wed, 02 Nov 2011 18:51:56 GMT&lt;/span&gt; &lt;br /&gt;&lt;span style="text-decoration: underline;"&gt; &lt;br /&gt;C&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;lient-&amp;gt;Server &lt;br /&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="color: #0000ff; font-family: Courier New; font-size: x-small;" size="2" color="#0000ff" face="Courier New"&gt;Here is my request body...&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;span style="text-decoration: underline;"&gt;Server-&amp;gt;Client &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000; font-family: Courier New; font-size: x-small;" size="2" color="#008000" face="Courier New"&gt;HTTP/1.1 200 OK &lt;br /&gt;Server: Microsoft-IIS/7.5 &lt;br /&gt;Date: Wed, 02 Nov 2011 18:51:58 GMT &lt;br /&gt;Content-Type: text/html &lt;br /&gt; &lt;br /&gt;...&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;Importantly, HTTP&amp;rsquo;s Expect feature isn&amp;rsquo;t supported by all clients and servers (e.g. Internet Explorer doesn&amp;rsquo;t use Expect, instead &lt;a href="http://blogs.msdn.com/b/ieinternals/archive/2010/11/22/internet-explorer-post-bodies-are-zero-bytes-in-length-when-authentication-challenges-are-expected.aspx"&gt;using an authentication-only heuristic&lt;/a&gt;) and thus a client generally will only wait a short period for a reply from the server before proceeding to transmit the request body anyway. In the .NET Framework implementation, that wait is capped at 350 milliseconds.&lt;/p&gt;
&lt;p&gt;The Fiddler Web Debugger buffers all HTTP requests completely before transmitting the request to the server (in order to enable request tampering), so the .NET application was always waiting the full 350 milliseconds between sending the request headers and the request body when it was running behind Fiddler. In my colleague&amp;rsquo;s production scenario, he wasn&amp;rsquo;t running Fiddler, but the connection from the client to the server was high-latency, so the client didn&amp;rsquo;t rapidly get back the HTTP/100 response from the server, and thus it was forced to wait hundreds of additional milliseconds on each request.&lt;/p&gt;
&lt;p&gt;There are some cases in which the Expect feature is useful&amp;mdash;these are the scenarios where the client is expecting to transfer a large request body (e.g. a multi-megabyte upload). In my colleague&amp;rsquo;s case, using Expect isn&amp;rsquo;t really appropriate, because the requests are small enough that performance is significantly impacted and the Expect feature provides no real savings. The .NET Framework allows callers to disable the Expect behavior using the &lt;a href="http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.expect100continue.aspx"&gt;ServicePointManager.Expect100Continue&lt;/a&gt; property (or by setting a property in the application&amp;rsquo;s manifest&lt;span style="font-size: x-small;" size="2"&gt;&lt;span style="font-size: x-small;" size="2"&gt;&lt;sup&gt;[2] &lt;/sup&gt;&lt;/span&gt;&lt;/span&gt;). You can read a bit more about this property &lt;a href="http://blogs.msdn.com/b/joncole/archive/2005/09/08/462659.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you'd simply like to have Fiddler itself return the 100 Continue, you can do that by clicking Rules &amp;gt; Customize Rules. Add the following function inside the Handlers class:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff; font-family: Lucida Console; font-size: xx-small;" size="1" color="#0000ff" face="Lucida Console"&gt;&lt;span style="color: #0000ff; font-family: Lucida Console; font-size: xx-small;" size="1" color="#0000ff" face="Lucida Console"&gt;&lt;span style="color: #0000ff; font-family: Lucida Console; font-size: xx-small;" size="1" color="#0000ff" face="Lucida Console"&gt;static&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff; font-family: Lucida Console; font-size: xx-small;" size="1" color="#0000ff" face="Lucida Console"&gt;&lt;span style="color: #0000ff; font-family: Lucida Console; font-size: xx-small;" size="1" color="#0000ff" face="Lucida Console"&gt;&lt;span style="color: #0000ff; font-family: Lucida Console; font-size: xx-small;" size="1" color="#0000ff" face="Lucida Console"&gt;function&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;OnPeekAtRequestHeaders&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;oSession&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;Session&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff; font-family: Lucida Console; font-size: xx-small;" size="1" color="#0000ff" face="Lucida Console"&gt;&lt;span style="color: #0000ff; font-family: Lucida Console; font-size: xx-small;" size="1" color="#0000ff" face="Lucida Console"&gt;&lt;span style="color: #0000ff; font-family: Lucida Console; font-size: xx-small;" size="1" color="#0000ff" face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp; if&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;oSession&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;HTTPMethodIs&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;"POST"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;oSession&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;oRequest&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;headers&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;ExistsAndContains&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;"Expect"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;"continue"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;))&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff; font-family: Lucida Console; font-size: xx-small;" size="1" color="#0000ff" face="Lucida Console"&gt;&lt;span style="color: #0000ff; font-family: Lucida Console; font-size: xx-small;" size="1" color="#0000ff" face="Lucida Console"&gt;&lt;span style="color: #0000ff; font-family: Lucida Console; font-size: xx-small;" size="1" color="#0000ff" face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff; font-family: Lucida Console; font-size: xx-small;" size="1" color="#0000ff" face="Lucida Console"&gt;&lt;span style="color: #0000ff; font-family: Lucida Console; font-size: xx-small;" size="1" color="#0000ff" face="Lucida Console"&gt;&lt;span style="color: #0000ff; font-family: Lucida Console; font-size: xx-small;" size="1" color="#0000ff" face="Lucida Console"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;!=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;oSession&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;oRequest&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;pipeClient&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;oSession&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;[&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;"ui-backcolor"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;"lightyellow"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;oSession&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;oRequest&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;headers&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;Remove&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;"Expect"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oSession&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;oRequest&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;pipeClient&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;Send&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;System&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;Text&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;Encoding&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;ASCII&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;GetBytes&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;"HTTP/1.1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;100&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;Continue\r\nServer:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt;&lt;span style="color: #008080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#008080" face="Lucida Console"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;&lt;span style="color: #800000; font-family: Lucida Console; font-size: xx-small;" size="1" color="#800000" face="Lucida Console"&gt;Fiddler\r\n\r\n"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&lt;span style="font-family: Lucida Console; font-size: xx-small;" size="1" face="Lucida Console"&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;&lt;span style="color: #808080; font-family: Lucida Console; font-size: xx-small;" size="1" color="#808080" face="Lucida Console"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;-Eric&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: x-small;" size="2"&gt;&lt;sup&gt;[1] &lt;/sup&gt;Note that HTTP 100 Responses are handled specially by Fiddler because they are an odd architectural quirk of HTTP&amp;mdash;they&amp;rsquo;re non-final responses, which means that a server that sends the 100 Continue will then send a final response header set (usually a HTTP/200). Representing a single session with multiple sets of response headers would be both complicated and confusing, so Fiddler does not attempt to do so. By default (preference &lt;span style="color: #0000ff; font-family: Courier New;" color="#0000ff" face="Courier New"&gt;fiddler.network.streaming.leakhttp1xx&lt;/span&gt; default: &lt;span style="color: #0000ff; font-family: Courier New;" color="#0000ff" face="Courier New"&gt;True&lt;/span&gt;), Fiddler will return any 100 responses it receives to the client and makes note of this using a Session Flag named &lt;span style="color: #0000ff; font-family: Courier New;" color="#0000ff" face="Courier New"&gt;x-fiddler-Stream1xx&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: x-small;" size="2"&gt;&lt;span style="font-size: x-small;" size="2"&gt;&lt;sup&gt;[2] &lt;/sup&gt;Add the following to clientappname.exe.config:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: xx-small;"&gt;&amp;nbsp; &amp;lt;settings&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new,courier; font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;servicePointManager expect100Continue="false" /&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier; font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/settings&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10234318" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Fiddler/">Fiddler</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/interop/">interop</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/http/">http</category></item><item><title>News on Fiddler Surveys and Telemetry</title><link>http://blogs.msdn.com/b/fiddler/archive/2011/10/07/news-on-fiddler-surveys-and-telemetry.aspx</link><pubDate>Fri, 07 Oct 2011 11:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10221612</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10221612</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2011/10/07/news-on-fiddler-surveys-and-telemetry.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-size: small;" size="2"&gt;For this morning&amp;rsquo;s post, I wanted to give everyone a quick picture of some of the data I've collected about Fiddler usage, how I plan to respond, and how I will continue to learn more.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="2"&gt;I&amp;rsquo;ve recently had the chance to run some surveys and spend some time with developers who are using Fiddler, and it has been an extremely eye-opening process. It became quickly plain that most folks are barely scratching the surface of what they can do with Fiddler, and they often are not using the tool very efficiently. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="2"&gt;I plan on improving this in two ways: first, by making tweaks to Fiddler itself to improve its ease-of-use, and secondly, by authoring the first-ever book on Fiddler. It looks like many of you would be interested:&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="Survey" border="0" alt="Chart showing 1658 people say they'd pay for a Fiddler book." src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/5102.image_5F00_2241BB0A.png" width="537" height="275" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="2"&gt;&amp;hellip; and I&amp;rsquo;m confident that the book format would allow me to convey information in a more coherent, deeper way than my current series of blog posts, help pages, Wiki&amp;rsquo;s etc. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="2"&gt;I&amp;rsquo;ve gotten about 35 pages written so far, and I&amp;rsquo;m presently targeting about 250 pages for the finished product. Currently, the book is organized thusly:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: small;" size="2"&gt;Using Fiddler (covers core concepts, UI, major features, major extensions)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;" size="2"&gt;Extending Fiddler (covers object model, script, building Inspectors, building Extensions)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;" size="2"&gt;Building on FiddlerCore (covers building applications on the FiddlerCore library)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;" size="2"&gt;Solving problems with Fiddler (explains, step-by-step, how to accomplish different scenarios with Fiddler).&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="2"&gt;One interesting challenge in me writing a book on a Fiddler is that it&amp;rsquo;s allowing me to take a good hard look at every piece of Fiddler as I write about it; I&amp;rsquo;ve already made dozens of small fixes as I&amp;rsquo;ve been writing, which is great for Fiddler but bad for my throughput as an author. :-)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="2"&gt;In addition to the poll above, I&amp;rsquo;ve run a few other broad surveys about Fiddler usage. I was surprised to learn that Application and WebService testing is more than twice as popular as Web Site testing, which suggests to me that Web Developers haven&amp;rsquo;t yet discovered the power that Fiddler provides beyond browser-integrated tools. This is definitely an opportunity to help folks get more out of Fiddler.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/4213.image_5F00_4CADEC27.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/2477.image_5F00_thumb_5F00_41182EE8.png" width="652" height="500" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="2"&gt;Lastly, I&amp;rsquo;ve run a longer survey about Fiddler which will be &lt;a href="http://fiddler2.com/redir/?id=survey1"&gt;up for another week or so&lt;/a&gt; to collect deeper information about how Fiddler is getting used. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="2"&gt;It looks like most at least 80% of Fiddler users use it every month:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/0410.image_5F00_2743F8B9.png" width="601" height="215" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="2"&gt;The &lt;a href="http://fiddler2.com/fiddler/help/video/default.asp"&gt;Fiddler Tutorial videos&lt;/a&gt; have tons of information on Fiddler that is hard to find elsewhere; unfortunately, it seems that few folks have seen them:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/2068.image_5F00_46F2D281.png" width="679" height="240" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="2"&gt;Much of Fiddler&amp;rsquo;s power derives from the fact that it&amp;rsquo;s a web debugging platform, with the ability to enhance it with &lt;a href="http://fiddler2.com/Fiddler2/extensions.asp"&gt;extensions&lt;/a&gt;. Unfortunately, many folks seem to be missing out, although I have noticed that downloads of the &lt;a href="http://fiddler2.com/redir/?id=SYNTAXVIEWINSTALL"&gt;Syntax-Highlighting extensions&lt;/a&gt; skyrocketed after I put an advertisement for it directly within Fiddler:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/3443.image_5F00_66A1AC49.png" width="632" height="213" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="2"&gt;Lastly, the survey asked users for information on what I should add to Fiddler next. Rather predictably, most of the proposed features are already available in Fiddler, although some are difficult to find or understand. There were also a number of great suggestions that I&amp;rsquo;ve been picking off one-by-one over the last month or so; I have a few more to do.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="2"&gt;As I&amp;rsquo;ve gone through this process, it&amp;rsquo;s become plain that despite Fiddler&amp;rsquo;s huge user-base (over ten-thousand downloads per day!) I know very very little about how the tool is really getting used in the wild. Fiddler&amp;rsquo;s telemetry is currently limited to the download count, and the number of Web Service calls for version checking that happen per day (which can be used as a rough approximation of the number of Fiddler sessions).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="2"&gt;Microsoft solves this problem with the &lt;a href="http://www.microsoft.com/products/ceip/EN-US/default.mspx"&gt;Customer Experience Improvement Program&lt;/a&gt;, a mechanism by which the user can opt-in to providing anonymous data to Microsoft on how products are being used in the wild. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="2"&gt;Non-Microsoft tools like Fiddler cannot take advantage of Microsoft&amp;rsquo;s CEIP service, but I recently encountered &lt;a href="http://www.red-gate.com/products/dotnet-development/smartassembly/"&gt;RedGate&amp;rsquo;s SmartAssembly&lt;/a&gt;, a very easy-to-integrate toolkit for instrumenting applications with telemetry for feature usage reporting. I&amp;rsquo;m happy to announce that an upcoming version of Fiddler will introduce the &amp;ldquo;Fiddler Improvement Program,&amp;rdquo; enabling you to anonymously send me data about how you&amp;rsquo;re using Fiddler. This data will help ensure that I&amp;rsquo;m prioritizing my limited development time effectively. It will also ensure that I understand the mix of system configurations in the wild (e.g. could I move to .NETv4 by default? How many Fiddler users have multiple monitors? How many have displays smaller than 1280x1024? What percentage of Fiddler users have 2gb or less of RAM?) &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="2"&gt;If you see this prompt, please consider opting in!&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="2"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/8738.image_5F00_5143F6E1.png" width="528" height="249" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="2"&gt;Thanks for all the feedback!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="2"&gt;-Eric&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: small;" size="2"&gt;Update 8/4/2012: &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: small;" size="2"&gt;Review some of&amp;nbsp;Fiddler's telemetry data in &lt;a href="http://blogs.msdn.com/b/fiddler/archive/2012/08/04/fiddler-collects-real-world-dotnet-feature-usage-telemetry-using-redgate-smartassembly.aspx"&gt;my new blogpost&lt;/a&gt;.&lt;/span&gt;&lt;span style="font-size: small;" size="2"&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10221612" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Announcements/">Announcements</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/FiddlerCore/">FiddlerCore</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Fiddler/">Fiddler</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/feedback/">feedback</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/HowTo/">HowTo</category></item><item><title>Generating HTML5 AppCache Manifests with Fiddler</title><link>http://blogs.msdn.com/b/fiddler/archive/2011/09/15/generate-html5-appcache-manifests-using-fiddler-export.aspx</link><pubDate>Thu, 15 Sep 2011 04:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10211422</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10211422</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2011/09/15/generate-html5-appcache-manifests-using-fiddler-export.aspx#comments</comments><description>&lt;p&gt;HTML5 introduces the concept of an Application Cache, which allows a web developer to provide a manifest of pages that should be cached to permit offline use. You can see an instance of AppCache over &lt;a href="http://ie.microsoft.com/testdrive/HTML5/KidsBook"&gt;on the IETestDrive site&lt;/a&gt;; if you examine the markup, you can find that the HTML tag contains a &lt;span style="font-family: Courier New;" face="Courier New"&gt;manifest&lt;/span&gt; attribute which specifies the URI of the AppCache manifest.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/8524.image_5F00_64C452AF.png" width="243" height="65" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The Manifest specifies which resources the browser should download into the AppCache and which should always be retrieved from the network. You can learn more about AppCache from numerous online resources; a few of those include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://diveintohtml5.org/offline.html"&gt;http://diveintohtml5.org/offline.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://appcachefacts.info/"&gt;http://appcachefacts.info/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.html5rocks.com/en/tutorials/appcache/beginner/"&gt;http://www.html5rocks.com/en/tutorials/appcache/beginner/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Manifests are simply text files and you can create them with your text editor of choice. However, this process can be somewhat tedious and begs for an automated solution.&lt;/p&gt;
&lt;p&gt;Fiddler includes a pluggable &lt;a href="http://blogs.msdn.com/b/fiddler/archive/2010/06/30/import-and-export-http-archives-from-fiddler.aspx"&gt;import/export architecture&lt;/a&gt; that makes it easy to export sessions from Fiddler into any format you can imagine. Yesterday, I decided to add an AppCache Manifest exporter, which you can find in &lt;a href="http://www.fiddler2.com/redir/?id=GetFiddler2Beta"&gt;Fiddler v2.3.6.2&lt;/a&gt;. Fiddler&amp;rsquo;s new HTML5 AppCache Manifest Exporter makes the process of generating a manifest a straightforward exercise:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1. Clear your browser cache.&lt;/p&gt;
&lt;p&gt;2. Start Fiddler.&lt;/p&gt;
&lt;p&gt;3. Load your website in the browser.&lt;/p&gt;
&lt;p&gt;4. In Fiddler, click File &amp;gt; Export &amp;gt; All Sessions.&lt;/p&gt;
&lt;p&gt;5. In the format selection dialog box, pick &lt;strong&gt;HTML5 AppCache Manifest &lt;br /&gt;&lt;/strong&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/4722.image_5F00_3D8A097A.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/3326.image_5F00_thumb_5F00_087D7A4A.png" width="429" height="194" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;6. Click &lt;strong&gt;Next&lt;/strong&gt;. In the &lt;strong&gt;Adjust AppCache Manifest &lt;/strong&gt;box, check any resources that you wish to exclude from the CACHE section of the Manifest; those will be added to the NETWORK section of the manifest: &lt;br /&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/5315.image_5F00_7D53EFFF.png" width="789" height="476" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;7. If you&amp;rsquo;d like, use the text box at the bottom to specify a &lt;strong&gt;Base URL&lt;/strong&gt; if you would like the URLs to be relative to the manifest. For instance, in the example above, I will place the manifest in the folder &lt;strong&gt;http://ie.microsoft.com/testdrive&lt;/strong&gt;, so I will use that as a base URL.&lt;/p&gt;
&lt;p&gt;8. Click the &lt;strong&gt;Save&lt;/strong&gt; button to generate and display the manifest. &lt;br /&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/0601.image_5F00_0F3083CD.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/1261.image_5F00_thumb_5F00_08114755.png" width="663" height="404" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;9. If you&amp;rsquo;re happy with the manifest, save it to your web server in the appropriate location. Ensure that your web server is configured to return the Manifest file type with &lt;strong&gt;Content-Type: text/cache-manifest&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;10. In your web page, ensure that your page will run in Standards mode (e.g. using the HTML5 doctype) and add the &lt;strong&gt;manifest &lt;/strong&gt;attribute pointing to your application&amp;rsquo;s manifest.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/7127.image_5F00_43D0E008.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/4426.image_5F00_thumb_5F00_23B5D34B.png" width="243" height="65" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Do keep in mind that when the browser is using App-Cached content, those resources will be reused from the cache and not pulled from the network (until the cache is expired). Because the content is cached locally, you will not see requests to re-download that content inside Fiddler. If you wish to use Fiddler to modify such content, you will need to clear your browser&amp;rsquo;s cache so that the browser is forced to re-download the content from the network on next use.&lt;/p&gt;
&lt;p&gt;Please let me know if you encounter any problems with the new AppCache Manifest Exporter. As this is very new code, I&amp;rsquo;m sure there are a few bugs. :-)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thanks,&lt;/p&gt;
&lt;p&gt;Eric Lawrence&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10211422" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Announcements/">Announcements</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Fiddler/">Fiddler</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/HowTo/">HowTo</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Win8/">Win8</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/HTML5/">HTML5</category></item><item><title>Fiddler and Windows 8 Metro-style applications</title><link>http://blogs.msdn.com/b/fiddler/archive/2011/09/14/fiddler-and-windows-8-metro-style-applications-https-and-private-network-capabilities.aspx</link><pubDate>Wed, 14 Sep 2011 20:39:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10211207</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>12</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10211207</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2011/09/14/fiddler-and-windows-8-metro-style-applications-https-and-private-network-capabilities.aspx#comments</comments><description>&lt;p&gt;Over on StackOverflow, a new Windows 8 user asked how to get Fiddler working with new Windows 8 Metro-style applications. These applications work somewhat differently than classic desktop applications, and require a bit of special configuration work to get Fiddler to work properly.&lt;/p&gt;
&lt;p&gt;Fear not, however, Windows 8 and Fiddler get along just fine after a few tweaks. Many of my colleagues have been using Fiddler to debug Metro-style applications over the last few months.&lt;/p&gt;
&lt;p&gt;There are three important Windows 8 changes that impact Fiddler:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The .NET CLR 2.0 isn&amp;rsquo;t installed by default&lt;/li&gt;
&lt;li&gt;Metro-style applications require a specific Capability to communicate with the localhost (where Fiddler runs)&lt;/li&gt;
&lt;li&gt;Metro-style applications do not respect the per-User Trusted Root Certificates store&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Each of these three issues can be worked around to restore the full functionality of Fiddler when running on Windows 8.&lt;/p&gt;
&lt;h3&gt;DotNet Runtime Version&lt;/h3&gt;
&lt;p&gt;By default, Windows 8 ships with the Common Language Runtime v4 and the .NET Framework v4.5. Fiddler, however, is currently compiled to run on the v2.0 CLR which is installed on most PCs with the .NET2.0, .NET3.0, and .NET3.5 Frameworks. When you first launch Fiddler on Windows 8, you should see a prompt to install and enable the .NET Framework version 3.5 and the v2.0 CLR:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img width="596" height="466" title="DotNet35" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" alt="DotNet35" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/3683.DotNet35_5F00_309F6402.png" border="0" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If for some reason you cannot install the older .NET CLR &amp;amp; Framework (or simply don&amp;rsquo;t want to), then you can try an&amp;nbsp;&lt;a href="http://fiddler2.com/r/?GetFiddler4Beta"&gt;beta version of Fiddler&lt;/a&gt; targeting the version 4.0 .NET Framework &amp;amp; CLR. This build currently trails the v2-targeted release build by a few bugfixes and features but will be updated periodically. One day, it will likely become the default package, in the same way that the v2-targeted version of Fiddler replaced the v1.1-targeted version back in 2007.&lt;/p&gt;
&lt;h3&gt;Connecting to Fiddler requires an Application Capability or Loopback Exemption&lt;/h3&gt;
&lt;p&gt;Windows 8&amp;rsquo;s Metro-style applications run in isolated processes (AppContainers) where permissions are granted based on a capabilities model. An application only is granted the capabilities which are specified in its package manifest.&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;[Update 12/10/2011&lt;/strong&gt;&lt;/span&gt;: Please read this &lt;a href="http://blogs.msdn.com/b/fiddler/archive/2011/12/10/fiddler-windows-8-apps-enable-loopback-network-isolation-exemption.aspx"&gt;post&lt;/a&gt;&amp;nbsp;for details on a new utility which simplifies the following steps. &lt;span style="color: #ff0000;"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #808080; background-color: #ffffff;"&gt;Fiddler is a proxy running on your local computer, and for a Metro-style application to send its traffic to Fiddler, the application must either &lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/br211380"&gt;&lt;span style="color: #808080; background-color: #ffffff;"&gt;declare the privateNetworkClientServer permission&lt;/span&gt;&lt;/a&gt; or a Loopback Exemption must be created. Without either of these settings, the App will not be able to connect to the Fiddler proxy running on the local computer, and thus Fiddler will not be able to see its traffic.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #808080; background-color: #ffffff;"&gt;&lt;strong&gt;CheckNetIsolation LoopbackExempt&lt;/strong&gt; allows the developer to set up Fiddler or his debugging/testing environment without modifying the capabilities assigned to the AppContainer. Generally speaking, using the CheckNetIsolation tool should be preferred to adding the privateNetworkClientServer capability, as doing so is less impactful to the behavior of the App you&amp;rsquo;re testing. There was a recent talk that describes how to use CheckNetIsolation with Fiddler-- The talk is &amp;ldquo;&lt;i&gt;&lt;span style="text-decoration: underline;"&gt;Debugging connected Windows 8 apps&lt;/span&gt;&lt;/i&gt;&amp;rdquo; and it&amp;rsquo;s available for viewing &lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-588T"&gt;&lt;span style="color: #808080; background-color: #ffffff;"&gt;here&lt;/span&gt;&lt;/a&gt;. Minutes 27 to 34 talk about Fiddler, and minutes 19 to 34 discuss use of the CheckNetIsolation tool. To exempt your application&amp;rsquo;s AppContainer, open an Administrative Command Prompt, and type &lt;span style="font-family: Courier New;" face="Courier New"&gt;&lt;strong&gt;CheckNetIsolation LoopbackExempt&lt;/strong&gt; &amp;ndash;&lt;strong&gt;a -n=AppContainer&amp;rsquo;sFullName&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #808080; background-color: #ffffff;"&gt;You can learn more about assigning capabilities to your application by looking for the text &lt;strong&gt;To add capabilities to an app &lt;/strong&gt;inside this &lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/br211380"&gt;&lt;span style="color: #808080; background-color: #ffffff;"&gt;whitepaper&lt;/span&gt;&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="text-decoration: line-through;"&gt;The Windows 8 Firewall blocks Modern Applications from connecting to Loopback&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;[Update 12/10/2011&lt;/strong&gt;&lt;/span&gt;: This step should not be needed in the latest Fiddler v4 builds]&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: line-through;"&gt;You will also need to allow loopback connections through the firewall. The simplest way to do that is to click Tools &amp;gt; Fiddler Options and tick the &amp;ldquo;Allow remote computers to connect&amp;rdquo; option, restarting Fiddler when complete.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img width="399" height="230" title="This option must be enabled" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" alt="Allow remote computers to connect checkbox" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/8715.image_5F00_6EA2FBD1.png" border="0" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;To decrypt HTTPS, Fiddler&amp;rsquo;s Root Certificate must be placed in the Machine's Trusted Root store&lt;/h3&gt;
&lt;p&gt;Fiddler&amp;rsquo;s &lt;a href="http://www.fiddler2.com/fiddler/help/httpsdecryption.asp"&gt;HTTPS-decryption feature&lt;/a&gt; relies on a man-in-the-middle approach to decrypting HTTPS traffic. Upon enabling the feature, Fiddler provides the option to copy its self-signed root certificate into your per-User Trusted store:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img width="490" height="220" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/6320.image_5F00_6A2273F9.png" border="0" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img width="526" height="447" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/4377.image_5F00_063332E5.png" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img width="664" height="232" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/3568.image_5F00_71ADE366.png" border="0" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;However, Metro-style applications will not respect any root certificates that are only installed in the &lt;strong&gt;&lt;em&gt;per-User&lt;/em&gt; Trusted Root Certification Authorities&lt;/strong&gt; store. If a Metro-style application encounters a certificate chain that doesn&amp;rsquo;t lead to the &lt;strong&gt;&lt;em&gt;Local Machine&amp;rsquo;s&lt;/em&gt;&lt;/strong&gt; &lt;strong&gt;Trusted Root Certification Authorities&lt;/strong&gt; store, then the trust chain will be deemed invalid and your HTTPS request will fail.&lt;/p&gt;
&lt;p&gt;To address this, recent versions of Fiddler include code that will offer to place the Fiddler Root Certificate into the machine-wide Trusted Root Certification Authorities store when Fiddler detects that it is running on Windows 8. After the prompts above, you&amp;rsquo;ll see the following prompts:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img width="483" height="367" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/6215.image_5F00_5FD14F99.png" border="0" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img width="518" height="234" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/2100.image_5F00_0B15E6A1.png" border="0" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you choose &lt;strong&gt;Yes&lt;/strong&gt; and&lt;strong&gt; Yes&lt;/strong&gt; in these prompts, then Fiddler should be able to successfully decrypt the HTTPS traffic from your Metro-style application. Note: If you want Fiddler to have the machine trust the root certificate on earlier Windows versions, &lt;a href="http://fiddler.wikidot.com/prefsaction"&gt;set the preference&lt;/a&gt; named &lt;strong&gt;fiddler.certmaker.offermachinetrust &lt;/strong&gt;to &lt;strong&gt;True&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Please let me know if you have any questions, and thank you for building on Windows 8!&lt;/p&gt;
&lt;p&gt;-Eric Lawrence&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10211207" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Announcements/">Announcements</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Fiddler/">Fiddler</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/HowTo/">HowTo</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/https/">https</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Win8/">Win8</category></item><item><title>Fiddler and Channel Binding Tokens Revisited</title><link>http://blogs.msdn.com/b/fiddler/archive/2011/09/04/fiddler-http-401-authentication-workaround-to-support-channel-binding-tokens-removing-endless-prompts.aspx</link><pubDate>Sun, 04 Sep 2011 21:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10206075</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10206075</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2011/09/04/fiddler-http-401-authentication-workaround-to-support-channel-binding-tokens-removing-endless-prompts.aspx#comments</comments><description>&lt;p&gt;Just under a year ago, I wrote &lt;a href="http://blogs.msdn.com/b/fiddler/archive/2010/10/15/fiddler-https-decryption-and-channel-binding-token-authentication-problems.aspx"&gt;a blog post&lt;/a&gt; about how the new &amp;ldquo;Extended Protection&amp;rdquo; feature (also known as Channel Binding Tokens or CBT) prevented seamless decryption of certain authenticated HTTPS traffic when Fiddler is running.&lt;/p&gt;
&lt;p&gt;The quick recap is that CBT binds a set of NTLM or Kerberos authentication credentials to the &amp;ldquo;channel&amp;rdquo; upon which they have been sent. If the server detects that the credentials were sent on a different channel than they were received, then it assumes that a credential reuse attack is in progress and it treats the credentials as invalid.&lt;/p&gt;
&lt;p&gt;This is a problem for Fiddler, which uses a &lt;a href="http://www.fiddler2.com/redir/?id=httpsdecryption"&gt;man-in-the-middle approach for decrypting HTTPS traffic&lt;/a&gt;. This approach results in two HTTPS &lt;em&gt;channels&lt;/em&gt; (connections), one from the client to Fiddler (secured by the Fiddler-generated certificate) and one from Fiddler to the server (secured by the server-supplied certificate). When the browser authenticates using the Negotiate package (NTLM or Kerberos), the credentials are bound to the connection to Fiddler. When the credentials are passed through on Fiddler&amp;rsquo;s connection to a CBT-enabled server, the mismatch of channel identity is detected and the credentials are treated as invalid. As a result, the browser prompts the user endlessly for their credentials:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img width="473" height="396" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/2313.image_5F00_3644944D.png" border="0" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;hellip;and even when correct credentials are supplied, those credentials will not work because the server will continue to reject them due to the channel mismatch.&lt;/p&gt;
&lt;p&gt;The only workaround I could offer last year was the option to use Fiddler&amp;rsquo;s Rules engine or UI to disable decryption of requests bound for CBT-protected servers. This works fine if such servers are only incidentally part of your traffic flow&amp;mdash;but what if they&amp;rsquo;re exactly what you need to see to debug something?&lt;/p&gt;
&lt;p&gt;I mentioned in the middle of the article that it was theoretically possible that I could resolve this limitation in a future version of Fiddler--&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;(It is likely that a future version of Fiddler will be able to debug HTTPS traffic even with CBT enabled, because Fiddler runs on the client and has access to the user's credentials. Fiddler itself can provide a proper response to the server's credential challenge; I only need to update the code for the existing &lt;strong&gt;&lt;a href="http://blogs.msdn.com/b/fiddler/archive/2010/08/12/using-reflection-to-get-ntlm-negotiate-challenge-response-string-without-sending-request-using-webrequest-object.aspx"&gt;x-AutoAuth flag&lt;/a&gt;&lt;/strong&gt; to use the channel information from the HTTPS connection.)&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;hellip;but I was soon distracted by other feature requests, and CBT wasn&amp;rsquo;t broadly deployed enough for this limitation to cause many problems. However, last month, a Fiddler user hit this problem and mentioned it on Twitter, and during some downtime over the weekend I decided to take another crack at this, using the technique I outlined last year. In the &amp;ldquo;Agile&amp;rdquo; spirit, I tried &amp;ldquo;the simplest thing that could possibly work&amp;rdquo; and was utterly shocked that in just a few lines of code I indeed had addressed this problem.&lt;/p&gt;
&lt;p&gt;The new functionality can be found in Fiddler v2.3.6.1 and later, now available in the &lt;a href="http://www.fiddler2.com/redir/?id=getfiddler2beta"&gt;Fiddler Beta channel&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To activate it, you must configure Fiddler to perform authentication on the client&amp;rsquo;s behalf. That ensures that the proper channel-binding information is presented to the CBT-protected server. The easiest way to configure Fiddler is to update the FiddlerScript file with a rule that will add your authentication information. Of course, precautions should be taken to ensure that only traffic from your own processes and machine is automatically authenticated-- otherwise anyone who can send traffic through your Fiddler instance will authenticate using &lt;span style="text-decoration: underline;"&gt;your &lt;/span&gt;credentials! You also want to ensure that Fiddler only responds to authentication challenges from servers you trust (e.g. on your Intranet) lest an evil server be provided with credential hashes that it may be able to crack.&lt;/p&gt;
&lt;p&gt;To configure Fiddler to authenticate on your behalf, click &lt;strong&gt;Rules &amp;gt; Customize Rules&lt;/strong&gt;. Scroll to the &lt;strong&gt;OnPeekAtResponseHeaders&lt;/strong&gt; function and add the following code:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="color: #9b00d3; font-family: Courier New; font-size: x-small;" color="#9b00d3" size="2" face="Courier New"&gt;&lt;span style="color: #a5a5a5;" color="#a5a5a5"&gt;static function OnPeekAtResponseHeaders(oSession: Session) &lt;br /&gt;{&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #ccb400;" color="#ccb400"&gt;// To avoid problems with Channel-Binding-Tokens, this block allows Fiddler &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // itself to respond to Authentication challenges from HTTPS Intranet sites. &lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (oSession.isHTTPS &amp;amp;&amp;amp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (oSession.responseCode == 401) &amp;amp;&amp;amp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #ccb400;" color="#ccb400"&gt;// Only permit auto-auth for local apps (e.g. not devices or remote PCs) &lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (oSession.LocalProcessID &amp;gt; 0) &amp;amp;&amp;amp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #ccb400;" color="#ccb400"&gt;// Only permit auth to sites we trust&lt;/span&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (Utilities.isPlainHostName(oSession.hostname) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ||&amp;nbsp;oSession.host.EndsWith("&lt;span style="color: #000000; background-color: #ffff00;" color="#000000"&gt;microsoft.com&lt;/span&gt;"))&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&lt;span style="color: #9bbb59;" color="#9bbb59"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #ccb400;" color="#ccb400"&gt;// To use creds other than your Windows login credentials, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // set X-AutoAuth to "domain\\username:password"&lt;/span&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oSession["X-AutoAuth"] = "(&lt;span style="color: #000000; background-color: #ffff00;" color="#000000"&gt;default)&lt;/span&gt;";&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oSession["ui-backcolor"] = "pink"; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt; &lt;br /&gt;&lt;span style="color: #a5a5a5;" color="#a5a5a5"&gt;//... function continues&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You will probably want to adjust the two values marked in yellow. The first controls &lt;strong&gt;what servers&lt;/strong&gt; Fiddler is willing to release credentials to&amp;mdash;by default, I allow Fiddler to send credentials to any &amp;ldquo;plain&amp;rdquo; hostname that does not contain a dot (Intranet sites) and I also allow any site ending in Microsoft.com, because some of our CBT-protected servers have hostnames that contain dots. The second value controls &lt;strong&gt;what credentials &lt;/strong&gt;Fiddler will attempt to use. If you specify explicit credentials in &lt;span style="color: #0000ff; font-family: Courier New; font-size: x-small;" color="#0000ff" size="2" face="Courier New"&gt;domain\\username:password&lt;/span&gt;&lt;strong&gt; &lt;/strong&gt;format (note the double-backslash required by JavaScript), Fiddler will attempt to use those credentials. If you instead specify &lt;strong&gt;(default)&lt;/strong&gt;, Fiddler will attempt to use the login credentials of whatever user-account that it is running under. Since I run Fiddler in my own account, I use &amp;ldquo;(default)&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;After you make these changes and save the file, Fiddler will begin to authenticate on your behalf to the servers' you&amp;rsquo;ve selected. The final line in the script sets the background color of automatically authenticated responses to pink so that they&amp;rsquo;re easily visible in your session list.&lt;/p&gt;
&lt;p&gt;I hope you find this new feature helpful!&lt;/p&gt;
&lt;p&gt;-Eric&lt;/p&gt;
&lt;p&gt;PS: While I&amp;rsquo;m talking about Fiddler and Authentication, I&amp;rsquo;ll mention two other issues that pop up from time to time:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Office clients which use WinHTTP may not properly authenticate with Fiddler running. The reason is that WinHTTP does not authenticate in the same way that WinINET does. The X-AutoAuth trick above should work, or see &lt;a title="http://support.microsoft.com/kb/956943" href="http://support.microsoft.com/kb/956943"&gt;http://support.microsoft.com/kb/956943&lt;/a&gt; for an alternative workaround involving a registry change to the &lt;strong&gt;AuthForwardServerList&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;When you attempt to authenticate to a website running on your local computer with Fiddler running, the credentials may be rejected. This is because Windows Vista and later contains special code to detect &amp;ldquo;loopback&amp;rdquo; credential use and block it when such use is not expected. The X-AutoAuth trick above &lt;em&gt;may &lt;/em&gt;work. If not, please see &lt;a title="http://support.microsoft.com/kb/926642" href="http://support.microsoft.com/kb/926642"&gt;http://support.microsoft.com/kb/926642&lt;/a&gt; for two alternative workarounds involving registry changes. I&amp;rsquo;ve been told that the &lt;strong&gt;DisableLoopbackCheck&lt;/strong&gt; option works, although either technique &lt;em&gt;should &lt;/em&gt;be effective.&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10206075" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Announcements/">Announcements</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/security/">security</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/HowTo/">HowTo</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/interop/">interop</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/https/">https</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/authentication/">authentication</category></item><item><title>Swapping out JQuery with Fiddler</title><link>http://blogs.msdn.com/b/fiddler/archive/2011/08/19/upgrading-jquery-using-fiddler-autoresponder.aspx</link><pubDate>Fri, 19 Aug 2011 22:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10197992</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10197992</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2011/08/19/upgrading-jquery-using-fiddler-autoresponder.aspx#comments</comments><description>&lt;p&gt;This morning, someone asked me to look into a site-compatibility problem on a HTML5 demo site. When loading the site into IE9 and IE10, the F12 Developer Tools&amp;rsquo; Script Debugger showed the following error:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="Error Message: Object doesn't support property getElementsByTagName" border="0" alt="Error Message: Object doesn't support property getElementsByTagName" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/3225.image_5F00_4AEC6CD6.png" width="604" height="220" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now, obviously, IE does support getElementsByTagName, and I confirmed that the page is running in IE9 and IE10 Standards Modes in the respective browsers. The next thing that stood out to me is the filename: &lt;strong&gt;jquery-1.5.min.js&lt;/strong&gt;, which indicates that this is version 1.5 of the popular JQuery JavaScript library. Back in March, &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/03/02/jquery-1-5-1-supports-ie9.aspx"&gt;Tony Ross celebrated the release of JQuery 1.5.1 on the IEBlog&lt;/a&gt;, noting that this was the first version of the library to fully support IE9.&lt;/p&gt;
&lt;p&gt;So, it looks like this site might be using an outdated version of the library. But is that what&amp;rsquo;s causing this script error, and will upgrading to the latest JQuery make the site work?&lt;/p&gt;
&lt;p&gt;In an &lt;a href="http://blogs.msdn.com/b/ieinternals/archive/2011/03/14/internet-explorer-hidden-images-styled-with-display-none-always-have-zero-0-height.aspx"&gt;earlier case&lt;/a&gt;, I had thought that a site might have been broken because it was using JQuery 1.4.4, but the developer upgraded to the latest JQuery and it didn&amp;rsquo;t help. So, before I got in touch with the owners of today&amp;rsquo;s demo site, I wanted to make sure that upgrading JQuery was all they needed to do.&lt;/p&gt;
&lt;p&gt;Fortunately, Fiddler makes this task super easy. First, visit &lt;a href="http://jquery.com/"&gt;Jquery.com&lt;/a&gt; and download the JQuery library. If you plan on debugging into JQuery, get the &lt;strong&gt;Development &lt;/strong&gt;version; since I&amp;rsquo;m hoping a simple upgrade will alone suffice, I downloaded the smaller minified version and saved it to my desktop:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/3718.image_5F00_714E5021.png" width="661" height="79" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now, I booted Fiddler, and activated the AutoResponder tab. Using the &lt;strong&gt;Add&amp;hellip; &lt;/strong&gt;button, I created a new rule to map requests for JQuery-1.5.min.js to the newly downloaded jquery-1.6.2.min.js file I had just put on my desktop:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/2235.image_5F00_311836A7.png" width="626" height="162" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Be sure to set the &lt;strong&gt;Unmatched requests passthrough &lt;/strong&gt;option to ensure that Fiddler doesn&amp;rsquo;t automatically generate 404s for requests that don&amp;rsquo;t match any of the rules.&lt;/p&gt;
&lt;p&gt;Now, I went back to the site in IE and hit CTRL+F5 in the browser to force it to reload all of the content from the network. Fiddler intercepts the request for the older JQuery and returns the newer one instead. Fiddler shows the AutoResponse line in blue in the WebSessions list:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/4477.image_5F00_1ECF6FE5.png" width="459" height="127" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I was in luck-- with the new version of JQuery in place, the site ran correctly without any script errors, and the demo content worked beautifully! I could then confidently contact the site&amp;rsquo;s owner and request that they update their libraries, knowing that doing so will resolve the compatibility problem.&lt;/p&gt;
&lt;p&gt;-Eric&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10197992" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Fiddler/">Fiddler</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/HowTo/">HowTo</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/debugging/">debugging</category></item><item><title>Fiddler and IPv6-only environments</title><link>http://blogs.msdn.com/b/fiddler/archive/2011/06/22/fiddler-in-pure-ipv6-only-environments.aspx</link><pubDate>Wed, 22 Jun 2011 18:56:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10177917</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10177917</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2011/06/22/fiddler-in-pure-ipv6-only-environments.aspx#comments</comments><description>&lt;p&gt;I recently got a bug report from a user who was attempting to use Fiddler in a pure-IPv6 environment, where IPv4 is entirely disabled. On startup, he saw the following message:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/2330.image_5F00_10E4C823.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-50-metablogapi/2352.image_5F00_thumb_5F00_7E2FCE6B.png" width="487" height="294" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The problem here is an obscure one, which makes it somewhat interesting. What&amp;rsquo;s happening is that Fiddler is trying to create an IPv4 listener socket listening on port 8888 locally. However, because this is a pure IPv6 environment, permission to create such a socket is denied.&lt;/p&gt;
&lt;p&gt;By default, Fiddler will create an IPv4 listen socket unless the following three criteria are met:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The computer supports IPv6 (Vista+ support it by default; various installs are required for XP)&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Enable IPv6 &lt;/strong&gt;option is ticked inside Tools &amp;gt; Fiddler Options &amp;gt; General&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Allow remote computers to connect &lt;/strong&gt;option is set inside Tools &amp;gt; Fiddler Options &amp;gt; Connections&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Now, the first two requirements are somewhat self-explanatory, but the third bears some explanation. If only the first two requirements are met, Fiddler will be able to connect to IPv6 sites, but the browser will only be able to connect to Fiddler using IPv4.&lt;/p&gt;
&lt;p&gt;The reason that the third requirement exists is that some clients (particularly IE6&amp;rsquo;s WinINET, and likely others) don&amp;rsquo;t support IPv6-literal proxy addresses, and hence attempting to poke &lt;strong&gt;[::1]:8888&lt;/strong&gt; into the system proxy settings would fail for such clients. So, Fiddler cannot safely bind to IPAddress.IPv6Loopback, and will bind to IPAddress.Loopback instead. However, if you enable the &lt;strong&gt;Allow remote computers to connect &lt;/strong&gt;option, Fiddler will instead bind to IPAddress.IPv6Any which allows connecting on both IPv4 and IPv6 addresses on any adapter.&lt;/p&gt;
&lt;p&gt;In the future, I may change Fiddler such that the preference &lt;strong&gt;fiddler.network.proxy.registrationhostname&lt;/strong&gt; defaults to &lt;strong&gt;localhost&lt;/strong&gt; which would resolve the IE6 concern as well without the &amp;ldquo;Allow external clients to connect&amp;rdquo; option being set. But that option is a fine workaround for now.&lt;/p&gt;
&lt;p&gt;Please do note, after setting the &lt;strong&gt;Allow remote computers to connect &lt;/strong&gt;option, you must restart Fiddler. You &lt;em&gt;should&lt;/em&gt; get a prompt from the Windows Firewall asking for permission to listen for external connections at that time. You should choose to Allow Fiddler to listen for connections to avoid failures due to the firewall.&lt;/p&gt;
&lt;p&gt;-Eric&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10177917" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Fiddler/">Fiddler</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/interop/">interop</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/ipv6/">ipv6</category></item><item><title>MIX2011 Fiddler talk is now live</title><link>http://blogs.msdn.com/b/fiddler/archive/2011/04/14/fiddler-web-debugger-session-from-mix-2011.aspx</link><pubDate>Thu, 14 Apr 2011 21:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10154168</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10154168</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2011/04/14/fiddler-web-debugger-session-from-mix-2011.aspx#comments</comments><description>&lt;p&gt;My talk at this year&amp;rsquo;s MIX conference is now complete and the video, slides, and references are now available for download. See &lt;a href="https://www.fiddler2.com/mix/" title="https://www.fiddler2.com/mix/"&gt;https://www.fiddler2.com/mix/&lt;/a&gt; for links. &lt;/p&gt;
&lt;p&gt;One of demos showed off a simple little extension that can be used to manipulate GeoLocation web service responses, allowing you to easily spoof modern browsers into thinking your computer is somewhere it is not.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.fiddler2.com/fiddler2/extensions.asp#anywhere"&gt;&lt;img src="http://www.fiddler2.com/fiddler2/images/anywhere.png" border="0" style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; border-top: 0px; border-right: 0px; padding-top: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Thanks to everyone who attended, and for all of the great input and questions I received. I&amp;rsquo;m doodling up the early plans for a new FiddlerCore-based utility that some folks might find useful. Expect more news on that topic here in the next few months.&lt;/p&gt;
&lt;p&gt;-Eric&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10154168" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Announcements/">Announcements</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/extensions/">extensions</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Fiddler/">Fiddler</category></item><item><title>Mapping Sockets to a Process In .NET Code</title><link>http://blogs.msdn.com/b/fiddler/archive/2011/03/09/mapping-socket-or-port-to-owner-process-in-c-sharp-dotnet.aspx</link><pubDate>Wed, 09 Mar 2011 10:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10138573</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10138573</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2011/03/09/mapping-socket-or-port-to-owner-process-in-c-sharp-dotnet.aspx#comments</comments><description>&lt;p&gt;One feature added to Fiddler a few years ago is the ability to map a given HTTP request back to the local process that initiated it. It turns out that this requires a bit of interesting code, because the .NET Framework itself doesn&amp;rsquo;t expose any built-in access to the relevant &lt;a href="http://msdn.microsoft.com/en-us/library/aa365928(v=VS.85).aspx"&gt;IPHelper APIs&lt;/a&gt; that provide this information.&lt;/p&gt;
&lt;p&gt;I found a number of samples on the web, but for Fiddler, performance is a critical consideration because Fiddler needs to determine the originating process for every new connection. Hence, I&amp;rsquo;ve written the following code, which maximizes performance by minimizing copies between Windows and managed code.&lt;/p&gt;
&lt;div&gt;
&lt;pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #008000"&gt;// This sample is provided "AS IS" and confers no warranties.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;// You are granted a non-exclusive, worldwide, royalty-free license to reproduce this code,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;// prepare derivative works, and distribute it or any derivative works that you create.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;// This class invokes the Windows IPHelper APIs that allow us to map sockets to processes.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;// See http://www.pinvoke.net/default.aspx/iphlpapi/GetExtendedTcpTable.html as a reference&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;// We could consider a cache of recent hits to improve performance, but the performance is already pretty good, and &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;// creating a reasonable cache expiration policy could prove tricky. Client connection reuse already provides a significant&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;// optimization as it behaves in the same way as an explicit cache would.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;// &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Runtime.InteropServices;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Net.NetworkInformation;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Net;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Diagnostics;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Collections;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; Fiddler&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;internal&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Winsock&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #cc6633"&gt;#region&lt;/span&gt; IPHelper_PInvokes&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; AF_INET = 2;              &lt;span style="color: #008000"&gt;// IPv4&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; AF_INET6 = 23;            &lt;span style="color: #008000"&gt;// IPv6&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; ERROR_INSUFFICIENT_BUFFER = 0x7a;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; NO_ERROR = 0x0;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;// Learn about IPHelper here: http://msdn2.microsoft.com/en-us/library/aa366073.aspx and http://msdn2.microsoft.com/en-us/library/aa365928.aspx&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;// Note: C++'s ulong is ALWAYS 32bits, unlike C#'s ulong. See http://medo64.blogspot.com/2009/05/why-ulong-is-32-bit-even-on-64-bit.html&lt;/span&gt;&lt;br /&gt;        [DllImport(&lt;span style="color: #006080"&gt;"iphlpapi.dll"&lt;/span&gt;, ExactSpelling = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;, SetLastError = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;)]&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;extern&lt;/span&gt; &lt;span style="color: #0000ff"&gt;uint&lt;/span&gt; GetExtendedTcpTable(IntPtr pTcpTable, &lt;span style="color: #0000ff"&gt;ref&lt;/span&gt; UInt32 dwTcpTableLength, [MarshalAs(UnmanagedType.Bool)] &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; sort, UInt32 ipVersion, TcpTableType tcpTableType, UInt32 reserved);&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// Enumeration of possible queries that can be issued using GetExtendedTcpTable&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// http://msdn2.microsoft.com/en-us/library/aa366386.aspx&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;enum&lt;/span&gt; TcpTableType&lt;br /&gt;        {&lt;br /&gt;            BasicListener,&lt;br /&gt;            BasicConnections,&lt;br /&gt;            BasicAll,&lt;br /&gt;            OwnerPidListener,&lt;br /&gt;            OwnerPidConnections,&lt;br /&gt;            OwnerPidAll,&lt;br /&gt;            OwnerModuleListener,&lt;br /&gt;            OwnerModuleConnections,&lt;br /&gt;            OwnerModuleAll&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;/* This code is now obsolete as I'm now using pointer-arithmetic to directly access the table rows instead of mapping structs on top of the &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt; * returned block of data. I'm keeping the code here for now for debugging purposes.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;        // http://msdn2.microsoft.com/en-us/library/aa366913.aspx&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;        [StructLayout(LayoutKind.Sequential)]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;        private struct TcpRow&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;        {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;            [MarshalAs(UnmanagedType.U4)]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;            internal TcpState state;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;            [MarshalAs(UnmanagedType.U4)]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;            internal UInt32 localAddr;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;            [MarshalAs(UnmanagedType.U4)]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;            internal UInt32 localPortInNetworkOrder;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;            [MarshalAs(UnmanagedType.U4)]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;            internal UInt32 remoteAddr;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;            [MarshalAs(UnmanagedType.U4)]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;            internal UInt32 remotePortInNetworkOrder;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;            [MarshalAs(UnmanagedType.U4)]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;            internal Int32 owningPid;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;        private static string TcpRowToString(TcpRow rowInput)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;        {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;            return String.Format("&amp;gt;{0}:{1} to {2}:{3} is {4} by 0x{5:x}",&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;                (rowInput.localAddr &amp;amp; 0xFF) + "." + ((rowInput.localAddr &amp;amp; 0xFF00) &amp;gt;&amp;gt; 8) + "." + ((rowInput.localAddr &amp;amp; 0xFF0000) &amp;gt;&amp;gt; 16) + "." + ((rowInput.localAddr &amp;amp; 0xFF000000) &amp;gt;&amp;gt; 24),&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;                ((rowInput.localPortInNetworkOrder &amp;amp; 0xFF00) &amp;gt;&amp;gt; 8) + ((rowInput.localPortInNetworkOrder &amp;amp; 0xFF) &amp;lt;&amp;lt; 8),&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;                (rowInput.remoteAddr &amp;amp; 0xFF) + "." + ((rowInput.remoteAddr &amp;amp; 0xFF00) &amp;gt;&amp;gt; 8) + "." + ((rowInput.remoteAddr &amp;amp; 0xFF0000) &amp;gt;&amp;gt; 16) + "." + ((rowInput.remoteAddr &amp;amp; 0xFF000000) &amp;gt;&amp;gt; 24),&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;                ((rowInput.remotePortInNetworkOrder &amp;amp; 0xFF00) &amp;gt;&amp;gt; 8) + ((rowInput.remotePortInNetworkOrder &amp;amp; 0xFF) &amp;lt;&amp;lt; 8),&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;                rowInput.state,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;                rowInput.owningPid);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt; */&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #cc6633"&gt;#endregion&lt;/span&gt; IPHelper_PInvokes&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// Map a local port number to the originating process ID&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// &amp;lt;param name="iPort"&amp;gt;The local port number&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// &amp;lt;returns&amp;gt;The originating process ID&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;internal&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; MapLocalPortToProcessId(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; iPort)&lt;br /&gt;        {&lt;br /&gt;            Debug.Assert(((iPort &amp;gt; 0) &amp;amp;&amp;amp; (iPort &amp;lt; 65536)), &lt;span style="color: #006080"&gt;"Unexpected client port value"&lt;/span&gt;);&lt;br /&gt;            &lt;span style="color: #008000"&gt;// Stopwatch oSW = Stopwatch.StartNew();&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; result = FindPIDForPort(iPort);&lt;br /&gt;            &lt;span style="color: #008000"&gt;// FiddlerApplication.Log.LogString("Port hunt took: " + oSW.ElapsedMilliseconds); // Current version seems to take about 1ms on average, with a range up to ~35ms.&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; result;&lt;br /&gt;        }&lt;br /&gt;      &lt;br /&gt;        &lt;span style="color: #008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// Calls the GetExtendedTcpTable function to map a port to a process ID.&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// This function is (over) optimized for performance.&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// &amp;lt;param name="iTargetPort"&amp;gt;Client port&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// &amp;lt;param name="iAddressType"&amp;gt;AF_INET or AF_INET6&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// &amp;lt;returns&amp;gt;PID, if found, or 0&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; FindPIDForConnection(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; iTargetPort, &lt;span style="color: #0000ff"&gt;uint&lt;/span&gt; iAddressType)&lt;br /&gt;        {&lt;br /&gt;            Debug.Assert(iAddressType == AF_INET6 || iAddressType == AF_INET);&lt;br /&gt;            IntPtr ptrTcpTable = IntPtr.Zero;&lt;br /&gt;            UInt32 tcpTableLength = 0;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; iOffsetToFirstPort = 12;&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; iOffsetToPIDInRow = 12;&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; iTableRowSize = 24; &lt;span style="color: #008000"&gt;// 24 == Marshal.SizeOf(typeof(TcpRow));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #008000"&gt;// IPv6 tables are a different size, so adjust the offsets accordingly&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (iAddressType == AF_INET6)&lt;br /&gt;            {&lt;br /&gt;                iOffsetToFirstPort = 24;&lt;br /&gt;                iOffsetToPIDInRow = 32;&lt;br /&gt;                iTableRowSize = 56;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #008000"&gt;// Determine the size of the memory block to allocate&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (ERROR_INSUFFICIENT_BUFFER == GetExtendedTcpTable(ptrTcpTable, &lt;span style="color: #0000ff"&gt;ref&lt;/span&gt; tcpTableLength, &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;, iAddressType, TcpTableType.OwnerPidConnections, 0))&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;&lt;br /&gt;                {&lt;br /&gt;                    ptrTcpTable = Marshal.AllocHGlobal((Int32)tcpTableLength);&lt;br /&gt;&lt;br /&gt;                    &lt;span style="color: #008000"&gt;// Would it be faster to set the SORTED argument to true, and then iterate the table in reverse order?&lt;/span&gt;&lt;br /&gt;                    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (NO_ERROR == GetExtendedTcpTable(ptrTcpTable, &lt;span style="color: #0000ff"&gt;ref&lt;/span&gt; tcpTableLength, &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;, iAddressType, TcpTableType.OwnerPidConnections, 0))&lt;br /&gt;                    {&lt;br /&gt;                        &lt;span style="color: #008000"&gt;// Convert port we're looking for into Network byte order&lt;/span&gt;&lt;br /&gt;                        &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; iTargetPortInNetOrder = ((iTargetPort &amp;amp; 0xFF) &amp;lt;&amp;lt; 8) + ((iTargetPort &amp;amp; 0xFF00) &amp;gt;&amp;gt; 8);&lt;br /&gt;&lt;br /&gt;                        &lt;span style="color: #008000"&gt;// ISSUE: This function APPEARS to work fine, but might blow up on Itanium or exotic architectures like that. As noted in the docs:&lt;/span&gt;&lt;br /&gt;                        &lt;span style="color: #008000"&gt;// The MIB_TCPTABLE_OWNER_PID structure may contain padding for alignment between the dwNumEntries member and the first MIB_TCPROW_OWNER_PID&lt;/span&gt;&lt;br /&gt;                        &lt;span style="color: #008000"&gt;// array entry in the table  member. Padding for alignment may also be present between the MIB_TCPROW_OWNER_PID array entries in the table member. &lt;/span&gt;&lt;br /&gt;                        &lt;span style="color: #008000"&gt;// Any access to a MIB_TCPROW_OWNER_PID array entry should assume padding may exist. &lt;/span&gt;&lt;br /&gt;                        &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;br /&gt;                        &lt;span style="color: #008000"&gt;// I have absolutely no idea how to detect such padding, or if .NET handles it automatically if I use PtrToStructure rather than the direct pointer &lt;/span&gt;&lt;br /&gt;                        &lt;span style="color: #008000"&gt;// manipulation calls this function is now using.&lt;/span&gt;&lt;br /&gt;                        &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;br /&gt;                        &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; tableLen = Marshal.ReadInt32(ptrTcpTable);          &lt;span style="color: #008000"&gt;// Get table row count&lt;/span&gt;&lt;br /&gt;                        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (tableLen == 0)&lt;br /&gt;                        {&lt;br /&gt;                            Debug.Assert(&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;, &lt;span style="color: #006080"&gt;"How is it possible that the API succeeded and there are really no network connections? Maybe pure IPv6 environment?"&lt;/span&gt;);&lt;br /&gt;                            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; 0;&lt;br /&gt;                        }&lt;br /&gt;                        IntPtr ptrRow = (IntPtr)((&lt;span style="color: #0000ff"&gt;long&lt;/span&gt;)ptrTcpTable + iOffsetToFirstPort);       &lt;span style="color: #008000"&gt;// Advance pointer to first Port in the table&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                        &lt;span style="color: #008000"&gt;// Iterate each row of the table, looking to see if localPortInNetworkOrder matches. If it does, return the owningPid&lt;/span&gt;&lt;br /&gt;                        &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i = 0; i &amp;lt; tableLen; ++i)&lt;br /&gt;                        {&lt;br /&gt;                            &lt;span style="color: #008000"&gt;// Check for matching local port&lt;/span&gt;&lt;br /&gt;                            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (iTargetPortInNetOrder == Marshal.ReadInt32(ptrRow))&lt;br /&gt;                            {&lt;br /&gt;                                &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; Marshal.ReadInt32(ptrRow, iOffsetToPIDInRow);    &lt;br /&gt;                                &lt;span style="color: #008000"&gt;// Note: the finally clause below will clean up memory&lt;/span&gt;&lt;br /&gt;                            }&lt;br /&gt;&lt;br /&gt;                            &lt;span style="color: #008000"&gt;// Move to the next row&lt;/span&gt;&lt;br /&gt;                            ptrRow = (IntPtr)((&lt;span style="color: #0000ff"&gt;long&lt;/span&gt;)ptrRow + iTableRowSize);&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                    &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;br /&gt;                    {&lt;br /&gt;                        FiddlerApplication.Log.LogFormat(&lt;span style="color: #006080"&gt;"GetExtendedTcpTable() returned error #{0}"&lt;/span&gt;, Marshal.GetLastWin32Error().ToString());&lt;br /&gt;                        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; 0;&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;                &lt;span style="color: #0000ff"&gt;finally&lt;/span&gt;&lt;br /&gt;                {&lt;br /&gt;                    &lt;span style="color: #008000"&gt;// Clean up unmanaged memory block. Call succeeds even if tcpTable == 0.&lt;/span&gt;&lt;br /&gt;                    Marshal.FreeHGlobal(ptrTcpTable);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                FiddlerApplication.Log.LogFormat(&lt;span style="color: #006080"&gt;"Initial call to GetExtendedTcpTable() returned error #{0}"&lt;/span&gt;, Marshal.GetLastWin32Error().ToString());&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; 0;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// Given a local port number, uses GetExtendedTcpTable to find the originating process ID. &lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// First checks the IPv4 connections, then looks at IPv6 connections&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// &amp;lt;param name="iTargetPort"&amp;gt;Client applications' port&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// &amp;lt;returns&amp;gt;ProcessID, or 0 if not found&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; FindPIDForPort(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; iTargetPort)&lt;br /&gt;        {          &lt;br /&gt;            &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; iPID = 0;&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                iPID = FindPIDForConnection(iTargetPort, AF_INET);&lt;br /&gt;                &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ((iPID &amp;gt; 0) || !CONFIG.bEnableIPv6) &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; iPID;&lt;br /&gt;                &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; FindPIDForConnection(iTargetPort, AF_INET6);&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (Exception eX)&lt;br /&gt;            {&lt;br /&gt;                FiddlerApplication.Log.LogFormat(&lt;span style="color: #006080"&gt;"Fiddler.Network.TCPTable&amp;gt; Unable to call IPHelperAPI function: {0}"&lt;/span&gt;, eX.Message);&lt;br /&gt;                Debug.Assert(&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;, &lt;span style="color: #006080"&gt;"Unable to call IPHelperAPI function"&lt;/span&gt; + eX.Message);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #008000"&gt;// If we got here, we didn't find the connection; this will occur if the connection is from a remote client.&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #008000"&gt;// FiddlerApplication.Log.LogFormat("Fiddler.Network.TCPTable.Error&amp;gt; Unable to find process information for port #{0} in table of length {1}", iTargetPort, tcpTableLength);&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; 0;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;One caveat: the IPHelper APIs are only available on Windows XP or later, so before calling this code, you should verify that the platform supports it:&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #008000"&gt;// Win2k Doesn't have iphlpapi.dll that we need, so disable Socket Mapping on that platform&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ((Environment.OSVersion.Version.Major &amp;lt; 6) &amp;amp;&amp;amp; (Environment.OSVersion.Version.Minor &amp;lt; 1))&lt;br /&gt;{&lt;br /&gt;    bMapSocketToProcess = &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&lt;br /&gt;}&lt;/pre&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;If the process ID returned is 0, then Fiddler was unable to determine what process created the socket. This might occur, for instance, if the request came from a non-local process &lt;a href="http://www.fiddler2.com/fiddler/help/hookup.asp#Q-NonWindows"&gt;running on another computer&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;If a non-zero process ID for a connection is returned, you can use simple .NET methods to map the process ID to a process name:&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff"&gt;try&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;    System.Diagnostics.Process.GetProcessById(iPID).ProcessName.ToLower();&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (Exception eX)&lt;br /&gt;{&lt;br /&gt;    Debug.Assert(&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;, eX.Message);&lt;br /&gt;}&lt;/pre&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;It turns out that looking up a process name with the GetProcessById call can take quite a few milliseconds, and Process ID to Name mappings are fairly stable, so Fiddler maintains a cache of these mappings for 30 seconds.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;I hope that you find this sample useful.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;-Eric Lawrence&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10138573" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Internals/">Internals</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/ipv6/">ipv6</category></item><item><title>Fiddler before Fiddler</title><link>http://blogs.msdn.com/b/fiddler/archive/2011/03/08/pre-announcing-my-fiddler-web-debugger-session-at-mix-2011.aspx</link><pubDate>Tue, 08 Mar 2011 18:53:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10138226</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10138226</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2011/03/08/pre-announcing-my-fiddler-web-debugger-session-at-mix-2011.aspx#comments</comments><description>&lt;p&gt;I think &lt;a href="http://en.wikipedia.org/wiki/Origin_story"&gt;origin stories&lt;/a&gt; are fun. I spoke about the origins of Fiddler in &lt;a href="http://www.microsoftpdc.com/2009/CL25"&gt;my talk at the PDC&lt;/a&gt; last year, and it was interesting to share how a little idea bloomed into a surprisingly widely-used piece of&amp;nbsp;software. Cleaning up some old hard drives a few weeks ago, I found an old UI prototype that I&amp;rsquo;d been playing around with in 2002/2003. Like many of my early prototypes of that era, it was simply a piece of UI without any actual functionality. It made me smile however, so I&amp;rsquo;m going to publish it here for posterity:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img height="409" width="583" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-37-50-metablogapi/3583.Pre_2D00_Fiddler_5F00_3.png" alt="Pre-Fiddler" border="0" title="Pre-Fiddler" 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;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Somewhat familiar perhaps, although I think some would have found the colors a bit jarring. :-) In case you&amp;rsquo;re wondering, &amp;ldquo;Bayden Systems&amp;rdquo; is the name I release &lt;a href="http://www.bayden.com/other/"&gt;most of my freeware&lt;/a&gt; under.&lt;/p&gt;
&lt;p&gt;In other, more recent news, I&amp;rsquo;ll be doing another talk at &lt;a href="http://live.visitmix.com/"&gt;the MiX Conference&lt;/a&gt; next month. This year&amp;rsquo;s talk is titled &lt;strong&gt;The Devil Went Down to HTTP: Debugging with Fiddler&lt;/strong&gt;&amp;hellip; it&amp;rsquo;s a play on &lt;a href="http://www.youtube.com/watch?v=cDm_ZHyYTrg"&gt;a song title&lt;/a&gt;, in case you haven&amp;rsquo;t heard it. I have a few ideas for what I&amp;rsquo;ll be covering, but if you&amp;rsquo;ll be at MiX (or watching online) and have some suggestions for topics to cover or demos to do, please let me know!&lt;/p&gt;
&lt;p&gt;thanks,&lt;/p&gt;
&lt;p&gt;-Eric&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10138226" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Announcements/">Announcements</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Internals/">Internals</category></item><item><title>Fiddler and the IE9 Release Candidate</title><link>http://blogs.msdn.com/b/fiddler/archive/2011/02/10/fiddler-is-better-with-internet-explorer-9.aspx</link><pubDate>Thu, 10 Feb 2011 17:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10127449</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10127449</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2011/02/10/fiddler-is-better-with-internet-explorer-9.aspx#comments</comments><description>&lt;p&gt;I&amp;rsquo;m delighted to announce that the &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/02/10/acting-on-feedback-ie9-release-candidate-available-for-download.aspx"&gt;now-available IE9 RC&lt;/a&gt; includes three significant enhancements for users of proxy-based debuggers like Fiddler. &lt;/p&gt;
&lt;p&gt;These improvements are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The default Connections-Per-Proxy limit has been raised from 6 to 12, improving performance and in some cases reducing &lt;a href="http://www.fiddler2.com/fiddler/perf/PerfMeasure.asp"&gt;Observer Effect&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Debugging of traffic sent to Localhost / 127.0.0.1 now &amp;ldquo;just works&amp;rdquo;&amp;mdash;&lt;a href="http://www.fiddler2.com/fiddler/help/hookup.asp#Q-LocalTraffic"&gt;configuration changes&lt;/a&gt; are not required. &lt;/li&gt;
&lt;li&gt;Internet Explorer now can be configured to emit information about &lt;strong&gt;why &lt;/strong&gt;a given HTTP request was issued, which helps you understand your web traffic.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I&amp;rsquo;ll explain each of these three improvements in this post.&lt;/p&gt;
&lt;h2&gt;Connections-Per-Proxy Limit&lt;/h2&gt;
&lt;p&gt;Browsers are typically designed to limit the number of connections made to a single server in order to prevent overloading it or incurring other problems. Some browsers have a different limit depending on whether the server being contacted is a proxy server or a normal host (web server). Internet Explorer 6 and 7 apply the &amp;ldquo;web server&amp;rdquo; connection limit to proxies as well; the two connection limit those versions use can severely impact your debugging performance when using Fiddler. Users still using those outdated browsers can &lt;a href="http://www.enhanceie.com/ie/tweaks.asp"&gt;re-configure the connection limit&lt;/a&gt; to mitigate this problem. Internet Explorer 8 limits the connections per proxy to six, which was a welcome improvement, but still could cause performance problems when debugging sites that &amp;ldquo;shard&amp;rdquo; their requests to many different hosts. Internet Explorer 9 maintains the existing connections-per-host limit of six, but also includes an specific connections-per-proxy limit which is set to 12 by default. This increased limit should help reduce the impact of connection limits upon your debugging scenarios.&lt;/p&gt;
&lt;p&gt;For comparison, Firefox&amp;rsquo;s default value for the &lt;span style="font-family: Courier New; font-size: x-small;"&gt;network.http.max-persistent-connections-per-proxy&lt;/span&gt; setting is eight, but the &lt;a href="http://www.fiddler2.com/fiddler2/addons/fiddlerhook/"&gt;FiddlerHook&lt;/a&gt; extension kicks this value up to twenty-four.&lt;/p&gt;
&lt;h2&gt;Proxying Localhost Traffic&lt;/h2&gt;
&lt;p&gt;The WinINET networking component that is used by Internet Explorer and many other applications will automatically bypass a fixed proxy (like Fiddler) for traffic bound for //localhost and //127.0.0.1 because these &amp;ldquo;loopback&amp;rdquo; addresses point to the local machine and traditional proxy servers will not be able to interpret such addresses properly. However, for a debugging proxy running on the local computer, these are perfectly understandable addresses, and when developers are debugging against a local server (like IIS Express or the Visual Studio Test Server Cassini) they often test against these loopback addresses. To proxy loopback traffic from IE8 and below, somewhat awkward &lt;a href="http://www.fiddler2.com/fiddler/help/hookup.asp#Q-LocalTraffic"&gt;workarounds&lt;/a&gt; are needed.&lt;/p&gt;
&lt;p&gt;IE9 RC introduces the ability to proxy loopback traffic. To do so, simply include the token &lt;span style="font-family: Courier New; color: #0000ff; font-size: x-small;"&gt;&lt;span style="background-color: #ffffff;"&gt;&lt;span style="color: #339966;"&gt;&amp;lt;-loopback&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; (pronounced &amp;ldquo;minus-loopback&amp;rdquo;) in the proxy bypass list. When WinINET encounters this token in the bypass list, it will remove the loopback addresses (localhost, 127.0.0.1) from the list of hosts that bypass the proxy. Fiddler 2.3 and above automatically set this option when capturing traffic.&lt;/p&gt;
&lt;p&gt;&lt;img height="131" width="383" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-37-50-metablogapi/6683.image_5F00_thumb_5F00_2.png" alt="Internet Control Panel Proxy Exception list showing minus-loopback token" border="0" title="Internet Control Panel Proxy Exception list" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 40px; border-left-width: 0px; padding-top: 0px" /&gt; &lt;/p&gt;
&lt;p&gt;The FiddlerHook add-on automatically sets the equivalent version of this option for Firefox; for Opera, you can manually remove loopback addresses from the proxy-bypass list.&lt;/p&gt;
&lt;p&gt;The System.Net networking component used by DotNet Framework applications does not yet support the minus-loopback token; I&amp;rsquo;ve filed a request that they do so, but if this is an important feature for your work, you might consider &lt;a href="http://connect.microsoft.com/VisualStudio"&gt;filing feedback on Connect&lt;/a&gt;. &lt;/p&gt;
&lt;h2&gt;Understanding Download-Initiator &lt;/h2&gt;
&lt;p&gt;Proxy-based debuggers have a few key strengths&amp;mdash;chief among them is the ability to debug traffic from any application that supports a proxy (which is pretty much all of them). One downside of debugging at the proxy layer, however, is the loss of context&amp;mdash;it can be very difficult to trace back to determine &lt;em&gt;why &lt;/em&gt;a given HTTP request was issued.&lt;/p&gt;
&lt;p&gt;Having said that, Fiddler includes a number of features to help you understand context. First, Fiddler attempts to map inbound requests back to the process that issued them. For browsers like Internet Explorer 8, with its &amp;ldquo;&lt;a href="http://blogs.msdn.com/b/ie/archive/2008/03/11/ie8-and-loosely-coupled-ie-lcie.aspx"&gt;loosely-coupled&lt;/a&gt;&amp;rdquo; process architecture, this often means that each browser tab sends traffic from an individual process. The process information is shown in the Process column in the session list, and FiddlerScript and extensions may access the Process Name and instance ID (aka &amp;ldquo;PID&amp;rdquo;) using the Session object flag named X-PROCESSINFO.&lt;/p&gt;
&lt;p&gt;Fiddler also uses the HTTP Referer header to help you associate traffic&amp;mdash;type the &amp;ldquo;P&amp;rdquo; key on any session in the session list to jump back to the &amp;ldquo;parent&amp;rdquo; session. Fiddler assumes that the parent session is the session is the most recent request to the URL specified in the selected session&amp;rsquo;s Referer header. Or, push the &amp;ldquo;C&amp;rdquo; key to select all of the &amp;ldquo;child requests&amp;rdquo;, those requests after the current request that have a Referer of the currently selected session&amp;rsquo;s URL.&lt;/p&gt;
&lt;p&gt;Internet Explorer 9 includes two new features that help add more context. &lt;/p&gt;
&lt;p&gt;First, the Web Browser now sends a meaningful Accept header for most types of downloads. Previously, IE sent a long, registry-generated string for document downloads and &lt;strong&gt;&lt;a href="http://blogs.msdn.com/b/ieinternals/archive/2009/07/01/ie-and-the-accept-header.aspx"&gt;Accept: */* for everything else&lt;/a&gt;&lt;/strong&gt;. This limitation made it impossible to reliably distinguish between a request initiated by a &amp;lt;LINK REL=&amp;rdquo;STYLESHEET&amp;rdquo;&amp;gt; element and one initiated by &amp;lt;SCRIPT&amp;gt; element. IE9 RC will send the following Accept headers, depending on context:&lt;/p&gt;
&lt;table cellpadding="1" cellspacing="0" border="1" style="width: 530px; height: 116px; margin-left: 40px;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="156" valign="top"&gt;
&lt;p align="center"&gt;&lt;strong&gt;Context&lt;/strong&gt; &lt;/p&gt;
&lt;/td&gt;
&lt;td width="544" valign="top"&gt;
&lt;p align="center"&gt;&lt;strong&gt;Accept Header&lt;/strong&gt; &lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="156" valign="top"&gt;Frame/markup&lt;/td&gt;
&lt;td width="544" valign="top"&gt;text/html, application/xhtml+xml, */*&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="156" valign="top"&gt;CSS&lt;/td&gt;
&lt;td width="544" valign="top"&gt;text/css&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="156" valign="top"&gt;Script&lt;/td&gt;
&lt;td width="544" valign="top"&gt;application/javascript, */*;q=0.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="156" valign="top"&gt;Image&lt;/td&gt;
&lt;td width="544" valign="top"&gt;image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="156" valign="top"&gt;Generic context&lt;/td&gt;
&lt;td width="544" valign="top"&gt;*/*&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;For compatibility with legacy sites, the legacy Accept headers are sent when a site is configured to run in &lt;a href="http://blogs.msdn.com/b/patricka/archive/2010/09/16/if-i-m-using-internet-explorer-9-beta-what-should-i-do-if-a-site-is-broken-or-hangs-or-crashes-etc.aspx"&gt;Compatibility View&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Within Fiddler, you can display the Accept header in the Session list as a column. To do so just for the current session, enter the following command in the &lt;a href="http://www.fiddler2.com/fiddler/help/quickexec.asp"&gt;QuickExec box&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Lucida Console; color: #0000ff; font-size: x-small;"&gt;cols add @request.Accept&lt;/span&gt; &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This will add a column labelled &amp;ldquo;@request.Accept&amp;rdquo; and as each session is logged, the request&amp;rsquo;s Accept header, if any, will be listed. To add this column every time Fiddler starts, click Rules &amp;gt; Customize Rules. Scroll to the &lt;span style="font-family: Lucida Console; font-size: x-small;"&gt;static function Main() block&lt;/span&gt; , and add the following line within:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Lucida Console; color: #0000ff; font-size: x-small;"&gt;FiddlerObject.UI.lvSessions.AddBoundColumn("Accept", 50, "@request.Accept");&lt;/span&gt; &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Second, while understanding what class of Element initiated a request is useful, IE9 includes an even more valuable feature that conveys contextual information about why a request was made. You can see this feature at work in the Internet Explorer F12 Developer Tools, which you can open by pressing (you guessed it) the F12 key. On the &lt;strong&gt;Network&lt;/strong&gt; tab, you&amp;rsquo;ll see the &amp;ldquo;Initiator&amp;rdquo; column that provides more information about the context in which a request was made:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-37-50-metablogapi/3750.image_5F00_4.png"&gt;&lt;img height="234" width="415" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-37-50-metablogapi/6082.image_5F00_thumb_5F00_1.png" alt="F12 Tools Network tab showing the Initiator column" border="0" title="F12 Tools Network tab" style="background-image: none; border-right-width: 0px; margin: 0px 0px 0px 40px; 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;/p&gt;
&lt;p&gt;This information, by default, is not sent to the network, but you may set a &lt;a href="http://msdn.microsoft.com/en-us/library/ms537184(v=vs.85).aspx"&gt;Feature Control Key&lt;/a&gt; to emit the information as a custom HTTP request header that Fiddler will see. Most Feature Control Keys, including this one, are simple flags stored in the registry that change the behavior of the Web Browser when set.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.fiddler2.com/dl/EnableDownloadInitiator.reg"&gt;Enable FEATURE_DOWNLOAD_INITIATOR_HTTP_HEADER&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fiddler2.com/dl/DisableDownloadInitiator.reg"&gt;Disable FEATURE_DOWNLOAD_INITIATOR_HTTP_HEADER&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can display this information in Fiddler using the same technique described previously:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Lucida Console; color: #0000ff; font-size: x-small;"&gt;cols add @request.X-Download-Initiator&lt;/span&gt; &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This will add a column labelled &amp;ldquo;@request.Accept&amp;rdquo; and as each session is logged, the request&amp;rsquo;s Accept header, if any, will be listed. To add this column every time Fiddler starts, click Rules &amp;gt; Customize Rules. Scroll to the &lt;span style="font-family: Lucida Console; font-size: x-small;"&gt;static function Main() block&lt;/span&gt; , and add the following line within:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Lucida Console; color: #0000ff; font-size: x-small;"&gt;FiddlerObject.UI.lvSessions.AddBoundColumn("Reason", 50, &amp;ldquo;@request.X-Download-Initiator");&lt;/span&gt; &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Then, when you load a page, you will see the initiator information:&lt;/p&gt;
&lt;p&gt;&lt;img height="252" width="736" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-37-50-metablogapi/5428.image_5F00_thumb.png" alt="Fiddler X-Download-Initiator column" border="0" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 40px; border-left-width: 0px; padding-top: 0px" /&gt; &lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Interpretation of these tokens is as follows. First, there&amp;rsquo;s a token (e.g. image, script, html) indicating what type of content is being downloaded. Next, an indicator of which document object &amp;ldquo;owns&amp;rdquo; the download. Information about what element made the request is present, and in some cases, information about what the exact download trigger was. For instance &amp;ldquo;html tokenizer&amp;rdquo; means that the download request occurred during the parsing of HTML. &amp;ldquo;html lookahead&amp;rdquo; indicates that the &lt;a href="http://blogs.msdn.com/b/ieinternals/archive/2010/04/01/ie8-lookahead-downloader-fixed.aspx"&gt;Lookahead parser&lt;/a&gt; is making the request. On the other hand, &amp;ldquo;src property change&amp;rdquo; means that the download occurred because script changed the SRC property of an &amp;lt;img&amp;gt; tag.&lt;/p&gt;
&lt;p&gt;I hope that you find these new features useful, and enjoy an improved debugging experience with the IE9 Release Candidate!&lt;/p&gt;
&lt;p&gt;-Eric Lawrence&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10127449" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Announcements/">Announcements</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Fiddler/">Fiddler</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/interop/">interop</category></item><item><title>Debugging Windows Phone 7 device traffic with Fiddler</title><link>http://blogs.msdn.com/b/fiddler/archive/2011/01/09/debugging-windows-phone-7-device-traffic-with-fiddler.aspx</link><pubDate>Sun, 09 Jan 2011 00:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10113376</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>24</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10113376</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2011/01/09/debugging-windows-phone-7-device-traffic-with-fiddler.aspx#comments</comments><description>&lt;p&gt;Back in October, I showed how to &lt;a href="http://blogs.msdn.com/b/fiddler/archive/2010/10/15/fiddler-and-the-windows-phone-emulator.aspx"&gt;debug Windows Phone emulator traffic with Fiddler&lt;/a&gt;
. Since then, I&amp;rsquo;ve acquired the &lt;a href="http://www.lg.com/us/mobile-phones/LG-C900.jsp"&gt;LG Quantum&lt;/a&gt;
 phone, and naturally, one of my first goals was to start looking at the traffic from mobile Internet Explorer and some of my WP7 applications. The process for capturing traffic from a phone is similar to the process of &lt;a href="http://www.fiddler2.com/fiddler/help/hookup.asp#Q-NonWindows"&gt;capturing traffic from another &lt;span style="color: #acb613;"&gt;computer&lt;/span&gt;
&lt;/a&gt;
. First, enable Fiddler to capture remote traffic, then configure the other client to point at the computer running Fiddler.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll need three things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A desktop PC running Fiddler &lt;/li&gt;
&lt;li&gt;A Windows Phone &lt;/li&gt;
&lt;li&gt;A WiFi network that bridges between the phone and the PC&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;First, I started Fiddler on my desktop PC, named &lt;em&gt;DELL7 &lt;/em&gt;
-- obviously, you&amp;rsquo;ll need to use &lt;em&gt;your&lt;/em&gt;
 machine&amp;rsquo;s name for all of the subsequent steps. In Fiddler, click the &lt;strong&gt;Tools&lt;/strong&gt;
 &amp;gt; &lt;strong&gt;Fiddler Options&lt;/strong&gt;
 menu, and click the &lt;strong&gt;Connections&lt;/strong&gt;
 tab. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;&lt;img src="http://www.fiddler2.com/fiddler/images/AllowRemote.png" alt="Allow Remote Connections checkbox" /&gt;
 &lt;/blockquote&gt;
&lt;p&gt;Place a checkmark in the &lt;strong&gt;Allow remote computers to connect &lt;/strong&gt;
box and close and restart Fiddler. When Fiddler restarts, you&amp;rsquo;ll see a prompt from the Windows Firewall indicating that it has blocked some features of Fiddler. Tick the three checkboxes and click the &lt;strong&gt;Allow Access &lt;/strong&gt;
button. &lt;/p&gt;
&lt;blockquote&gt;&lt;img src="http://www.fiddler2.com/fiddler/images/FiddlerFirewall.png" alt="Windows Firewall blocks Fiddler" /&gt;
 &lt;/blockquote&gt;
&lt;p&gt;Now, Fiddler can capture HTTP and HTTPS requests from other devices. &lt;/p&gt;
&lt;p&gt;To verify that this is working correctly, enable your phone&amp;rsquo;s WiFi connection and open mobile IE. In the browser, type &lt;em&gt;http://DELL7:8888&lt;/em&gt;
, and you should see a request in Fiddler and a &amp;ldquo;Fiddler Echo Service&amp;rdquo; page in the browser. &lt;/p&gt;
&lt;blockquote&gt;&lt;img src="http://www.fiddler2.com/fiddler/images/EchoService.png" alt="Echo Service html" /&gt;
 &lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div style="padding-left: 30px;"&gt;&amp;nbsp;If you &lt;em&gt;can&amp;rsquo;t&lt;/em&gt;
 see the page, you&amp;rsquo;ll need to recheck your work so far. In particular, if your Fiddler computer is running on a corporate network with IPSEC enabled (like Microsoft's corpnet) you will need to get an your IT department to grant you an IPSEC Boundary Computer exception. Otherwise, a device that isn't IPSEC enabled (like your phone) will not be able to exchange traffic with&amp;nbsp;the Fiddler computer.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now that your Phone and PC are talking, let&amp;rsquo;s set the phone&amp;rsquo;s proxy to point at Fiddler. On the phone, visit the &lt;strong&gt;Settings&lt;/strong&gt;
 screen and open the &lt;strong&gt;WiFi&lt;/strong&gt;
 applet. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;&lt;img src="http://www.fiddler2.com/fiddler/images/WPOpenSettings.png" alt="Open the Windows Phone 7 Settings applet" /&gt;
&amp;nbsp;&lt;img src="http://www.fiddler2.com/fiddler/images/WPOpenWifi.png" alt="Open the WiFi Settings applet" /&gt;
&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="http://www.fiddler2.com/fiddler/images/WPWifiApplet.png" alt="The WiFi Settings applet" /&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In the WiFi applet, select the active WiFi connection to open the Edit Network screen. Slide the &lt;strong&gt;Proxy slider&lt;/strong&gt;
 to on. In the &lt;strong&gt;Server/URL&lt;/strong&gt;
 box, type &lt;em&gt;dell7 &lt;/em&gt;
and in the &lt;strong&gt;Port&lt;/strong&gt;
 box, type &lt;em&gt;8888&lt;/em&gt;
. &lt;em&gt;When you are done debugging your traffic later, come back to this screen and simply move the proxy slider to Off.&lt;/em&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="http://www.fiddler2.com/fiddler/images/WPProxySetting.png" alt="Configure the Proxy" /&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Save the settings by clicking the checkmark, and go back to mobile IE. Browse around, and you should see your traffic in Fiddler. If you&amp;rsquo;ve &lt;a href="http://www.fiddler2.com/fiddler/help/httpsdecryption.asp"&gt;configured Fiddler to decrypt HTTPS traffic&lt;/a&gt;
 and try to browse to a HTTPS page on your Phone, you&amp;rsquo;ll see a warning message because Fiddler has resigned the traffic with its own certificate. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;&lt;img src="http://www.fiddler2.com/fiddler/images/WPCertWarn.png" alt="Windows Phone 7 Certificate Warning" /&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you click the &lt;strong&gt;Continue to website &lt;/strong&gt;
link, you&amp;rsquo;ll see the decrypted traffic in Fiddler. However, some applications will not offer the opportunity to bypass certificate warnings. If you&amp;rsquo;d like, you can add Fiddler&amp;rsquo;s root certificate to your phone&amp;rsquo;s root certificate store. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style="text-decoration: underline;"&gt;Warning&lt;/span&gt;
: At present, I have no idea how to remove the certificate, so undertake this step at your own risk. In particular, you will likely have problems later decrypting traffic with a&lt;/em&gt;
 different &lt;em&gt;Fiddler desktop PC with your phone, since each Fiddler instance generates its own certificate.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;To add the Fiddler root certificate to your phone, visit &lt;a href="http://dell7:8888/FiddlerRoot.cer"&gt;http://dell7:8888/FiddlerRoot.cer&lt;/a&gt;
 in mobile IE. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="http://www.fiddler2.com/fiddler/images/WPTapToOpenCert.png" alt="Open certificate file" /&gt;
 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Tap to open the file. Choose &lt;strong&gt;Install &lt;/strong&gt;
to install the certificate. &lt;/p&gt;
&lt;blockquote&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;&lt;img src="http://www.fiddler2.com/fiddler/images/WPCertInstall.png" alt="Windows Phone Certificate Install" /&gt;
 &lt;/blockquote&gt;
&lt;p&gt;After you do this, you will find that all HTTPS traffic from mobile IE and applications is visible in Fiddler.&lt;/p&gt;
&lt;blockquote&gt;&lt;img src="http://www.fiddler2.com/fiddler/images/WPInFiddler.png" alt="Windows Phone traffic showing in Fiddler" /&gt;
 &lt;/blockquote&gt;
&lt;p&gt;Have fun with Fiddler and Windows Phone 7!&lt;/p&gt;
&lt;p&gt;-Eric Lawrence&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10113376" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/HowTo/">HowTo</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/interop/">interop</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/https/">https</category></item><item><title>Fiddler and Silverlight Cross-Domain Requests</title><link>http://blogs.msdn.com/b/fiddler/archive/2010/11/22/fiddler-and-silverlight-cross-zone-cross-domain-requests.aspx</link><pubDate>Mon, 22 Nov 2010 00:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10094482</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10094482</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2010/11/22/fiddler-and-silverlight-cross-zone-cross-domain-requests.aspx#comments</comments><description>&lt;p&gt;I&amp;rsquo;ve recently heard from a number of Silverlight developers who report that certain cross-domain web service requests from their applications work properly with Fiddler running, but fail when Fiddler is not active. Using lower-level tools like &lt;a href="https://www.fiddler2.com/redir/?id=netmon"&gt;NetMon&lt;/a&gt; or by watching server logs, the developers note that their applications aren&amp;rsquo;t even issuing requests for the &lt;a href="http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx"&gt;cross-domain policy file&lt;/a&gt; unless Fiddler is running. &lt;/p&gt;
&lt;p&gt;So, what&amp;rsquo;s going on?&lt;/p&gt;
&lt;p&gt;The answer is that Silverlight is suppressing web service requests to the target URLs (when Fiddler &lt;i&gt;isn&amp;rsquo;t&lt;/i&gt; running) because the target URL is in the Local Int&lt;span style="text-decoration: underline;"&gt;ra&lt;/span&gt;net security zone, while the Silverlight application is running from the Int&lt;span style="text-decoration: underline;"&gt;er&lt;/span&gt;net security zone. Silverlight forbids cross-domain requests from the Internet to the Local Intranet&lt;sup&gt;[1]&lt;/sup&gt;, and doesn&amp;rsquo;t bother looking for a cross-domain policy file. &lt;/p&gt;
&lt;p&gt;So why don&amp;rsquo;t these cross-zone requests fail while Fiddler is running?&lt;/p&gt;
&lt;p&gt;The answer goes back to a post I wrote over half a decade ago: &lt;a href="http://msdn.microsoft.com/en-us/library/bb250483(VS.85).aspx"&gt;The Local Intranet Zone and Proxies: the Surprising Connection&lt;/a&gt;. In these developers&amp;rsquo; environments, the target web services are mapped to the Local Intranet Zone by a proxy configuration script specified in the WinINET settings. &lt;/p&gt;
&lt;p&gt;So, for example, if the proxy configuration script specifies a proxy for &lt;b&gt;www.example.com&lt;/b&gt;, but returns &amp;ldquo;DIRECT&amp;rdquo; for &lt;b&gt;services.dev.extranet.example.com&lt;/b&gt;, Silverlight will block a request from an application running at &lt;b&gt;www.example.com (Internet)&lt;/b&gt; because the target service URL is mapped to the Local Intranet Zone. &lt;/p&gt;
&lt;p&gt;While Fiddler is running, it overrides the local proxy settings, removing the proxy configuration script from the IE settings and using the configuration script itself internally when determining the upstream gateway. However, because Fiddler is a &lt;i&gt;directly-configured&lt;/i&gt; proxy, Internet Explorer has no proxy configuration script while Fiddler is attached. Because no hostnames are configured to bypass Fiddler, all dotted hostnames are treated as Internet Zone unless they are manually mapped to another zone using the Internet Control Panel. &lt;/p&gt;
&lt;p&gt;To resolve this problem such that the application works without Fiddler running, you can untick the &amp;ldquo;Include all sites that bypass the proxy server&amp;rdquo; option inside Internet Explorer&amp;rsquo;s Tools &amp;gt; Internet Options &amp;gt; Security &amp;gt; Local Intranet &amp;gt; Sites dialog. Alternatively, you could use the Advanced button in that dialog to map the page hosting the Silverlight application itself into the Intranet Zone, ensuring that the application and its web service URL are running from the same zone.&lt;/p&gt;
&lt;p&gt;-Eric&lt;/p&gt;
&lt;p&gt;&lt;sup&gt;[1]&lt;/sup&gt; Blocking of Zone Elevation is a security mitigation adopted by a number of technologies including IE&amp;rsquo;s &lt;a href="http://msdn.microsoft.com/en-us/library/cc288060(VS.85).aspx"&gt;XDomainRequest&lt;/a&gt; object.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10094482" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/security/">security</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/Q_2600_amp_3B00_A/">Q&amp;amp;A</category></item><item><title>Fiddler and Channel-Binding-Tokens</title><link>http://blogs.msdn.com/b/fiddler/archive/2010/10/15/fiddler-https-decryption-and-channel-binding-token-authentication-problems.aspx</link><pubDate>Fri, 15 Oct 2010 17:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10076528</guid><dc:creator>EricLaw [ex-MSFT]</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/fiddler/rsscomments.aspx?WeblogPostID=10076528</wfw:commentRss><comments>http://blogs.msdn.com/b/fiddler/archive/2010/10/15/fiddler-https-decryption-and-channel-binding-token-authentication-problems.aspx#comments</comments><description>&lt;p&gt;&lt;span style="background-color: #ffff00;"&gt;Note: Please see &lt;a href="http://blogs.msdn.com/b/fiddler/archive/2011/09/04/fiddler-http-401-authentication-workaround-to-support-channel-binding-tokens-removing-endless-prompts.aspx"&gt;&lt;span style="background-color: #ffff00;"&gt;this post&lt;/span&gt;&lt;/a&gt; for an update.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Some users of Fiddler who have &lt;a href="http://www.fiddler2.com/redir/?id=httpsdecryption"&gt;HTTPS Decryption&lt;/a&gt; enabled have found that some of their internal HTTPS sites that used to work properly with Fiddler now endlessly prompt for credentials while Fiddler is running. Even typing the correct credentials into the authentication prompt won't fix the problem. What happened?&lt;/p&gt;
&lt;p&gt;The problem is that the servers in question have enabled the new &lt;a href="http://blogs.technet.com/b/srd/archive/2009/12/08/extended-protection-for-authentication.aspx"&gt;Extended Protection&lt;/a&gt; / Channel Binding Tokens security feature. This feature helps to prevent reuse of credentials by binding an authentication response to the channel (e.g. the HTTPS connection) on which the authentication challenge was received. This obviously poses a problem for Fiddler, because Fiddler uses a man-in-the-middle strategy to decrypt HTTPS traffic. That means that the server's Authentication Challenge comes to Fiddler on a different connection than Fiddler uses to return that challenge to the client. By design, the client responds to the server's challenge using the information from its connection to Fiddler, and the server, noticing the mismatch, rejects those credentials.&lt;/p&gt;
&lt;p&gt;To know if this problem applies to you, the following must be true:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The site works properly when Fiddler isn't running&lt;/li&gt;
&lt;li&gt;The site is running on HTTPS&lt;/li&gt;
&lt;li&gt;The site works properly when Fiddler's HTTPS-decryption feature isn't enabled&lt;/li&gt;
&lt;li&gt;The server sends back a HTTP/401 authentication challenge even when correct credentials are supplied&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Now, CBT is not currently widely deployed, but in some major organizations, it has been deployed on one or more critical servers. For instance, some organizations might have enabled CBT on their &lt;a href="http://blogs.technet.com/b/adfs/archive/2008/06/10/adding-an-adfs-proxy-server.aspx"&gt;ADFS proxy server&lt;/a&gt; in order to protect ADFS logins to other sites. If that's the case, a user trying to debug that other site will find that they cannot log in with Fiddler running. Annoying.&lt;/p&gt;
&lt;p&gt;Fortunately, there are workarounds for the cases where you don't actually care about the traffic to particular sites. While disabling HTTPS-Decryption globally works, it's somewhat annoying. Instead, you can disable HTTPS-decryption for specific sessions. You can do so by setting the &lt;strong&gt;x-no-decrypt &lt;/strong&gt;flag on a given session, or, in Fiddler 2.3.0.6 or later, you can do so by listing the hostname inside the text box &lt;strong&gt;Skip Decryption for the following hosts&lt;/strong&gt; found by clicking Tools &amp;gt; Fiddler Options &amp;gt; HTTPS.&lt;/p&gt;
&lt;p&gt;(It is likely that a future version of Fiddler will be able to debug HTTPS traffic even with CBT enabled, because Fiddler runs on the client and has access to the user's credentials. Fiddler itself can provide a proper response to the server's credential challenge; I only need to update the code for the existing &lt;strong&gt;&lt;a href="http://blogs.msdn.com/b/fiddler/archive/2010/08/12/using-reflection-to-get-ntlm-negotiate-challenge-response-string-without-sending-request-using-webrequest-object.aspx"&gt;x-AutoAuth flag&lt;/a&gt;&lt;/strong&gt; to use the channel information from the HTTPS connection.) &lt;span style="background-color: #ffff00;"&gt;Note: As noted in &lt;a href="http://blogs.msdn.com/b/fiddler/archive/2011/09/04/fiddler-http-401-authentication-workaround-to-support-channel-binding-tokens-removing-endless-prompts.aspx"&gt;&lt;span style="background-color: #ffff00;"&gt;this post&lt;/span&gt;&lt;/a&gt;, this fix was made for Fiddler v2.3.6.1.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Beyond avoiding problems with servers that have CBT enabled, the ability to skip decryption for certain connections can be useful for other cases as well. For instance, Microsoft Outlook can be configured to communicate with Microsoft Exchange using &lt;a href="http://msdn.microsoft.com/en-us/library/aa378641(VS.85).aspx"&gt;RPC over HTTPS&lt;/a&gt;. You will find that when Fiddler decrypts such traffic, the client typically will no longer work. The problem is that Fiddler buffers all requests before sending them to the server (only streaming of &lt;em&gt;responses&lt;/em&gt; is supported) and the RPC client never "finishes" sending a complete HTTP message. Hence, Fiddler will block communication to the server. If you disable HTTPS-decryption for servers used for RPC over HTTPS, you will still see the CONNECT tunnel through which the secure traffic flows, but Fiddler will not interrupt the traffic. Alternatively, you could disable HTTPS-decryption for traffic from an entire application (e.g. boring.exe)&amp;nbsp;using a rule like this inside &lt;strong&gt;OnBeforeRequest&lt;/strong&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="csharpcode"&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;br /&gt;oSession.HTTPMethodIs(&lt;span class="str"&gt;"CONNECT"&lt;/span&gt;) &lt;br /&gt;&amp;amp;&amp;amp; oSession[&lt;span class="str"&gt;"X-PROCESSINFO"&lt;/span&gt;] &lt;br /&gt;&amp;amp;&amp;amp; oSession[&lt;span class="str"&gt;"X-PROCESSINFO"&lt;/span&gt;].StartsWith(&lt;span class="str"&gt;"boring"&lt;/span&gt;)&lt;br /&gt;) &lt;br /&gt; { &lt;br /&gt; oSession[&lt;span class="str"&gt;"x-no-decrypt"&lt;/span&gt;] = &lt;span class="str"&gt;"boring process"&lt;/span&gt;; &lt;br /&gt; }&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;br /&gt;thanks,&lt;/p&gt;
&lt;p&gt;-Eric&lt;/p&gt;
&lt;p&gt;&lt;span style="background-color: #ffff00;"&gt;Note: Please see &lt;a href="http://blogs.msdn.com/b/fiddler/archive/2011/09/04/fiddler-http-401-authentication-workaround-to-support-channel-binding-tokens-removing-endless-prompts.aspx"&gt;&lt;span style="background-color: #ffff00;"&gt;this post&lt;/span&gt;&lt;/a&gt; for an update.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10076528" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/security/">security</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/HowTo/">HowTo</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/interop/">interop</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/https/">https</category><category domain="http://blogs.msdn.com/b/fiddler/archive/tags/authentication/">authentication</category></item></channel></rss>