Rebuild for 3.0.17 stable
[privoxy.git] / doc / webserver / user-manual / appendix.html
index 928e238..c3f69d7 100644 (file)
@@ -1,20 +1,25 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
 <HTML
 ><HEAD
 ><TITLE
 >Appendix</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.64
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
 REL="HOME"
-TITLE="Privoxy User Manual"
+TITLE="Privoxy 3.0.17 User Manual"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="See Also"
 HREF="seealso.html"><LINK
 REL="STYLESHEET"
 TYPE="text/css"
-HREF="../p_doc.css"></HEAD
+HREF="../p_doc.css"><META
+HTTP-EQUIV="Content-Type"
+CONTENT="text/html;
+charset=ISO-8859-1">
+<LINK REL="STYLESHEET" TYPE="text/css" HREF="p_doc.css">
+</head
 ><BODY
 CLASS="SECT1"
 BGCOLOR="#EEEEEE"
@@ -25,6 +30,7 @@ ALINK="#0000FF"
 ><DIV
 CLASS="NAVHEADER"
 ><TABLE
+SUMMARY="Header navigation table"
 WIDTH="100%"
 BORDER="0"
 CELLPADDING="0"
@@ -33,7 +39,7 @@ CELLSPACING="0"
 ><TH
 COLSPAN="3"
 ALIGN="center"
->Privoxy User Manual</TH
+>Privoxy 3.0.17 User Manual</TH
 ></TR
 ><TR
 ><TD
@@ -42,6 +48,7 @@ ALIGN="left"
 VALIGN="bottom"
 ><A
 HREF="seealso.html"
+ACCESSKEY="P"
 >Prev</A
 ></TD
 ><TD
@@ -65,7 +72,7 @@ CLASS="SECT1"
 CLASS="SECT1"
 ><A
 NAME="APPENDIX"
->9. Appendix</A
+>14. Appendix</A
 ></H1
 ><DIV
 CLASS="SECT2"
@@ -73,50 +80,59 @@ CLASS="SECT2"
 CLASS="SECT2"
 ><A
 NAME="REGEX"
->9.1. Regular Expressions</A
+>14.1. Regular Expressions</A
 ></H2
 ><P
 > <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
-> can use <SPAN
+> uses Perl-style <SPAN
 CLASS="QUOTE"
->"regular expressions"</SPAN
-> 
- in various config files. Assuming support for <SPAN
-CLASS="QUOTE"
->"pcre"</SPAN
-> (Perl
- Compatible Regular Expressions) is compiled in, which is the default. Such
- configuration directives do not require regular expressions, but they can be
- used to increase flexibility by matching a pattern with wild-cards against
- URLs.</P
+>"regular
+ expressions"</SPAN
+> in its <A
+HREF="actions-file.html"
+>actions
+ files</A
+> and <A
+HREF="filter-file.html"
+>filter file</A
+>,
+ through the <A
+HREF="http://www.pcre.org/"
+TARGET="_top"
+>PCRE</A
+> and
+ <SPAN
+CLASS="APPLICATION"
+>PCRS</SPAN
+> libraries.</P
 ><P
 > If you are reading this, you probably don't understand what <SPAN
 CLASS="QUOTE"
 >"regular
  expressions"</SPAN
 > are, or what they can do. So this will be a very brief
- introduction only. A full explanation would require a book ;-)</P
+ introduction only. A full explanation would require a <A
+HREF="http://www.oreilly.com/catalog/regex/"
+TARGET="_top"
+>book</A
+> ;-)</P
 ><P
-> <SPAN
+> Regular expressions provide a language to describe patterns that can be
+ run against strings of characters (letter, numbers, etc), to see if they
+ match the string or not. The  patterns are themselves (sometimes complex)
+ strings of literal characters, combined with  wild-cards, and other special
+ characters, called meta-characters. The <SPAN
 CLASS="QUOTE"
->"Regular expressions"</SPAN
-> is a way of matching one character
- expression against another to see if it matches or not. One of the
+>"meta-characters"</SPAN
+> have
+ special meanings and are used to build complex patterns to be matched against.
+ Perl Compatible Regular Expressions are an especially convenient
  <SPAN
 CLASS="QUOTE"
->"expressions"</SPAN
-> is a literal string of readable characters
- (letter, numbers, etc), and the other is a complex string of literal
- characters combined with wild-cards, and other special characters, called
- meta-characters. The <SPAN
-CLASS="QUOTE"
->"meta-characters"</SPAN
-> have special meanings and
- are used to build the complex pattern to be matched against. Perl Compatible
- Regular Expressions is an enhanced form of the regular expression language
- with backward compatibility.</P
+>"dialect"</SPAN
+> of the regular expression language.</P
 ><P
 > To make a simple analogy, we do something similar when we use wild-card
  characters when listing files with the <B
@@ -159,15 +175,19 @@ CLASS="QUOTE"
  building complex patterns however. Let's look at a few of the common ones,
  and then some examples:</P
 ><P
+><P
 ></P
 ><TABLE
 BORDER="0"
 ><TBODY
 ><TR
 ><TD
->  <I
+>  <SPAN
+CLASS="emphasis"
+><I
 CLASS="EMPHASIS"
 >.</I
+></SPAN
 > - Matches any single character, e.g. <SPAN
 CLASS="QUOTE"
 >"a"</SPAN
@@ -191,6 +211,8 @@ CLASS="QUOTE"
 ></TABLE
 ><P
 ></P
+></P
+><P
 ><P
 ></P
 ><TABLE
@@ -198,9 +220,12 @@ BORDER="0"
 ><TBODY
 ><TR
 ><TD
->  <I
+>  <SPAN
+CLASS="emphasis"
+><I
 CLASS="EMPHASIS"
 >?</I
+></SPAN
 > - The preceding character or expression is matched ZERO or ONE
   times. Either/or.
  </TD
@@ -209,6 +234,8 @@ CLASS="EMPHASIS"
 ></TABLE
 ><P
 ></P
+></P
+><P
 ><P
 ></P
 ><TABLE
@@ -216,9 +243,12 @@ BORDER="0"
 ><TBODY
 ><TR
 ><TD
->  <I
+>  <SPAN
+CLASS="emphasis"
+><I
 CLASS="EMPHASIS"
 >+</I
+></SPAN
 > - The preceding character or expression is matched ONE or MORE
   times.
  </TD
@@ -227,6 +257,8 @@ CLASS="EMPHASIS"
 ></TABLE
 ><P
 ></P
+></P
+><P
 ><P
 ></P
 ><TABLE
@@ -234,9 +266,12 @@ BORDER="0"
 ><TBODY
 ><TR
 ><TD
->  <I
+>  <SPAN
+CLASS="emphasis"
+><I
 CLASS="EMPHASIS"
 >*</I
+></SPAN
 > - The preceding character or expression is matched ZERO or MORE
   times.
  </TD
@@ -245,6 +280,8 @@ CLASS="EMPHASIS"
 ></TABLE
 ><P
 ></P
+></P
+><P
 ><P
 ></P
 ><TABLE
@@ -252,9 +289,12 @@ BORDER="0"
 ><TBODY
 ><TR
 ><TD
->  <I
+>  <SPAN
+CLASS="emphasis"
+><I
 CLASS="EMPHASIS"
 >\</I
+></SPAN
 > - The <SPAN
 CLASS="QUOTE"
 >"escape"</SPAN
@@ -264,13 +304,20 @@ CLASS="QUOTE"
 CLASS="QUOTE"
 >"."</SPAN
 >) needs to be taken literally and
-  not as a special meta-character.
+  not as a special meta-character. Example: <SPAN
+CLASS="QUOTE"
+>"example\.com"</SPAN
+>, makes 
+  sure the period is recognized only as a period (and not expanded to its 
+  meta-character meaning of any single character).
  </TD
 ></TR
 ></TBODY
 ></TABLE
 ><P
 ></P
+></P
+><P
 ><P
 ></P
 ><TABLE
@@ -278,17 +325,33 @@ BORDER="0"
 ><TBODY
 ><TR
 ><TD
->  <I
+>  <SPAN
+CLASS="emphasis"
+><I
 CLASS="EMPHASIS"
->[]</I
+>[ ]</I
+></SPAN
 > - Characters enclosed in brackets will be matched if
-  any of the enclosed characters are encountered.
+  any of the enclosed characters are encountered. For instance, <SPAN
+CLASS="QUOTE"
+>"[0-9]"</SPAN
+>
+  matches any numeric digit (zero through nine). As an example, we can combine 
+  this with <SPAN
+CLASS="QUOTE"
+>"+"</SPAN
+> to match any digit one of more times: <SPAN
+CLASS="QUOTE"
+>"[0-9]+"</SPAN
+>.
  </TD
 ></TR
 ></TBODY
 ></TABLE
 ><P
 ></P
+></P
+><P
 ><P
 ></P
 ><TABLE
@@ -296,9 +359,12 @@ BORDER="0"
 ><TBODY
 ><TR
 ><TD
->  <I
+>  <SPAN
+CLASS="emphasis"
+><I
 CLASS="EMPHASIS"
->()</I
+>( )</I
+></SPAN
 > - parentheses are used to group a sub-expression,
   or multiple sub-expressions.
  </TD
@@ -307,6 +373,8 @@ CLASS="EMPHASIS"
 ></TABLE
 ><P
 ></P
+></P
+><P
 ><P
 ></P
 ><TABLE
@@ -314,9 +382,12 @@ BORDER="0"
 ><TBODY
 ><TR
 ><TD
->  <I
+>  <SPAN
+CLASS="emphasis"
+><I
 CLASS="EMPHASIS"
 >|</I
+></SPAN
 > - The <SPAN
 CLASS="QUOTE"
 >"bar"</SPAN
@@ -328,38 +399,26 @@ CLASS="QUOTE"
   sub-expression on either side of <SPAN
 CLASS="QUOTE"
 >"|"</SPAN
-> matches.
- </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-><P
-></P
-><TABLE
-BORDER="0"
-><TBODY
-><TR
-><TD
->  <I
-CLASS="EMPHASIS"
->s/string1/string2/g</I
-> - This is used to rewrite strings of text. 
+> matches. As an example:
   <SPAN
 CLASS="QUOTE"
->"string1"</SPAN
-> is replaced by <SPAN
+>"/(this|that) example/"</SPAN
+> uses grouping and the bar character 
+  and would match either <SPAN
+CLASS="QUOTE"
+>"this example"</SPAN
+> or <SPAN
 CLASS="QUOTE"
->"string2"</SPAN
-> in this
-  example.
+>"that
+  example"</SPAN
+>, and nothing else.
  </TD
 ></TR
 ></TBODY
 ></TABLE
 ><P
 ></P
+></P
 ><P
 > These are just some of the ones you are likely to use when matching URLs with 
  <SPAN
@@ -369,12 +428,15 @@ CLASS="APPLICATION"
  list. This is enough to get us started with a few simple examples which may
  be more illuminating:</P
 ><P
-> <I
+> <SPAN
+CLASS="emphasis"
+><I
 CLASS="EMPHASIS"
 ><TT
 CLASS="LITERAL"
 >/.*/banners/.*</TT
 ></I
+></SPAN
 > - A  simple example
  that uses the common combination of <SPAN
 CLASS="QUOTE"
@@ -421,14 +483,17 @@ CLASS="QUOTE"
 > in the path
  somewhere.</P
 ><P
-> A now something a little more complex:</P
+> And now something a little more complex:</P
 ><P
-> <I
+> <SPAN
+CLASS="emphasis"
+><I
 CLASS="EMPHASIS"
 ><TT
 CLASS="LITERAL"
 >/.*/adv((er)?ts?|ertis(ing|ements?))?/</TT
 ></I
+></SPAN
 > - 
  We have several literal forward slashes again (<SPAN
 CLASS="QUOTE"
@@ -439,10 +504,13 @@ CLASS="QUOTE"
 CLASS="QUOTE"
 >".*"</SPAN
 >, so we are matching against any conceivable sub-path, just so
- it matches our expression. The only true literal that <I
+ it matches our expression. The only true literal that <SPAN
+CLASS="emphasis"
+><I
 CLASS="EMPHASIS"
 >must
  match</I
+></SPAN
 > our pattern is <SPAN
 CLASS="APPLICATION"
 >adv</SPAN
@@ -491,9 +559,12 @@ CLASS="QUOTE"
 CLASS="QUOTE"
 >"ing"</SPAN
 > 
- <I
+ <SPAN
+CLASS="emphasis"
+><I
 CLASS="EMPHASIS"
 >OR</I
+></SPAN
 > <SPAN
 CLASS="QUOTE"
 >"ements?"</SPAN
@@ -538,17 +609,20 @@ CLASS="QUOTE"
 >, which would then match
  either spelling.</P
 ><P
-> <I
+> <SPAN
+CLASS="emphasis"
+><I
 CLASS="EMPHASIS"
 ><TT
 CLASS="LITERAL"
 >/.*/advert[0-9]+\.(gif|jpe?g)</TT
 ></I
+></SPAN
 > - Again 
  another path statement with forward slashes. Anything in the square brackets 
  <SPAN
 CLASS="QUOTE"
->"[]"</SPAN
+>"[ ]"</SPAN
 > can be matched. This is using <SPAN
 CLASS="QUOTE"
 >"0-9"</SPAN
@@ -645,41 +719,6 @@ CLASS="QUOTE"
 > is not
  in the expression anywhere).</P
 ><P
-> <I
-CLASS="EMPHASIS"
-><TT
-CLASS="LITERAL"
->s/microsoft(?!.com)/MicroSuck/i</TT
-></I
-> - This is 
- a substitution. <SPAN
-CLASS="QUOTE"
->"MicroSuck"</SPAN
-> will replace any occurrence of 
- <SPAN
-CLASS="QUOTE"
->"microsoft"</SPAN
->.  The <SPAN
-CLASS="QUOTE"
->"i"</SPAN
-> at the end of the expression
- means ignore case. The <SPAN
-CLASS="QUOTE"
->"(?!.com)"</SPAN
-> means 
- the match should fail if <SPAN
-CLASS="QUOTE"
->"microsoft"</SPAN
-> is followed by
- <SPAN
-CLASS="QUOTE"
->".com"</SPAN
->. In other words, this acts like a <SPAN
-CLASS="QUOTE"
->"NOT"</SPAN
->
- modifier. In case this is a hyperlink, we don't want to break it ;-).</P
-><P
 > We are barely scratching the surface of regular expressions here so that you
  can understand the default <SPAN
 CLASS="APPLICATION"
@@ -692,21 +731,25 @@ CLASS="APPLICATION"
 ><P
 > More reading on Perl Compatible Regular expressions: 
  <A
-HREF="http://www.perldoc.com/perl5.6/pod/perlre.html"
+HREF="http://perldoc.perl.org/perlre.html"
 TARGET="_top"
->http://www.perldoc.com/perl5.6/pod/perlre.html</A
+>http://perldoc.perl.org/perlre.html</A
 ></P
+><P
+> For information on regular expression based substitutions and their applications
+ in filters, please see the <A
+HREF="filter-file.html"
+>filter file tutorial</A
+>
+ in this manual.</P
 ></DIV
 ><DIV
 CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
-NAME="AEN1602"
->9.2. <SPAN
-CLASS="APPLICATION"
->Privoxy</SPAN
->'s Internal Pages</A
+NAME="AEN5545"
+>14.2. Privoxy's Internal Pages</A
 ></H2
 ><P
 > Since <SPAN
@@ -751,7 +794,7 @@ CLASS="APPLICATION"
    Privoxy main page: 
   </P
 ><A
-NAME="AEN1617"
+NAME="AEN5559"
 ></A
 ><BLOCKQUOTE
 CLASS="BLOCKQUOTE"
@@ -765,21 +808,26 @@ TARGET="_top"
    </P
 ></BLOCKQUOTE
 ><P
->   Alternately, this may be reached at <A
+>   There is a shortcut: <A
 HREF="http://p.p/"
 TARGET="_top"
 >http://p.p/</A
->, but this
-   variation may not work as reliably as the above in some configurations.
+> (But it
+   doesn't provide a fall-back to a real page, in case the request is not
+   sent through <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+>)
   </P
 ></LI
 ><LI
 ><P
 >  
-    Show information about the current configuration: 
+    Show information about the current configuration, including viewing and 
+    editing of actions files:
   </P
 ><A
-NAME="AEN1624"
+NAME="AEN5567"
 ></A
 ><BLOCKQUOTE
 CLASS="BLOCKQUOTE"
@@ -799,7 +847,7 @@ TARGET="_top"
     Show the source code version numbers:
   </P
 ><A
-NAME="AEN1629"
+NAME="AEN5572"
 ></A
 ><BLOCKQUOTE
 CLASS="BLOCKQUOTE"
@@ -816,10 +864,10 @@ TARGET="_top"
 ><LI
 ><P
 >  
-   Show the client's request headers:
+   Show the browser's request headers:
   </P
 ><A
-NAME="AEN1634"
+NAME="AEN5577"
 ></A
 ><BLOCKQUOTE
 CLASS="BLOCKQUOTE"
@@ -839,7 +887,7 @@ TARGET="_top"
    Show which actions apply to a URL and why:
   </P
 ><A
-NAME="AEN1639"
+NAME="AEN5582"
 ></A
 ><BLOCKQUOTE
 CLASS="BLOCKQUOTE"
@@ -856,14 +904,22 @@ TARGET="_top"
 ><LI
 ><P
 >  
-   Toggle Privoxy on or off. In this case, <SPAN
+   Toggle Privoxy on or off. This feature can be turned off/on in the main 
+   <TT
+CLASS="FILENAME"
+>config</TT
+> file. When toggled <SPAN
+CLASS="QUOTE"
+>"off"</SPAN
+>, <SPAN
 CLASS="QUOTE"
 >"Privoxy"</SPAN
-> continues 
-   to run, but only as a pass-through proxy, with no actions taking place:
+>
+   continues to run, but only as a pass-through proxy, with no actions taking
+   place:
   </P
 ><A
-NAME="AEN1645"
+NAME="AEN5590"
 ></A
 ><BLOCKQUOTE
 CLASS="BLOCKQUOTE"
@@ -880,7 +936,7 @@ TARGET="_top"
 >   Short cuts. Turn off, then on: 
   </P
 ><A
-NAME="AEN1649"
+NAME="AEN5594"
 ></A
 ><BLOCKQUOTE
 CLASS="BLOCKQUOTE"
@@ -894,7 +950,7 @@ TARGET="_top"
    </P
 ></BLOCKQUOTE
 ><A
-NAME="AEN1652"
+NAME="AEN5597"
 ></A
 ><BLOCKQUOTE
 CLASS="BLOCKQUOTE"
@@ -908,37 +964,17 @@ TARGET="_top"
    </P
 ></BLOCKQUOTE
 ></LI
-><LI
-><P
->  
-   Edit the actions list file:
-  </P
-><A
-NAME="AEN1657"
-></A
-><BLOCKQUOTE
-CLASS="BLOCKQUOTE"
-><P
-> 
-    <A
-HREF="http://config.privoxy.org/edit-actions"
-TARGET="_top"
->http://config.privoxy.org/edit-actions</A
->
-   </P
-></BLOCKQUOTE
-></LI
 ></UL
 ></P
 ><P
-> These may be bookmarked for quick reference.&#13;</P
+> These may be bookmarked for quick reference. See next.&#13;</P
 ><DIV
 CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 NAME="BOOKMARKLETS"
->9.2.1. Bookmarklets</A
+>14.2.1. Bookmarklets</A
 ></H3
 ><P
 > Below are some <SPAN
@@ -969,7 +1005,7 @@ CLASS="QUOTE"
 CLASS="QUOTE"
 >"may not be safe"</SPAN
 > - just click OK. Then you can run the
- Bookmarklet directly from your favourites/bookmarks. For even faster access,
+ Bookmarklet directly from your favorites/bookmarks. For even faster access,
  you can put them on the <SPAN
 CLASS="QUOTE"
 >"Links"</SPAN
@@ -985,27 +1021,27 @@ CLASS="QUOTE"
 ><LI
 ><P
 >    <A
-HREF="javascript:void(window.open('http://config.privoxy.org/toggle?mini=y&set=enabled','ijbstatus','width=250,height=100,resizable=yes,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());"
+HREF="javascript:void(window.open('http://config.privoxy.org/toggle?mini=y&#38;set=enabled','ijbstatus','width=250,height=100,resizable=yes,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());"
 TARGET="_top"
->Enable Privoxy</A
+>Privoxy - Enable</A
 >
    </P
 ></LI
 ><LI
 ><P
 >    <A
-HREF="javascript:void(window.open('http://config.privoxy.org/toggle?mini=y&set=disabled','ijbstatus','width=250,height=100,resizable=yes,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());"
+HREF="javascript:void(window.open('http://config.privoxy.org/toggle?mini=y&#38;set=disabled','ijbstatus','width=250,height=100,resizable=yes,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());"
 TARGET="_top"
->Disable Privoxy</A
+>Privoxy - Disable</A
 >
    </P
 ></LI
 ><LI
 ><P
 >    <A
-HREF="javascript:void(window.open('http://config.privoxy.org/toggle?mini=y&set=toggle','ijbstatus','width=250,height=100,resizable=yes,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());"
+HREF="javascript:void(window.open('http://config.privoxy.org/toggle?mini=y&#38;set=toggle','ijbstatus','width=250,height=100,resizable=yes,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());"
 TARGET="_top"
->Toggle Privoxy</A
+>Privoxy - Toggle Privoxy</A
 > (Toggles between enabled and disabled)
    </P
 ></LI
@@ -1014,25 +1050,25 @@ TARGET="_top"
 >    <A
 HREF="javascript:void(window.open('http://config.privoxy.org/toggle?mini=y','ijbstatus','width=250,height=2,resizable=yes,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());"
 TARGET="_top"
->View Privoxy Status</A
+>Privoxy- View Status</A
 >
    </P
 ></LI
 ><LI
 ><P
 >    <A
-HREF="javascript:w=Math.floor(screen.width/2);h=Math.floor(screen.height*0.9);void(window.open('http://www.privoxy.org/actions','Feedback','screenx='+w+',width='+w+',height='+h+',scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());"
+HREF="javascript:void(window.open('http://config.privoxy.org/show-url-info?url='+escape(location.href),'Why').focus());"
 TARGET="_top"
->Actions file feedback system</A
+>Privoxy - Why?</A
 >
    </P
 ></LI
 ></UL
 ></P
 ><P
-> Credit: The site which gave me the general idea for these bookmarklets is
+> Credit: The site which gave us the general idea for these bookmarklets is
  <A
-HREF="http://www.bookmarklets.com"
+HREF="http://www.bookmarklets.com/"
 TARGET="_top"
 >www.bookmarklets.com</A
 >. They
@@ -1044,25 +1080,267 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
-NAME="ACTIONSANAT"
->9.3. Anatomy of an Action</A
+NAME="CHAIN"
+>14.3. Chain of Events</A
 ></H2
 ><P
-> The way <SPAN
+> Let's take a quick look at how some of <SPAN
+CLASS="APPLICATION"
+>Privoxy's</SPAN
+> 
+ core features are triggered, and the ensuing sequence of events when a web
+ page is requested by your browser:</P
+><P
+> <P
+></P
+><UL
+><LI
+><P
+>   First, your web browser requests a web page. The browser knows to send 
+   the request to <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+>, which will in turn, 
+   relay the request to the remote web server after passing the following 
+   tests: 
+  </P
+></LI
+><LI
+><P
+>   <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> traps any request for its own internal CGI 
+   pages (e.g <A
+HREF="http://p.p/"
+TARGET="_top"
+>http://p.p/</A
+>) and sends the CGI page back to the browser.
+  </P
+></LI
+><LI
+><P
+>   Next, <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
-> applies <SPAN
+> checks to see if the URL 
+   matches any <A
+HREF="actions-file.html#BLOCK"
+><SPAN
 CLASS="QUOTE"
->"actions"</SPAN
+>"+block"</SPAN
+></A
+> patterns. If
+   so, the URL is then blocked, and the remote web server will not be contacted.
+   <A
+HREF="actions-file.html#HANDLE-AS-IMAGE"
+><SPAN
+CLASS="QUOTE"
+>"+handle-as-image"</SPAN
+></A
+> 
+   and 
+   <A
+HREF="actions-file.html#HANDLE-AS-EMPTY-DOCUMENT"
+><SPAN
+CLASS="QUOTE"
+>"+handle-as-empty-document"</SPAN
+></A
+>
+   are then checked, and if there is no match, an 
+   HTML <SPAN
+CLASS="QUOTE"
+>"BLOCKED"</SPAN
+> page is sent back to the browser. Otherwise, if
+   it does match, an image is returned for the former, and an empty text
+   document for the latter. The type of image would depend on the setting of
+   <A
+HREF="actions-file.html#SET-IMAGE-BLOCKER"
+><SPAN
+CLASS="QUOTE"
+>"+set-image-blocker"</SPAN
+></A
+>
+   (blank, checkerboard pattern, or an HTTP redirect to an image elsewhere).
+  </P
+></LI
+><LI
+><P
+>   Untrusted URLs are blocked. If URLs are being added to the
+   <TT
+CLASS="FILENAME"
+>trust</TT
+> file, then that is done.
+  </P
+></LI
+><LI
+><P
+>   If the URL pattern matches the <A
+HREF="actions-file.html#FAST-REDIRECTS"
+><SPAN
+CLASS="QUOTE"
+>"+fast-redirects"</SPAN
+></A
+> action,
+   it is then processed. Unwanted parts of the requested URL are stripped.
+  </P
+></LI
+><LI
+><P
+>   Now the rest of the client browser's request headers are processed. If any
+   of these match any of the relevant actions (e.g. <A
+HREF="actions-file.html#HIDE-USER-AGENT"
+><SPAN
+CLASS="QUOTE"
+>"+hide-user-agent"</SPAN
+></A
+>,
+   etc.), headers are suppressed or forged as determined by these actions and
+   their parameters.
+  </P
+></LI
+><LI
+><P
+>   Now the web server starts sending its response back (i.e. typically a web
+   page).
+  </P
+></LI
+><LI
+><P
+>   First, the server headers are read and processed to determine, among other
+   things, the MIME type (document type) and encoding. The headers are then
+   filtered as determined by the 
+   <A
+HREF="actions-file.html#CRUNCH-INCOMING-COOKIES"
+><SPAN
+CLASS="QUOTE"
+>"+crunch-incoming-cookies"</SPAN
+></A
+>,
+   <A
+HREF="actions-file.html#SESSION-COOKIES-ONLY"
+><SPAN
+CLASS="QUOTE"
+>"+session-cookies-only"</SPAN
+></A
+>,
+   and <A
+HREF="actions-file.html#DOWNGRADE-HTTP-VERSION"
+><SPAN
+CLASS="QUOTE"
+>"+downgrade-http-version"</SPAN
+></A
+>
+   actions.
+  </P
+></LI
+><LI
+><P
+>   If any <A
+HREF="actions-file.html#FILTER"
+><SPAN
+CLASS="QUOTE"
+>"+filter"</SPAN
+></A
+> action
+   or <A
+HREF="actions-file.html#DEANIMATE-GIFS"
+><SPAN
+CLASS="QUOTE"
+>"+deanimate-gifs"</SPAN
+></A
 >
- and <SPAN
+   action applies (and the document type fits the action), the rest of the page is
+   read into memory (up to a configurable limit). Then the filter rules (from
+   <TT
+CLASS="FILENAME"
+>default.filter</TT
+> and any other filter files) are
+   processed against the buffered content. Filters are applied in the order
+   they are specified in one of the filter files. Animated GIFs, if present,
+   are reduced to either the first or last frame, depending on the action
+   setting.The entire page, which is now filtered, is then sent by
+   <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> back to your browser. 
+  </P
+><P
+>   If neither a <A
+HREF="actions-file.html#FILTER"
+><SPAN
+CLASS="QUOTE"
+>"+filter"</SPAN
+></A
+> action
+   or <A
+HREF="actions-file.html#DEANIMATE-GIFS"
+><SPAN
 CLASS="QUOTE"
->"filters"</SPAN
-> to any given URL can be complex, and not always so
+>"+deanimate-gifs"</SPAN
+></A
+>
+   matches, then <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> passes the raw data through 
+   to the client browser as it becomes available.
+  </P
+></LI
+><LI
+><P
+>   As the browser receives the now (possibly filtered) page content, it 
+   reads and then requests any URLs that may be embedded within the page
+   source, e.g. ad images, stylesheets, JavaScript, other HTML documents (e.g.
+   frames), sounds, etc. For each of these objects, the browser issues a
+   separate request (this is easily viewable in <SPAN
+CLASS="APPLICATION"
+>Privoxy's</SPAN
+>
+   logs). And each such request is in turn processed just as above. Note that a
+   complex web page will have many, many such embedded URLs. If these 
+   secondary requests are to a different server, then quite possibly a very 
+   differing set of actions is triggered.
+  </P
+></LI
+></UL
+></P
+><P
+> NOTE: This is somewhat of a simplistic overview of what happens with each URL
+ request. For the sake of brevity and simplicity, we have focused on 
+ <SPAN
+CLASS="APPLICATION"
+>Privoxy's</SPAN
+> core features only.</P
+></DIV
+><DIV
+CLASS="SECT2"
+><H2
+CLASS="SECT2"
+><A
+NAME="ACTIONSANAT"
+>14.4. Troubleshooting: Anatomy of an Action</A
+></H2
+><P
+> The way <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> applies 
+ <A
+HREF="actions-file.html#ACTIONS"
+>actions</A
+> and <A
+HREF="actions-file.html#FILTER"
+>filters</A
+>
+ to any given URL can be complex, and not always so
  easy to understand what is happening. And sometimes we need to be able to
- <I
+ <SPAN
+CLASS="emphasis"
+><I
 CLASS="EMPHASIS"
 >see</I
+></SPAN
 > just what <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
@@ -1071,16 +1349,44 @@ CLASS="APPLICATION"
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > is doing
- is causing us a problem inadvertantly. It can be a little daunting to look at
+ is causing us a problem inadvertently. It can be a little daunting to look at
  the actions and filters files themselves, since they tend to be filled with
- <SPAN
+ <A
+HREF="appendix.html#REGEX"
+>regular expressions</A
+> whose consequences are not
+ always so obvious. </P
+><P
+> One quick test to see if <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> is causing a problem 
+ or not, is to disable it temporarily. This should be the first troubleshooting 
+ step. See <A
+HREF="appendix.html#BOOKMARKLETS"
+>the Bookmarklets</A
+> section on a quick 
+ and easy way to do this (be sure to flush caches afterward!). Looking at the 
+ logs is a good idea too. (Note that both the toggle feature and logging are 
+ enabled via <TT
+CLASS="FILENAME"
+>config</TT
+> file settings, and may need to be 
+ turned <SPAN
 CLASS="QUOTE"
->"regular expressions"</SPAN
-> whose consequences are not always 
- so obvious. <SPAN
+>"on"</SPAN
+>.)</P
+><P
+> Another easy troubleshooting step to try is if you have done any
+ customization of your installation, revert back to the installed
+ defaults and see if that helps. There are times the developers get complaints
+ about one thing or another, and the problem is more related to a customized
+ configuration issue.</P
+><P
+> <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
-> provides the 
+> also provides the 
  <A
 HREF="http://config.privoxy.org/show-url-info"
 TARGET="_top"
@@ -1090,8 +1396,7 @@ TARGET="_top"
 CLASS="APPLICATION"
 >actions</SPAN
 >
- are being applied to any given URL. This is a big help for troubleshooting.
- </P
+ are being applied to any given URL. This is a big help for troubleshooting.</P
 ><P
 > First, enter one URL (or partial URL) at the prompt, and then
  <SPAN
@@ -1099,60 +1404,33 @@ CLASS="APPLICATION"
 >Privoxy</SPAN
 > will tell us 
  how the current configuration will handle it. This will not
- help with filtering effects from the <TT
-CLASS="FILENAME"
->default.filter</TT
-> file! It
- also will not tell you about any other URLs that may be embedded within the
- URL you are testing. For instance, images such as ads are expressed as URLs
- within the raw page source of HTML pages. So you will only get info for the
- actual URL that is pasted into the prompt area -- not any sub-URLs. If you
- want to know about embedded URLs like ads, you will have to dig those out of
- the HTML source. Use your browser's <SPAN
-CLASS="QUOTE"
->"View Page Source"</SPAN
-> option
- for this. Or right click on the ad, and grab the URL.</P
-><P
-> Let's look at an example, <A
+ help with filtering effects (i.e. the <A
+HREF="actions-file.html#FILTER"
+><SPAN
+CLASS="QUOTE"
+>"+filter"</SPAN
+></A
+> action) from
+ one of the filter files since this is handled very
+ differently and not so easy to trap! It also will not tell you about any other
+ URLs that may be embedded within the URL you are testing. For instance, images
+ such as ads are expressed as URLs within the raw page source of HTML pages. So
+ you will only get info for the actual URL that is pasted into the prompt area
+ -- not any sub-URLs. If you want to know about embedded URLs like ads, you
+ will have to dig those out of the HTML source. Use your browser's <SPAN
+CLASS="QUOTE"
+>"View
+ Page Source"</SPAN
+> option for this. Or right click on the ad, and grab the
+ URL.</P
+><P
+> Let's try an example, <A
 HREF="http://google.com"
 TARGET="_top"
 >google.com</A
 >, 
- one section at a time:</P
-><P
-> <TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
-><PRE
-CLASS="SCREEN"
-> System default actions:
-
- { -add-header -block -deanimate-gifs -downgrade -fast-redirects -filter 
-   -hide-forwarded -hide-from -hide-referer -hide-user-agent -image 
-   -image-blocker -limit-connect -no-compression -no-cookies-keep 
-   -no-cookies-read -no-cookies-set -no-popups -vanilla-wafer -wafer }
- </PRE
-></TD
-></TR
-></TABLE
-></P
-><P
-> This is the top section, and only tells us of the compiled in defaults. This 
- is basically what <SPAN
-CLASS="APPLICATION"
->Privoxy</SPAN
-> would do if there 
- were not any <SPAN
-CLASS="QUOTE"
->"actions"</SPAN
-> defined, i.e. it does nothing. Every action 
- is disabled. This is not particularly informative for our purposes here. OK,
- next section:</P
+ and look at it one section at a time in a sample configuration (your real 
+ configuration may vary):</P
 ><P
 > <TABLE
 BORDER="0"
@@ -1162,85 +1440,183 @@ WIDTH="100%"
 ><TD
 ><PRE
 CLASS="SCREEN"
->&#13; Matches for http://google.com:
+> Matches for http://www.google.com:
 
- { -add-header -block +deanimate-gifs -downgrade +fast-redirects 
-   +filter{html-annoyances} +filter{js-annoyances} +filter{no-popups} 
-   +filter{webbugs} +filter{nimda} +filter{banners-by-size} +filter{hal} 
-   +filter{fun} +hide-forwarded +hide-from{block} +hide-referer{forge} 
-   -hide-user-agent -image +image-blocker{blank} +no-compression 
-   +no-cookies-keep -no-cookies-read -no-cookies-set +no-popups 
-   -vanilla-wafer -wafer }
-   /
+ In file: default.action <SPAN
+CLASS="GUIBUTTON"
+>[ View ]</SPAN
+> <SPAN
+CLASS="GUIBUTTON"
+>[ Edit ]</SPAN
+>
 
- { -no-cookies-keep -no-cookies-read -no-cookies-set }
-  .google.com
+ {+change-x-forwarded-for{block}
+ +deanimate-gifs {last}
+ +fast-redirects {check-decoded-url}
+ +filter {refresh-tags}
+ +filter {img-reorder}
+ +filter {banners-by-size}
+ +filter {webbugs}
+ +filter {jumping-windows}
+ +filter {ie-exploits}
+ +hide-from-header {block}
+ +hide-referrer {forge}
+ +session-cookies-only
+ +set-image-blocker {pattern}
+/
+ { -session-cookies-only }
+ .google.com
 
  { -fast-redirects }
 .google.com
+ .google.com
 
- </PRE
+In file: user.action <SPAN
+CLASS="GUIBUTTON"
+>[ View ]</SPAN
+> <SPAN
+CLASS="GUIBUTTON"
+>[ Edit ]</SPAN
+>
+(no matches in this file)  </PRE
 ></TD
 ></TR
 ></TABLE
 ></P
 ><P
-> This is much more informative, and tells us how we have defined our 
- <SPAN
+> This is telling us how we have defined our 
+ <A
+HREF="actions-file.html#ACTIONS"
+><SPAN
 CLASS="QUOTE"
 >"actions"</SPAN
->, and which ones match for our example, 
- <SPAN
+></A
+>, and
+ which ones match for our test case, <SPAN
 CLASS="QUOTE"
 >"google.com"</SPAN
->. The first grouping shows our default 
- settings, which would apply to all URLs. If you look at your <SPAN
+>. 
+ Displayed is all the actions that are available to us. Remember,
+ the <TT
+CLASS="LITERAL"
+>+</TT
+> sign denotes <SPAN
 CLASS="QUOTE"
->"actions"</SPAN
+>"on"</SPAN
+>. <TT
+CLASS="LITERAL"
+>-</TT
 >
- file, this would be the section just below the <SPAN
+ denotes <SPAN
+CLASS="QUOTE"
+>"off"</SPAN
+>. So some are <SPAN
+CLASS="QUOTE"
+>"on"</SPAN
+> here, but many 
+ are <SPAN
+CLASS="QUOTE"
+>"off"</SPAN
+>. Each example we try may provide a slightly different
+ end result, depending on our configuration directives.</P
+><P
+> The first listing
+  is for our <TT
+CLASS="FILENAME"
+>default.action</TT
+> file. The large, multi-line
+  listing, is how the actions are set to match for all URLs, i.e. our default
+  settings. If you look at your <SPAN
+CLASS="QUOTE"
+>"actions"</SPAN
+> file, this would be the
+  section just below the <SPAN
 CLASS="QUOTE"
 >"aliases"</SPAN
-> section 
near the top. This applies to all URLs as signified by the single forward
slash -- <SPAN
+> section near the top. This
 will apply to all URLs as signified by the single forward slash at the end
 of the listing -- <SPAN
 CLASS="QUOTE"
->"/"</SPAN
->.
- </P
+>" / "</SPAN
+>.</P
 ><P
-> These are the default actions we have enabled. But we can define additional
- actions that would be exceptions to these general rules, and then list 
- specific URLs that these exceptions would apply to. Last match wins.
Just below this then are two explict matches for <SPAN
+> But we have defined additional actions that would be exceptions to these general
+ rules, and then we list specific URLs (or patterns) that these exceptions
+ would apply to. Last match wins. Just below this then are two explicit
+ matches for <SPAN
 CLASS="QUOTE"
 >".google.com"</SPAN
->.
- The first is negating our various cookie blocking actions (i.e. we will allow
- cookies here). The second is allowing <SPAN
+>. The first is negating our previous
+ cookie setting, which was for <A
+HREF="actions-file.html#SESSION-COOKIES-ONLY"
+><SPAN
 CLASS="QUOTE"
->"fast-redirects"</SPAN
->. Note
- that there is a leading dot here -- <SPAN
+>"+session-cookies-only"</SPAN
+></A
+>
+ (i.e. not persistent). So we will allow persistent cookies for google, at
+ least that is how it is in this example. The second turns
+ <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>off</I
+></SPAN
+> any <A
+HREF="actions-file.html#FAST-REDIRECTS"
+><SPAN
+CLASS="QUOTE"
+>"+fast-redirects"</SPAN
+></A
+>
+ action, allowing this to take place unmolested. Note that there is a leading
+ dot here -- <SPAN
 CLASS="QUOTE"
 >".google.com"</SPAN
->. This will
match any hosts and sub-domains, in the google.com domain also, such as
+>. This will match any hosts and
+ sub-domains, in the google.com domain also, such as
  <SPAN
 CLASS="QUOTE"
 >"www.google.com"</SPAN
->. So, apparently, we have these actions defined
- somewhere in the lower part of our actions file, and
+> or <SPAN
+CLASS="QUOTE"
+>"mail.google.com"</SPAN
+>. But it would not 
+ match <SPAN
+CLASS="QUOTE"
+>"www.google.de"</SPAN
+>! So, apparently, we have these two actions
+ defined as exceptions to the general rules at the top somewhere in the lower
+ part of our <TT
+CLASS="FILENAME"
+>default.action</TT
+> file, and
  <SPAN
 CLASS="QUOTE"
 >"google.com"</SPAN
-> is referenced in these sections.&#13;</P
+> is referenced somewhere in these latter sections.</P
+><P
+> Then, for our <TT
+CLASS="FILENAME"
+>user.action</TT
+> file, we again have no hits.
+ So there is nothing google-specific that we might have added to our own, local
+ configuration. If there was, those actions would over-rule any actions from 
+ previously processed files, such as <TT
+CLASS="FILENAME"
+>default.action</TT
+>.
+ <TT
+CLASS="FILENAME"
+>user.action</TT
+> typically has the last word. This is the
+ best place to put hard and fast exceptions,</P
 ><P
-> And now we pull it altogether in the bottom section and summarize how
+> And finally we pull it all together in the bottom section and summarize how
  <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
-> is appying all its <SPAN
+> is applying all its <SPAN
 CLASS="QUOTE"
 >"actions"</SPAN
 > 
@@ -1258,21 +1634,82 @@ WIDTH="100%"
 ><PRE
 CLASS="SCREEN"
 >&#13; Final results:
-
- -add-header -block -deanimate-gifs -downgrade -fast-redirects 
- +filter{html-annoyances} +filter{js-annoyances} +filter{no-popups} 
- +filter{webbugs} +filter{nimda} +filter{banners-by-size} +filter{hal} 
- +filter{fun} +hide-forwarded +hide-from{block} +hide-referer{forge} 
- -hide-user-agent -image +image-blocker{blank} -limit-connect +no-compression 
- -no-cookies-keep -no-cookies-read -no-cookies-set +no-popups -vanilla-wafer 
- -wafer
-
- </PRE
+ -add-header
+ -block
+ +change-x-forwarded-for{block} 
+ -client-header-filter{hide-tor-exit-notation}
+ -content-type-overwrite
+ -crunch-client-header
+ -crunch-if-none-match
+ -crunch-incoming-cookies
+ -crunch-outgoing-cookies
+ -crunch-server-header
+ +deanimate-gifs {last}
+ -downgrade-http-version
+ -fast-redirects
+ -filter {js-events}
+ -filter {content-cookies}
+ -filter {all-popups}
+ -filter {banners-by-link}
+ -filter {tiny-textforms}
+ -filter {frameset-borders}
+ -filter {demoronizer}
+ -filter {shockwave-flash}
+ -filter {quicktime-kioskmode}
+ -filter {fun}
+ -filter {crude-parental}
+ -filter {site-specifics}
+ -filter {js-annoyances}
+ -filter {html-annoyances}
+ +filter {refresh-tags}
+ -filter {unsolicited-popups}
+ +filter {img-reorder}
+ +filter {banners-by-size}
+ +filter {webbugs}
+ +filter {jumping-windows}
+ +filter {ie-exploits}
+ -filter {google}
+ -filter {yahoo}
+ -filter {msn}
+ -filter {blogspot}
+ -filter {no-ping}
+ -force-text-mode
+ -handle-as-empty-document
+ -handle-as-image
+ -hide-accept-language
+ -hide-content-disposition
+ +hide-from-header {block}
+ -hide-if-modified-since
+ +hide-referrer {forge}
+ -hide-user-agent
+ -limit-connect
+ -overwrite-last-modified
+ -prevent-compression
+ -redirect
+ -server-header-filter{xml-to-html}
+ -server-header-filter{html-to-xml} 
+ -session-cookies-only
+ +set-image-blocker {pattern} </PRE
 ></TD
 ></TR
 ></TABLE
 ></P
 ><P
+> Notice the only difference here to the previous listing, is to 
+ <SPAN
+CLASS="QUOTE"
+>"fast-redirects"</SPAN
+> and <SPAN
+CLASS="QUOTE"
+>"session-cookies-only"</SPAN
+>,
+ which are activated specifically for this site in our configuration, 
+ and thus show in the <SPAN
+CLASS="QUOTE"
+>"Final Results"</SPAN
+>.</P
+><P
 > Now another example, <SPAN
 CLASS="QUOTE"
 >"ad.doubleclick.net"</SPAN
@@ -1286,35 +1723,40 @@ WIDTH="100%"
 ><TD
 ><PRE
 CLASS="SCREEN"
->&#13; { +block +image }
-  .ad.doubleclick.net
-
- { +block +image }
+>&#13; { +block{Domains starts with "ad"} }
   ad*.
 
- { +block +image }
-  .doubleclick.net
+ { +block{Domain contains "ad"} }
+  .ad.
 
- </PRE
+ { +block{Doubleclick banner server} +handle-as-image }
+  .[a-vx-z]*.doubleclick.net</PRE
 ></TD
 ></TR
 ></TABLE
 ></P
 ><P
-> We'll just show the interesting part here, the explicit matches. It is 
- matched three different times. Each as an <SPAN
+> We'll just show the interesting part here - the explicit matches. It is 
+ matched three different times. Two <SPAN
+CLASS="QUOTE"
+>"+block{}"</SPAN
+> sections, 
+ and a <SPAN
 CLASS="QUOTE"
->"+block +image"</SPAN
+>"+block{} +handle-as-image"</SPAN
 >,
  which is the expanded form of one of our aliases that had been defined as: 
  <SPAN
 CLASS="QUOTE"
->"+imageblock"</SPAN
->. (<SPAN
+>"+block-as-image"</SPAN
+>. (<A
+HREF="actions-file.html#ALIASES"
+><SPAN
 CLASS="QUOTE"
 >"Aliases"</SPAN
-> are defined in the 
- first section of the actions file and typically used to combine more 
+></A
+> are defined in
+ the first section of the actions file and typically used to combine more 
  than one action.)</P
 ><P
 > Any one of these would have done the trick and blocked this as an unwanted 
@@ -1325,27 +1767,41 @@ CLASS="QUOTE"
 CLASS="QUOTE"
 >"ad.doubleclick.net"</SPAN
 >
- is done here -- as both a <SPAN
+ is done here -- as both a <A
+HREF="actions-file.html#BLOCK"
+><SPAN
 CLASS="QUOTE"
->"+block"</SPAN
-> <I
+>"+block{}"</SPAN
+></A
+>
+ <SPAN
+CLASS="emphasis"
+><I
 CLASS="EMPHASIS"
 >and</I
-> an
- <SPAN
+></SPAN
+> an 
+ <A
+HREF="actions-file.html#HANDLE-AS-IMAGE"
+><SPAN
 CLASS="QUOTE"
->"+image"</SPAN
->. The custom alias <SPAN
+>"+handle-as-image"</SPAN
+></A
+>.
+ The custom alias <SPAN
 CLASS="QUOTE"
->"+imageblock"</SPAN
-> does this
- for us.</P
+>"<TT
+CLASS="LITERAL"
+>+block-as-image</TT
+>"</SPAN
+> just
+ simplifies the process and make it more readable.</P
 ><P
 > One last example. Let's try <SPAN
 CLASS="QUOTE"
->"http://www.rhapsodyk.net/adsl/HOWTO/"</SPAN
+>"http://www.example.net/adsl/HOWTO/"</SPAN
 >.
- This one is giving us problems. We are getting a blank page. Hmmm...</P
+ This one is giving us problems. We are getting a blank page. Hmmm ...</P
 ><P
 > <TABLE
 BORDER="0"
@@ -1355,21 +1811,74 @@ WIDTH="100%"
 ><TD
 ><PRE
 CLASS="SCREEN"
->&#13; Matches for http://www.rhapsodyk.net/adsl/HOWTO/:
+>&#13; Matches for http://www.example.net/adsl/HOWTO/:
 
- { -add-header -block +deanimate-gifs -downgrade +fast-redirects 
-   +filter{html-annoyances} +filter{js-annoyances} +filter{no-popups} 
-   +filter{webbugs} +filter{nimda} +filter{banners-by-size} +filter{hal} 
-   +filter{fun} +hide-forwarded +hide-from{block} +hide-referer{forge} 
-   -hide-user-agent -image +image-blocker{blank} +no-compression 
-   +no-cookies-keep -no-cookies-read -no-cookies-set +no-popups 
-   -vanilla-wafer -wafer }
-   /
+ In file: default.action <SPAN
+CLASS="GUIBUTTON"
+>[ View ]</SPAN
+> <SPAN
+CLASS="GUIBUTTON"
+>[ Edit ]</SPAN
+>
 
- { +block +image }
-  /ads
+ {-add-header 
+  -block
+  +change-x-forwarded-for{block} 
+  -client-header-filter{hide-tor-exit-notation}
+  -content-type-overwrite
+  -crunch-client-header
+  -crunch-if-none-match
+  -crunch-incoming-cookies
+  -crunch-outgoing-cookies
+  -crunch-server-header
+  +deanimate-gifs 
+  -downgrade-http-version 
+  +fast-redirects {check-decoded-url}
+  -filter {js-events}
+  -filter {content-cookies}
+  -filter {all-popups}
+  -filter {banners-by-link}
+  -filter {tiny-textforms}
+  -filter {frameset-borders}
+  -filter {demoronizer}
+  -filter {shockwave-flash}
+  -filter {quicktime-kioskmode}
+  -filter {fun}
+  -filter {crude-parental}
+  -filter {site-specifics}
+  -filter {js-annoyances}
+  -filter {html-annoyances}
+  +filter {refresh-tags}
+  -filter {unsolicited-popups}
+  +filter {img-reorder}
+  +filter {banners-by-size}
+  +filter {webbugs}
+  +filter {jumping-windows}
+  +filter {ie-exploits}
+  -filter {google}
+  -filter {yahoo}
+  -filter {msn}
+  -filter {blogspot}
+  -filter {no-ping}
+  -force-text-mode
+  -handle-as-empty-document
+  -handle-as-image 
+  -hide-accept-language
+  -hide-content-disposition  
+  +hide-from-header{block} 
+  +hide-referer{forge} 
+  -hide-user-agent 
+  -overwrite-last-modified
+  +prevent-compression 
+  -redirect
+  -server-header-filter{xml-to-html}
+  -server-header-filter{html-to-xml} 
+  +session-cookies-only 
+  +set-image-blocker{blank} }
+   /
 
- </PRE
+ { +block{Path contains "ads".} +handle-as-image }
+  /ads</PRE
 ></TD
 ></TR
 ></TABLE
@@ -1381,17 +1890,38 @@ CLASS="QUOTE"
 > is matching <SPAN
 CLASS="QUOTE"
 >"/ads"</SPAN
->! But 
- we did not want this at all! Now we see why we get the blank page. We could
- now add a new action below this that explictly does <I
+> in our 
+ configuration! But we did not want this at all! Now we see why we get the
+ blank page. It is actually triggering two different actions here, and 
+ the effects are aggregated so that the URL is blocked, and <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> is told 
+ to treat the block as if it were an image. But this is, of course, all wrong.
+  We could now add a new action below this (or better in our own
+  <TT
+CLASS="FILENAME"
+>user.action</TT
+> file) that explicitly
+  <SPAN
+CLASS="emphasis"
+><I
 CLASS="EMPHASIS"
->not</I
->
- block (-block) pages with <SPAN
+>un</I
+></SPAN
+> blocks (
+  <A
+HREF="actions-file.html#BLOCK"
+><SPAN
+CLASS="QUOTE"
+>"{-block}"</SPAN
+></A
+>) paths with
+  <SPAN
 CLASS="QUOTE"
 >"adsl"</SPAN
->. There are various ways to
- handle such exceptions. Example:</P
+> in them (remember, last match in the configuration
 wins). There are various ways to handle such exceptions. Example:</P
 ><P
 > <TABLE
 BORDER="0"
@@ -1402,16 +1932,16 @@ WIDTH="100%"
 ><PRE
 CLASS="SCREEN"
 >&#13; { -block }
-  /adsl
- </PRE
+  /adsl</PRE
 ></TD
 ></TR
 ></TABLE
 ></P
 ><P
-> Now the page displays ;-) Be sure to flush your browser's caches when 
- making such changes. Or, try using <TT
+> Now the page displays ;-) 
+ Remember to flush your browser's caches when making these kinds of changes to
+ your configuration to insure that you get a freshly delivered page! Or, try
+ using <TT
 CLASS="LITERAL"
 >Shift+Reload</TT
 >.</P
@@ -1427,26 +1957,36 @@ WIDTH="100%"
 ><TD
 ><PRE
 CLASS="SCREEN"
->&#13; { -block }
-  /adsl
- </PRE
+>&#13; { +block{Path starts with "ads".} +handle-as-image }
+ /ads</PRE
 ></TD
 ></TR
 ></TABLE
 ></P
 ><P
-> That actually was very telling and pointed us quickly to where the problem
+> That actually was very helpful and pointed us quickly to where the problem
  was. If you don't get this kind of match, then it means one of the default 
- rules in the first section is causing the problem. This would require some 
- guesswork, and maybe a little trial and error to isolate the offending rule.
- One likely cause would be one of the <SPAN
+ rules in the first section of <TT
+CLASS="FILENAME"
+>default.action</TT
+> is causing
+ the problem. This would require some guesswork, and maybe a little trial and
+ error to isolate the offending rule. One likely cause would be one of the
+ <A
+HREF="actions-file.html#FILTER"
+><SPAN
 CLASS="QUOTE"
->"{+filter}"</SPAN
-> actions. Try 
- adding the URL for the site to one of aliases that turn off <SPAN
+>"+filter"</SPAN
+></A
+> actions.
+ These tend to be harder to troubleshoot.
+ Try adding the URL for the site to one of aliases that turn off
+ <A
+HREF="actions-file.html#FILTER"
+><SPAN
 CLASS="QUOTE"
 >"+filter"</SPAN
+></A
 >:</P
 ><P
 > <TABLE
@@ -1457,14 +1997,12 @@ WIDTH="100%"
 ><TD
 ><PRE
 CLASS="SCREEN"
->&#13; {shop}
+>&#13; { shop }
  .quietpc.com
  .worldpay.com   # for quietpc.com
  .jungle.com
  .scan.co.uk
- .forbes.com
- </PRE
+ .forbes.com</PRE
 ></TD
 ></TR
 ></TABLE
@@ -1472,16 +2010,22 @@ CLASS="SCREEN"
 ><P
 > <SPAN
 CLASS="QUOTE"
->"{shop}"</SPAN
+>"<TT
+CLASS="LITERAL"
+>{ shop }</TT
+>"</SPAN
 > is an <SPAN
 CLASS="QUOTE"
 >"alias"</SPAN
 > that expands to 
  <SPAN
 CLASS="QUOTE"
->"{ -filter -no-cookies -no-cookies-keep }"</SPAN
->. Or you could do 
- your own exception to negate filtering:&#13;</P
+>"<TT
+CLASS="LITERAL"
+>{ -filter -session-cookies-only }</TT
+>"</SPAN
+>.
+ Or you could do your own exception to negate filtering:&#13;</P
 ><P
 > <TABLE
 BORDER="0"
@@ -1491,22 +2035,97 @@ WIDTH="100%"
 ><TD
 ><PRE
 CLASS="SCREEN"
->&#13; {-filter}
+>&#13; { -filter }
+ # Disable ALL filter actions for sites in this section
  .forbes.com
- </PRE
+ developer.ibm.com
+ localhost</PRE
+></TD
+></TR
+></TABLE
+></P
+><P
+> This would turn off all filtering for these sites. This is best
+ put in <TT
+CLASS="FILENAME"
+>user.action</TT
+>, for local site
+ exceptions. Note that when a simple domain pattern is used by itself (without
+ the subsequent path portion), all sub-pages within that domain are included 
+ automatically in the scope of the action.</P
+><P
+> Images that are inexplicably being blocked, may well be hitting the 
+<A
+HREF="actions-file.html#FILTER-BANNERS-BY-SIZE"
+><SPAN
+CLASS="QUOTE"
+>"+filter{banners-by-size}"</SPAN
+></A
+>
+ rule, which assumes 
+ that images of certain sizes are ad banners (works well 
+ <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>most of the time</I
+></SPAN
+>  since these tend to be standardized).</P
+><P
+> <SPAN
+CLASS="QUOTE"
+>"<TT
+CLASS="LITERAL"
+>{ fragile }</TT
+>"</SPAN
+> is an alias that disables most
+ actions that are the most likely to cause trouble. This can be used as a
+ last resort for problem sites. </P
+><P
+> <TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%"
+><TR
+><TD
+><PRE
+CLASS="SCREEN"
+>&#13; { fragile }
+ # Handle with care: easy to break
+ mail.google.
+ mybank.example.com</PRE
 ></TD
 ></TR
 ></TABLE
 ></P
 ><P
 > <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>Remember to flush caches!</I
+></SPAN
+> Note that the 
+ <TT
+CLASS="LITERAL"
+>mail.google</TT
+> reference lacks the TLD portion (e.g. 
+ <SPAN
 CLASS="QUOTE"
->"{fragile}"</SPAN
-> is an alias that disables most actions. This can be 
- used as a last resort for problem sites. Remember to flush caches! If this 
- still does not work, you will have to go through the remaining actions one by
- one to find which one(s) is causing the problem.</P
+>".com"</SPAN
+>). This will effectively match any TLD with 
+ <TT
+CLASS="LITERAL"
+>google</TT
+> in it, such as <TT
+CLASS="LITERAL"
+>mail.google.de.</TT
+>, 
+ just as an example.</P
+><P
+> 
+ If this still does not work, you will have to go through the remaining
+ actions one by one to find which one(s) is causing the problem.</P
 ></DIV
 ></DIV
 ><DIV
@@ -1514,6 +2133,7 @@ CLASS="NAVFOOTER"
 ><HR
 ALIGN="LEFT"
 WIDTH="100%"><TABLE
+SUMMARY="Footer navigation table"
 WIDTH="100%"
 BORDER="0"
 CELLPADDING="0"
@@ -1525,6 +2145,7 @@ ALIGN="left"
 VALIGN="top"
 ><A
 HREF="seealso.html"
+ACCESSKEY="P"
 >Prev</A
 ></TD
 ><TD
@@ -1533,6 +2154,7 @@ ALIGN="center"
 VALIGN="top"
 ><A
 HREF="index.html"
+ACCESSKEY="H"
 >Home</A
 ></TD
 ><TD