Syncing from 3.0 branch - 2.9.16
[privoxy.git] / doc / source / user-manual.sgml
1 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
2 <!entity % dummy "IGNORE"> 
3 <!entity supported SYSTEM "supported.sgml">
4 <!entity newfeatures SYSTEM "newfeatures.sgml">
5 <!entity p-intro SYSTEM "privoxy.sgml">
6 <!entity seealso SYSTEM "seealso.sgml">
7 <!entity buildsource SYSTEM "buildsource.sgml">
8 <!entity contacting SYSTEM "contacting.sgml">
9 <!entity history SYSTEM "history.sgml">
10 <!entity copyright SYSTEM "copyright.sgml">
11 <!entity license SYSTEM "license.sgml">
12 <!entity p-authors SYSTEM "p-authors.sgml">
13 <!entity config SYSTEM "p-config.sgml">
14 <!entity p-version "2.9.16">
15 <!entity p-status "beta">
16 <!entity % p-authors-formal "INCLUDE"> <!-- include additional text, etc  -->
17 <!entity % p-not-stable "INCLUDE">
18 <!entity % p-stable "IGNORE">
19 <!entity % p-text "IGNORE">        <!-- define we are not a text only doc -->
20 <!entity % p-doc "INCLUDE">        <!-- and we are a formal doc           -->
21 <!entity % p-readme "IGNORE">
22 <!entity % user-man "IGNORE">
23 <!entity % config-file "IGNORE">
24 <!entity % p-supp-userman "IGNORE"> <!-- Omit some from supported.sgml    -->
25 <!entity  my-copy "&copy;">         <!-- kludge for docbook2man           -->
26 <!entity % draft "IGNORE">          <!-- WIP stuff    -->
27 ]>
28 <!--
29  File        :  $Source: /cvsroot/ijbswa/current/doc/source/user-manual.sgml,v $
30
31  Purpose     :  user manual
32                 This file belongs into
33                 ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
34
35  $Id: user-manual.sgml,v 1.123.2.11 2002/07/26 15:20:31 oes Exp $
36
37  Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
38  See LICENSE.
39
40  ========================================================================
41  NOTE: Please read developer-manual/documentation.html before touching 
42  anything in this, or other Privoxy documentation.
43  ========================================================================
44
45 -->
46
47 <article id="index">
48 <artheader>
49
50 <title>Privoxy &p-version; User Manual</title>
51
52 <pubdate>
53  <subscript>
54 <!-- Completely the wrong markup, but very little is allowed  -->
55 <!-- in this part of an article. FIXME -->
56  <link linkend="copyright">Copyright</link> &my-copy; 2001, 2002 by 
57  <ulink url="http://www.privoxy.org/">Privoxy Developers</ulink>
58  </subscript>
59 </pubdate>
60
61 <pubdate>$Id: user-manual.sgml,v 1.123.2.11 2002/07/26 15:20:31 oes Exp $</pubdate>
62
63 <!--
64
65 Note: the following should generate a separate page, and a live link to it,
66 all nicely done. But it doesn't for some mysterious reason. Please leave
67 commented unless it can be fixed proper. For the time being, the
68 copyright/license declarations will be in their own sgml.
69
70 Hal.
71
72 <copyright>
73   <year>2001</year>
74   <year>2002</year>
75   <holder>Privoxy Developers</holder>
76 </copyright>
77
78 <legalnotice id="legalnotice"> 
79  <para>
80   text goes here ........
81  </para>
82 </legalnotice>
83
84 -->
85
86
87 <abstract>
88
89 <![%dummy;[
90  <para>
91  <comment>
92   This is here to keep vim syntax file from breaking :/
93   If I knew enough to fix it, I would.
94   PLEASE DO NOT REMOVE! HB: hal@foobox.net
95  </comment>
96  </para>
97 ]]>
98
99  <para>
100   The <citetitle>User Manual</citetitle> gives users information on how to
101   install, configure and use <ulink
102   url="http://www.privoxy.org/"><application>Privoxy</application></ulink>.
103  </para>
104
105 <!-- Include privoxy.sgml boilerplate: -->
106  &p-intro;
107 <!-- end privoxy.sgml -->
108
109  <para>
110   You can find the latest version of the <citetitle>User Manual</citetitle> at  <ulink
111   url="http://www.privoxy.org/user-manual/">http://www.privoxy.org/user-manual/</ulink>.
112   Please see the <ulink url="contact.html">Contact section</ulink> on how to
113   contact the developers.
114  </para>
115
116 <!--   <para> -->
117 <!--    Feel free to send a note to the developers at <email>ijbswa-developers@lists.sourceforge.net</email>. -->
118 <!--   </para> -->
119 </abstract>
120
121 </artheader>
122
123 <!--   ~~~~~       New section      ~~~~~     -->
124 <sect1 label="1" id="introduction"><title>Introduction</title>
125 <para>
126  This documentation is included with the current &p-status; version of
127  <application>Privoxy</application>, v.&p-version;<![%p-not-stable;[, 
128  and is mostly complete at this point. The most up to date reference for the
129  time being is still the comments in the source files and in the individual
130  configuration files. Development of version 3.0 is currently nearing
131  completion, and includes many significant changes and enhancements over
132  earlier versions. The target release date for
133  stable v3.0 is <quote>soon</quote> ;-)]]>.
134 </para>
135
136 <!-- include only in non-stable versions -->
137 <![%p-not-stable;[
138 <para>
139  Since this is a &p-status; version, not all new features are well tested. This
140  documentation may be slightly out of sync as a result (especially with 
141  CVS sources). And there <emphasis>may be</emphasis> bugs, though hopefully
142  not many! 
143 </para>
144 ]]>
145
146 <!--   ~~~~~       New section      ~~~~~     -->
147 <sect2 id="features"><title>Features</title>
148 <para>
149  In addition to <application>Internet Junkbuster's</application> traditional
150  features of ad and banner blocking and cookie management,
151  <application>Privoxy</application> provides new features<![%p-not-stable;[,
152  some of them currently under development]]>:
153 </para>
154 <!-- Include newfeatures.sgml boilerplate here: -->
155  &newfeatures;
156 <!-- end boilerplate -->
157 </sect2>
158
159 </sect1>
160
161 <!--  ~  End section  ~  -->
162
163
164 <!--   ~~~~~       New section      ~~~~~     -->
165 <sect1 id="installation"><title>Installation</title>
166
167 <para>
168  <application>Privoxy</application> is available both in convenient pre-compiled
169  packages for a wide range of operating systems, and as raw source code.
170  For most users, we recommend using the packages, which can be downloaded from our
171  <ulink url="http://sourceforge.net/projects/ijbswa/">Privoxy Project
172  Page</ulink>.
173 </para>
174
175 <para>
176  Note: If you have a previous <application>Junkbuster</application> or
177  <application>Privoxy</application> installation on your system, you
178  will need to remove it.  On some platforms, this may be done for you as part
179  of their installation procedure. (See below for your platform). In any case
180  <emphasis>be sure to backup your old configuration if it is valuable to
181  you.</emphasis> See the <link linkend="upgradersnote">note to
182  upgraders</link> section below.
183 </para>
184
185 <!--   ~~~~~       New section      ~~~~~     --> 
186 <sect2 id="installation-packages"><title>Binary Packages</title>
187 <para>
188 How to install the binary packages depends on your operating system:
189 </para>
190
191 <!--   ~~~~~       New section      ~~~~~     -->
192 <sect3 id="installation-pack-rpm"><title>Red Hat, SuSE and Conectiva RPMs</title>
193
194 <para>
195  RPMs can be installed with <literal>rpm -Uvh privoxy-&p-version;-1.rpm</literal>,
196  and will use <filename>/etc/privoxy</filename> for the location 
197  of configuration files.
198 </para>
199
200 <para>
201  Note that on Red Hat, <application>Privoxy</application> will
202  <emphasis>not</emphasis> be automatically started on system boot. You will
203  need to enable that using <command>chkconfig</command>,
204  <command>ntsysv</command>, or similar methods. Note that SuSE will 
205 automatically start Privoxy in the boot process.
206 </para>
207
208 <para>
209  If you have problems with failed dependencies, try rebuilding the SRC RPM: 
210  <literal>rpm --rebuild privoxy-&p-version;-1.src.rpm</literal>. This 
211  will use your locally installed libraries and RPM version. 
212 </para>
213
214 <para>
215  Also note that if you have a <application>Junkbuster</application> RPM installed
216  on your system, you need to remove it first, because the packages conflict.
217  Otherwise, RPM will try to remove <application>Junkbuster</application>
218  automatically, before installing <application>Privoxy</application>.
219 </para>
220 </sect3>
221
222 <!--   ~~~~~       New section      ~~~~~     -->
223 <sect3 id="installation-deb"><title>Debian</title>
224 <para>
225  DEBs can be installed with <literal>dpkg -i
226  privoxy_&p-version;-1.deb</literal>, and will use
227  <filename>/etc/privoxy</filename> for the location of configuration
228  files.
229 </para>
230 </sect3>
231
232 <!--   ~~~~~       New section      ~~~~~     -->
233 <sect3 id="installation-pack-win"><title>Windows</title>
234
235 <para>
236  Just double-click the installer, which will guide you through
237  the installation process. You will find the configuration files
238  in the same directory as you installed Privoxy in. We do not
239  use the registry of Windows. 
240 </para>
241 </sect3>
242
243 <!--   ~~~~~       New section      ~~~~~     -->
244 <sect3 id="installation-pack-bintgz"><title>Solaris, NetBSD, FreeBSD, HP-UX</title>
245
246 <para>
247  Create a new directory, <literal>cd</literal> to it, then unzip and
248  untar the archive. For the most part, you'll have to figure out where
249  things go. <!-- FIXME, more info needed? -->
250 </para>
251 </sect3>
252
253 <!--   ~~~~~       New section      ~~~~~     -->
254 <sect3 id="installation-os2"><title>OS/2</title>
255
256 <para>
257  First, make sure that no previous installations of
258  <application>Junkbuster</application> and / or 
259  <application>Privoxy</application> are left on your
260  system. Check that no <application>Junkbuster</application>
261  or <application>Privoxy</application> objects are in
262  your startup folder.
263
264 </para>
265
266 <para>
267  Then, just double-click the WarpIN self-installing archive, which will
268  guide you through the installation process. A shadow of the
269  <application>Privoxy</application> executable will be placed in your
270  startup folder so it will start automatically whenever OS/2 starts.
271 </para>
272
273 <para>
274  The directory you choose to install <application>Privoxy</application>
275  into will contain all of the configuration files.
276 </para>
277 </sect3>
278
279 <!--   ~~~~~       New section      ~~~~~     -->
280 <sect3 id="installation-mac"><title>Mac OSX</title>
281 <para>
282  Unzip the downloaded package (you can either double-click on the file
283  in the finder, or on the desktop if you downloaded it there).  The
284  Privoxy.pkg package should appear after unzipping. Then,
285  double-click on that Privoxy.pkg package installer icon and follow
286  the installation process.
287  <application>Privoxy</application> will be installed in the folder
288  <literal>/Library/Privoxy</literal>.
289  It will run automatically whenever you start up.  To prevent it from
290  running automatically, remove or rename the folder
291  <literal>/Library/StartupItems/Privoxy</literal>. 
292 </para>
293 <para>
294  To run Privoxy by hand, double-click on 
295  <literal>RunPrivoxy.command</literal>.
296  To run Privoxy from Terminal, execute
297  <literal>/Library/Privoxy/RunPrivoxy.command</literal>. 
298 </para>
299 </sect3>
300
301 <!--   ~~~~~       New section      ~~~~~     -->
302 <sect3 id="installation-amiga"><title>AmigaOS</title>
303 <para>
304  Copy and then unpack the <filename>lha</filename> archive to a suitable location. 
305  All necessary files will be installed into <application>Privoxy</application>
306  directory, including all configuration and log files. To uninstall, just 
307  remove this directory.
308 </para>
309 </sect3>
310 </sect2>
311
312 <!--   ~~~~~       New section      ~~~~~     -->
313 <sect2 id="installation-source"><title>Building from Source</title>
314
315 <para>
316  The most convenient way to obtain the <application>Privoxy</application> sources
317  is to download the source tarball from our <ulink url="http://sf.net/projects/ijbswa/">project
318  page</ulink>.
319 </para>
320
321 <para>
322  If you like to live on the bleeding edge and are not afraid of using
323  possibly unstable development versions, you can check out the up-to-the-minute
324  version directly from <ulink url="http://sourceforge.net/cvs/?group_id=11118">the
325  CVS repository</ulink> or simply download <ulink
326  url="http://cvs.sourceforge.net/cvstarballs/ijbswa-cvsroot.tar.gz">the nightly CVS
327  tarball.</ulink>
328 </para>
329
330 <!-- include buildsource.sgml boilerplate: -->
331 &buildsource;
332 <!-- end boilerplate -->
333
334 </sect2>
335 <!--   ~~~~~       New section      ~~~~~     --> 
336 <sect2 id="installation-keepupdated"><title>Keeping your Installation Up-to-Date</title>
337 <para>
338  As user feedback comes in and development continues, we will make updated versions
339  of both the software and the main <link linkend="actions-file">actions file</link>
340  (<literal>default.action</literal>) available for download.
341 </para>
342
343 <para>
344  If you wish to receive an email notification whenever we release updates of
345  <application>Privoxy</application> or the actions file, <ulink
346  url="http://lists.sourceforge.net/lists/listinfo/ijbswa-announce/">subscribe
347  to our announce  mailing list</ulink>, ijbswa-announce@lists.sourceforge.net.
348 </para>
349
350 <para>
351  Both can be downloaded from the <ulink
352  url="http://sourceforge.net/project/showfiles.php?group_id=11118">files
353  section</ulink> on <ulink url="http://sourceforge.net/">SourceForge</ulink>.
354 </para>
355
356 <para>
357  In order not to loose your personal changes and adjustments when updating
358  to the latest <literal>default.action</literal> file we <emphasis>strongly
359  recommend</emphasis> that you use <literal>user.action</literal> for your
360  customization of <application>Privoxy</application>. See the <link
361  linkend="actions-file">Chapter on actions files</link> for details.
362 </para>
363
364 </sect2>
365
366
367 </sect1>
368
369 <!--  ~  End section  ~  -->
370
371 <!--   ~~~~~       New section      ~~~~~     -->
372 <sect1 id="upgradersnote">
373 <title>Note to Upgraders</title>
374 <para>
375  There are very significant changes from earlier 
376  <application>Junkbuster</application> versions to the current
377  <application>Privoxy</application>. The number, names, syntax, and
378  purposes of configuration files have substantially  changed.
379  <application>Junkbuster 2.0.x</application> configuration
380  files will not migrate, <application>Junkbuster 2.9.x</application>
381  and <application>Privoxy</application> configurations will need to be
382  ported. The functionalities of the old <filename>blockfile</filename>,
383  <filename>cookiefile</filename> and <filename>imagelist</filename> 
384  are now combined into the <link linkend="actions-file"><quote>actions
385  files</quote></link>.  
386  <filename>default.action</filename>, is the main actions file. Local
387  exceptions should best be put into <filename>user.action</filename>.
388 </para>
389 <para>
390  A <link linkend="filter-file"><quote>filter file</quote></link> (typically
391  <filename>default.filter</filename>) is new as of <application>Privoxy
392  2.9.x</application>, and provides some of the new sophistication (explained
393  below). <filename>config</filename> is much the same as before.
394 </para>
395 <para>
396  If upgrading from a 2.0.x version, you will have to use the new config 
397  files, and possibly adapt any personal rules from your older files.
398  When porting personal rules over from the old <filename>blockfile</filename>
399  to the new actions files, please note that even the pattern syntax has
400  changed. If upgrading from 2.9.x development versions, it is still
401  recommended to use the new configuration files.
402 </para>
403 <para>
404  A quick list of things to be aware of before upgrading: 
405 </para>
406
407 <para>
408  <itemizedlist>
409
410  <listitem>
411   <para>
412    The default listening port is now 8118 due to a conflict with another 
413    service (NAS).
414   </para>
415  </listitem>  
416  <listitem>
417   <para>  
418     Some installers may remove earlier versions completely. Save any 
419     important configuration files!
420   </para>
421  </listitem>
422  <listitem>
423   <para>
424    <application>Privoxy</application> is controllable with a web browser 
425    at the special URL: <ulink
426    url="http://config.privoxy.org/">http://config.privoxy.org/</ulink>
427    (Shortcut: <ulink url="http://p.p/">http://p.p/</ulink>). Many
428    aspects of configuration can be done here, including temporarily disabling
429    <application>Privoxy</application>.
430   </para>
431  </listitem> 
432  <listitem>
433   <para>
434    The primary configuration files for cookie management, ad and banner 
435    blocking, and many other aspects of <application>Privoxy</application>
436    configuration are the <link linkend="actions-file">actions
437    files</link>. It is strongly recommended to become familiar with the new
438    actions concept below, before modifying these files. Locally defined rules 
439    should go into <filename>user.action</filename>.
440   </para>
441  </listitem> 
442   <listitem>
443   <para>
444 <!-- I think it is best to keep this somewhat vague, in case  -->
445 <!-- the situation changes under our feet. -->   
446    Some installers may not automatically start
447    <application>Privoxy</application> after installation.
448   </para>
449  </listitem> 
450
451  </itemizedlist>
452 </para>
453 </sect1>
454
455 <!--   ~~~~~       New section      ~~~~~     -->
456 <sect1 id="quickstart"><title>Quickstart to Using <application>Privoxy</application></title>
457 <para>
458  <itemizedlist>
459
460  <listitem>
461   <para>
462    If upgrading, from versions before 2.9.16, please back up any configuration
463    files. See the <link linkend="upgradersnote">Note to Upgraders</link> Section.
464  </para>
465 </listitem> 
466
467  <listitem>
468   <para>
469   Install <application>Privoxy</application>. See the <link
470   linkend="installation">Installation Section</link> below for platform specific
471   information. 
472  </para>
473  </listitem>  
474
475  <listitem>
476   <para>
477    Advanced users and those who want to offer <application>Privoxy</application>
478    service to more than just their local machine should check the <link
479    linkend="config">main config file</link>, especially the <link
480    linkend="access-control">security-relevant</link> options. These are 
481    off by default.
482   </para>
483  </listitem>  
484
485  <listitem>
486   <para>
487   Start <application>Privoxy</application>, if the installation program has
488   not done this already (may vary according to platform). See the section
489   <link linkend="startup">Starting <application>Privoxy</application></link>.
490   </para>
491  </listitem>
492
493  <listitem>
494   <para>
495    Set your browser to use <application>Privoxy</application> as HTTP and
496    HTTPS proxy by setting the proxy configuration for address of
497    <literal>127.0.0.1</literal> and port <literal>8118</literal>.
498    (<application>Junkbuster</application> and earlier versions of
499    <application>Privoxy</application> used port 8000.) See the section <link
500    linkend="startup">Starting <application>Privoxy</application></link> below
501    for more details on this.
502   </para>
503  </listitem>  
504
505  <listitem>
506   <para>
507     Flush your browser's disk and memory caches, to remove any cached ad images.
508   </para>
509  </listitem> 
510
511  <listitem>
512   <para>
513    A default installation should provide a reasonable starting point for 
514    most. There will undoubtedly be occasions where you will want to adjust the
515    configuration, but that can be dealt with as the need arises. Little 
516    to no initial configuration is required in most cases.
517   </para>
518   <para>
519    See the <link linkend="configuration">Configuration section</link> for more
520    configuration options, and how to customize your installation.
521  <![%draft;[  You might also want to look at the <link
522    linkend="quickstart-ad-blocking">next section</link> for a quick
523    introduction to how <application>Privoxy</application> blocks ads and
524    banners.]]>
525   </para>
526  </listitem> 
527
528  <listitem>
529   <para>
530     If you experience ads that slipped through, innocent images that are
531     blocked, or otherwise feel the need to fine-tune
532     <application>Privoxy's</application> behaviour, take a look at the <link
533     linkend="actions-file">actions files</link>. As a quick start, you might
534     find the <link linkend="act-examples">richly commented examples</link>
535     helpful. You can also view and edit the actions files through the <ulink
536     url="http://config.privoxy.org">web-based user interface</ulink>. The
537     Appendix <quote><link linkend="actionsanat">Anatomy of an
538     Action</link></quote> has hints how to debug actions that
539     <quote>misbehave</quote>.
540   </para>
541  </listitem> 
542
543  <listitem>
544   <para>
545    Please see the section <link linkend="contact">Contacting the
546    Developers</link> on how to report bugs or problems with websites or to get
547    help. 
548   </para>
549  </listitem> 
550
551  <listitem>
552   <para>
553    Now enjoy surfing with enhanced comfort and privacy!
554   </para>
555  </listitem> 
556  
557  </itemizedlist>
558 </para>
559
560
561 <!--   ~~~~~       New section      ~~~~~     -->
562
563 <sect2 id="quickstart-ad-blocking">
564 <title>Quickstart to Ad Blocking</title>
565 <!--
566  NOTE:  This section is deliberately redundant for those that don't 
567  want to read the whole thing (which is getting lengthy).
568 -->
569 <para>
570  Ad blocking is but one of <application>Privoxy's</application>
571  array of features. Many of these features are for the technically minded advanced 
572  user. But, ad and banner blocking is surely common ground for everybody.
573 </para>
574 <para> 
575  This section will provide a quick summary of ad blocking so 
576  you can get up to speed quickly without having to read the more extensive
577  information provided below, though this is highly recommended.
578 </para>
579 <para>
580  First a bit of a warning ... blocking ads is much like blocking SPAM: the
581  more aggressive you are about it, the more likely you are to block 
582  things that were not intended. So there is a trade off here. If you want
583  extreme ad free browsing, be prepared to deal with more
584  <quote>problem</quote> sites, and to spend more time adjusting the
585  configuration to solve these unintended consequences. In short, there is 
586  not an easy way to eliminate <emphasis>all</emphasis> ads. Either take 
587  the easy way and settle for <emphasis>most</emphasis> ads blocked with the
588  default configuration, or jump in and tweak it for your personal surfing
589  habits and preferences.
590 </para>
591 <para>
592  Secondly, a brief explanation of <application>Privoxy's </application>
593  <quote>actions</quote>. <quote>Actions</quote> in this context, are 
594  the directives we use to tell <application>Privoxy</application> to perform
595  some task relating to HTTP transactions (i.e. web browsing). We tell
596  <application>Privoxy</application> to take some <quote>action</quote>. Each
597  action has a unique name and function. While there are many potential
598  <application>actions</application> in <application>Privoxy's</application>
599  arsenal, only a few are used for ad blocking. <link
600  linkend="actions">Actions</link>, and <link linkend="actions-file">action
601  configuration files</link>, are explained in depth below.
602 </para>
603 <para>
604  Actions are specified in <application>Privoxy's</application> configuration,
605  followed by one or more URLs to which the action should apply. URLs 
606  can actually be URL type <link linkend="af-patterns">patterns</link> that use
607  wildcards so they can apply potentially to a range of similar URLs. The
608  actions, together with the URL patterns are called a section.
609 </para>
610 <para>
611  When you connect to a website, the full URL will either match one or more
612  of the sections as defined in <application>Privoxy's</application> configuration,
613  or not. If so, then <application>Privoxy</application> will perform the
614  respective actions. If not, then nothing special happens. Furthermore, web
615  pages may contain embedded, secondary URLs that your web browser will
616  use to load additional components of the page, as it parses the
617  original page's HTML content. An ad image for instance, is just an URL
618  embedded in the page somewhere. The image itself may be on the same server,
619  or a server somewhere else on the Internet. Complex web pages will have many
620  such embedded URLs.
621 </para>
622
623 <para>
624  The actions we need to know about for ad blocking are:  <literal><link
625  linkend="block">block</link></literal>, <literal><link
626  linkend="handle-as-image">handle-as-image</link></literal>, and
627  <literal><link linkend="set-image-blocker">set-image-blocker</link></literal>:
628 </para>
629
630 <para>
631  <itemizedlist>
632   
633  <listitem>
634   <para>
635    <literal><link linkend="block">block</link></literal> - this action stops
636    any contact between your browser and any URL patterns that match this
637    action's configuration. It can be used for blocking ads, but also anything
638    that is determined to be unwanted. By itself, it simply stops any
639    communication with the remote server and sends <application>Privoxy</application>'s
640    own built-in BLOCKED page instead to let you now what has happened.
641   </para>
642  </listitem> 
643
644  <listitem>
645   <para>
646    <literal><link linkend="handle-as-image">handle-as-image</link></literal> - 
647    tells <application>Privoxy</application> to treat this URL as an image.
648    <application>Privoxy</application>'s default configuration already does this
649    for all common image types (e.g. GIF), but there are many situations where this
650    is not so easy to determine. So we'll force it in these cases. This is particularly
651    important for ad blocking, since  only if we know that it's an image of
652    some kind, can we replace it with an image of our choosing, instead of the 
653    <application>Privoxy</application> BLOCKED page (which would only result in
654    a <quote>broken image</quote> icon). There are some limitations to this
655    though. For instance, you can't just brute-force an image substitution for
656    an entire HTML page in most situations.
657   </para>
658  </listitem> 
659
660  <listitem>
661   <para>
662    <literal><link
663    linkend="set-image-blocker">set-image-blocker</link></literal> - tells
664    <application>Privoxy</application> what to display in place of an ad image that
665    has hit a block rule. For this to come into play, the URL must match a
666    <literal><link linkend="block">block</link></literal> action somewhere in the
667    configuration, <emphasis>and</emphasis>, it must also match an
668    <literal><link linkend="handle-as-image">handle-as-image</link></literal> action.
669   </para>
670   <para>
671    The configuration options on what to display instead of the ad are:
672   </para>
673   <simplelist>
674    <member>
675     &nbsp;&nbsp;&nbsp;<emphasis>pattern</emphasis> - a checkerboard pattern, so that an ad 
676     replacement is obvious. This is the default.
677    </member>
678   </simplelist>
679   <simplelist>
680    <member>
681     &nbsp;&nbsp;&nbsp;<emphasis>blank</emphasis> - A very small empty GIF image is displayed.
682     This is the so-called <quote>invisible</quote> configuration option.
683    </member>
684   </simplelist>
685   <simplelist>
686    <member>
687     &nbsp;&nbsp;&nbsp;<emphasis>http://&lt;URL&gt;</emphasis> - A redirect to any image anywhere
688     of the user's choosing (advanced usage).
689    </member>
690   </simplelist>
691   </listitem> 
692
693 </itemizedlist>
694 </para>
695
696 <para>
697  The quickest way to adjust any of these settings is with your browser through
698  the special <application>Privoxy</application> editor at <ulink
699  url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>
700  (shortcut: <ulink url="http://p.p/">http://p.p/show-status</ulink>). This 
701  is an internal page, and does not require Internet access. Select the
702  appropriate <quote>actions</quote> file, and click
703  <quote><guibutton>Edit</guibutton></quote>. It is best to put personal or
704  local preferences in <filename>user.action</filename> since this is not
705  meant to be overwritten during upgrades, and will over-ride the settings in
706  other files. Here you can insert new <quote>actions</quote>, and URLs for ad
707  blocking or other purposes, and make other adjustments to the configuration.
708  <application>Privoxy</application> will detect these changes automatically.
709 </para>
710
711 <para>
712  A quick and simple step by step example:
713 </para>
714
715 <para>
716  <itemizedlist>
717
718   <listitem>
719    <para>
720      Right click on the ad image to be blocked, then select 
721      <quote><guimenuitem>Copy Link Location</guimenuitem></quote> from the
722      pop-up menu. 
723    </para>
724   </listitem> 
725   <listitem>
726    <para>
727     Set your browser to 
728     <ulink
729  url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>
730    </para>
731   </listitem> 
732   <listitem>
733    <para>
734     Find <filename>user.action</filename> in the top section, and click 
735     on <quote><guibutton>Edit</guibutton></quote>:
736    </para>
737
738  <!-- image of editor and actions files selections -->
739  <para>
740   <figure pgwide="0" float="0"><title>Actions Files in Use</title>
741    <mediaobject>
742      <imageobject>
743       <imagedata  fileref="../images/files-in-use.jpg" format="jpg">
744        </imageobject> 
745        <textobject>
746         <phrase>[ Screenshot of Actions Files in Use ]</phrase>
747       </textobject>
748    </mediaobject>
749   </figure>
750  </para>
751  </listitem> 
752  
753  <listitem>
754   <para>
755    You should have a section with only
756    <literal><link linkend="block">block</link></literal> listed under 
757    <quote>Actions:</quote>.
758    If not, click a <quote><guibutton>Insert new section below</guibutton></quote>
759    button, and in the new section that just appeared, click the 
760    <guibutton>Edit</guibutton> button right under the word <quote>Actions:</quote>.
761    This will bring up a list of all actions. Find
762    <literal><link linkend="block">block</link></literal> near the top, and click
763    in the <quote>Enabled</quote> column, then <quote><guibutton>Submit</guibutton></quote>
764    just below the list.
765   </para>
766  </listitem> 
767  <listitem>
768   <para>
769    Now, in the <literal><link linkend="block">block</link></literal> actions section,
770    click the <quote><guibutton>Add</guibutton></quote> button, and paste the URL the
771    browser got from <quote><guimenuitem>Copy Link Location</guimenuitem></quote>.
772    Remove the <literal>http://</literal> at the beginning of the URL. Then, click
773    <quote><guibutton>Submit</guibutton></quote> (or
774    <quote><guibutton>OK</guibutton></quote> if in a pop-up window).
775   </para>
776  </listitem> 
777  <listitem>
778   <para>
779    Now go back to the original page, and press <keycap>SHIFT-Reload</keycap>
780    (or flush all browser caches). The image should be gone now.
781   </para>
782  </listitem> 
783  
784  </itemizedlist>
785 </para>
786
787 <para>
788  This is a very crude and simple example. There might be good reasons to use a 
789  wildcard pattern match to include potentially similar images from the same
790  site. For a more extensive explanation of <quote>patterns</quote>, and 
791  the entire actions concept, see <link linkend="actions-file">the Actions
792  section</link>.
793 </para>
794
795 <para>
796  For advanced users who want to hand edit their config files, you might want
797  to now go to the <link linkend="act-examples">Actions Files Tutorial</link>.
798  The ideas explained therein also apply to the web-based editor.
799 </para>
800
801 </sect2>
802
803 </sect1>
804
805 <!--  ~  End section  ~  -->
806
807
808 <!--   ~~~~~       New section      ~~~~~     -->
809 <sect1 id="startup">
810 <title>Starting <application>Privoxy</application></title>
811 <para>
812  Before launching <application>Privoxy</application> for the first time, you
813  will want to configure your browser(s) to use
814  <application>Privoxy</application> as a HTTP and HTTPS proxy. The default is
815  127.0.0.1 (or localhost) for the proxy address, and port 8118 (earlier versions
816  used port 8000). This is the one configuration step that must be done!
817 </para>
818 <para>
819  Please note that <application>Privoxy</application> can only proxy HTTP and 
820  HTTPS traffic. It will not work with FTP or other protocols.
821 </para>
822
823  <!-- image of Mozilla Proxy configuration -->
824  <para>
825   <figure pgwide="0" float="0"><title>Proxy Configuration (Mozilla)</title>
826    <mediaobject>
827      <imageobject>
828       <imagedata  fileref="../images/proxy_setup.jpg" format="jpg">
829        </imageobject> 
830        <textobject>
831         <phrase>[ Screenshot of Mozilla Proxy Configuration ]</phrase>
832       </textobject>
833    </mediaobject>
834   </figure>
835  </para>
836  
837 <para> 
838  With <application>Netscape</application> (and
839  <application>Mozilla</application>), this can be set under:
840 </para>
841  
842 <literallayout>
843 <!-- Mix ascii and gui art, something for everybody -->
844 <!-- spacing on this is tricky -->
845  <guibutton>Edit</guibutton>
846    |_   
847          <guibutton>Preferences</guibutton>
848                 |_       
849                         <guibutton>Advanced</guibutton>
850                               |_     
851                                     <guibutton>Proxies</guibutton>
852                                          |_       
853                                                 <guibutton>HTTP Proxy</guibutton>
854 </literallayout>
855
856 <para>
857  For <application>Internet Explorer</application>: 
858 </para>
859
860 <literallayout>
861 <!-- Mix ascii and gui art, something for everybody -->
862 <!-- spacing on this is tricky -->
863  <guibutton>Tools</guibutton>
864      |_   
865          <guibutton>Internet Properties</guibutton>
866                             |_       
867                                       <guibutton>Connections</guibutton>
868                                                |_     
869                                                             <guibutton>LAN Settings</guibutton>
870 </literallayout>
871
872 <para>
873  Then, check <quote>Use Proxy</quote> and fill in the appropriate info
874  (Address: 127.0.0.1, Port: 8118). Include HTTPS (SSL), if you want HTTPS
875  proxy support too. 
876 </para>
877
878 <para>
879  After doing this, flush your browser's disk and memory caches to force a
880  re-reading of all pages and to get rid of any ads that may be cached. You 
881  are now ready to start enjoying the benefits of using
882  <application>Privoxy</application>!
883 </para>
884
885 <para>
886  <application>Privoxy</application> is typically started by specifying the
887  main configuration file to be used on the command line. If no configuration
888  file is specified on the command line, <application>Privoxy</application>
889  will look for a file named <filename>config</filename> in the current
890  directory. Except on Win32 where it will try <filename>config.txt</filename>.
891 </para>
892
893 <sect2 id="start-redhat">
894 <title>Red Hat and Conectiva</title>
895 <para>
896  We use a script. Note that Red Hat does not start Privoxy upon booting per
897  default. It will use the file <filename>/etc/privoxy/config</filename> as
898  its main configuration file.
899 </para>
900 <para>
901  <screen>
902  # /etc/rc.d/init.d/privoxy start
903 </screen>
904 </para>
905 </sect2>
906
907 <sect2 id="start-debian">
908 <title>Debian</title>
909 <para>
910  We use a script. Note that Debian starts Privoxy upon booting per
911  default.  It will use the file
912  <filename>/etc/privoxy/config</filename> as its main configuration
913  file.
914 </para>
915 <para>
916  <screen>
917  # /etc/init.d/privoxy start
918 </screen>
919 </para>
920 </sect2>
921
922 <sect2 id="start-suse">
923 <title>SuSE</title>
924 <para>
925 We use a script. It will use the file <filename>/etc/privoxy/config</filename>
926 as its main configuration file. Note that SuSE starts Privoxy upon booting
927 your PC.
928 </para>
929 <para>
930  <screen>
931  # rcprivoxy start
932 </screen>
933 </para>
934 </sect2>
935
936 <sect2 id="start-windows">
937 <title>Windows</title>
938 <para>
939 Click on the Privoxy Icon to start Privoxy. If no configuration file is
940  specified on the command line, <application>Privoxy</application> will look
941  for a file named <filename>config.txt</filename>. Note that Windows will
942  automatically start Privoxy upon booting you PC.
943 </para>
944 </sect2>
945
946 <sect2 id="start-unices">
947 <title>Solaris, NetBSD, FreeBSD, HP-UX and others</title>
948 <para>
949 Example Unix startup command:
950 </para>
951 <para>
952  <screen>
953  # /usr/sbin/privoxy /etc/privoxy/config
954 </screen>
955 </para>
956 </sect2>
957
958 <sect2 id="start-os2">
959 <title>OS/2</title>
960 <para>
961  During installation, <application>Privoxy</application> is configured to
962  start automatically when the system restarts. You can start it manually by
963  double-clicking on the <application>Privoxy</application> icon in the
964  <application>Privoxy</application> folder.
965 </para>
966 </sect2>
967
968 <sect2 id="start-macosx">
969 <title>Mac OSX</title>
970 <para>
971  During installation, <application>Privoxy</application> is configured to
972  start automatically when the system restarts.  To run Privoxy by hand,
973  double-click on the <literal>RunPrivoxy.command</literal> icon in the
974  <literal>/Library/Privoxy</literal> folder.  Or, type this command
975  in the Terminal:
976 </para>
977 <para>
978   <screen>
979   /Library/Privoxy/RunPrivoxy.command
980   </screen>
981 </para>
982 <para>
983  If you are not logged in as an administrator, you will be asked for the
984  administrator password when starting <application>Privoxy</application>
985  by hand.
986 </para>
987 </sect2>
988
989
990 <sect2 id="start-amigaos">
991 <title>AmigaOS</title>
992 <para>
993  Start <application>Privoxy</application> (with RUN &lt;&gt;NIL:) in your
994  <filename>startnet</filename> script (AmiTCP), in
995  <filename>s:user-startup</filename> (RoadShow), as startup program in your
996  startup script (Genesis), or as startup action (Miami and MiamiDx). 
997  <application>Privoxy</application> will automatically quit when you quit your
998  TCP/IP stack (just ignore the harmless warning your TCP/IP stack may display that
999  <application>Privoxy</application> is still running).
1000 </para>
1001 </sect2>
1002
1003 <!--
1004
1005 <para>
1006  See the section <link linkend="cmdoptions">Command line options</link> for
1007  furher info.
1008 </para>
1009
1010 must find a better place for this paragraph
1011
1012 <para>
1013  The included default configuration files should give a reasonable starting
1014  point. Most of the per site configuration is done in the
1015  <ulink url="actions-file.html"><quote>actions</quote></ulink> files. These are
1016  where various cookie actions are defined, ad and banner blocking, and other
1017  aspects of <application>Privoxy</application> configuration. There are several
1018  such files included, with varying levels of aggressiveness. 
1019 </para>
1020
1021 <para>
1022  You will probably want to keep an eye out for sites for which you may prefer
1023  persistent cookies, and add these to your actions configuration as needed. By
1024  default, most of these will be accepted only during the current browser
1025  session (aka <quote>session cookies</quote>), unless you add them to the
1026  configuration. If you want the browser to handle this instead, you will need
1027  to edit <filename>user.action</filename> (or through the web based interface)
1028  and disable this feature. If you use more than one browser, it would make
1029  more sense to let <application>Privoxy</application> handle this. In which
1030  case, the browser(s) should be set to accept all cookies.
1031 </para>
1032
1033 <para>
1034  Another feature where you will probably want to define exceptions for trusted
1035  sites is the popup-killing (through the <ulink
1036  url="actions-file.html#KILL-POPUPS"><quote>+kill-popups</quote></ulink> and
1037  <ulink
1038  url="actions-file.html#FILTER-POPUPS"><quote>+filter{popups}</quote></ulink>
1039  actions), because your favorite shopping, banking, or leisure site may need
1040  popups (explained below). 
1041 </para>
1042
1043 <para>
1044  <application>Privoxy</application> is HTTP/1.1 compliant,  but not all of
1045  the optional 1.1 features are as yet supported. In the unlikely event that
1046  you experience inexplicable problems with browsers that use HTTP/1.1 per default
1047  (like <application>Mozilla</application> or recent versions of I.E.), you might
1048  try to force HTTP/1.0 compatibility. For Mozilla, look under <literal>Edit -&gt;
1049  Preferences -&gt; Debug -&gt; Networking</literal>.
1050  Alternatively, set the <quote>+downgrade-http-version</quote> config option in
1051  <filename>default.action</filename> which will downgrade your browser's HTTP
1052  requests from HTTP/1.1 to HTTP/1.0 before processing them.
1053 </para>
1054
1055 <para>
1056  After running <application>Privoxy</application> for a while, you can 
1057  start to fine tune the configuration to suit your personal, or site, 
1058  preferences and requirements. There are many, many aspects that can 
1059  be customized. <quote>Actions</quote> 
1060  can be adjusted by pointing your browser to 
1061  <ulink url="http://config.privoxy.org/">http://config.privoxy.org/</ulink>
1062  (shortcut: <ulink url="http://p.p/">http://p.p/</ulink>), 
1063  and then follow the link to <quote>View &#38; Change the Current Configuration</quote>. 
1064  (This is an internal page and does not require Internet access.)
1065 </para>
1066
1067 <para>
1068  In fact, various aspects of <application>Privoxy</application>
1069  configuration can be viewed from this page, including 
1070  current configuration parameters, source code version numbers, 
1071  the browser's request headers, and <quote>actions</quote> that apply 
1072  to a given URL. In addition to the actions file 
1073  editor mentioned above, <application>Privoxy</application> can also 
1074  be turned <quote>on</quote> and <quote>off</quote> (toggled) from this page.
1075 </para>
1076
1077 <para>
1078  If you encounter problems, try loading the page without
1079  <application>Privoxy</application>. If that helps, enter the URL where
1080  you have the problems into <ulink url="http://p.p/show-url-info">the browser
1081  based rule tracing utility</ulink>. See which rules apply and why, and
1082  then try turning them off for that site one after the other, until the problem
1083  is gone. When you have found the culprit, you might want to turn the rest on
1084  again.
1085 </para>
1086
1087 <para>
1088  If the above paragraph sounds gibberish to you, you might want to <ulink
1089  url="actions-file.html#ACTIONSFILE">read more about the actions concept</ulink>
1090  or even dive deep into the <ulink url="appendix.html#ACTIONSANAT">Appendix
1091  on actions</ulink>.
1092 </para>
1093
1094 <para>
1095  If you can't get rid of the problem at all, think you've found a bug in
1096  Privoxy, want to propose a new feature or smarter rules, please see the 
1097  section <ulink url="contact.html"><quote>Contacting the
1098  Developers</quote></ulink> below. 
1099 </para>
1100
1101 -->
1102
1103 <!--   ~~~~~       New section      ~~~~~     -->
1104 <sect2 id="cmdoptions">
1105 <title>Command Line Options</title>
1106 <para>
1107  <application>Privoxy</application> may be invoked with the following
1108  command-line options:
1109 </para>
1110
1111 <para>
1112  <itemizedlist>
1113
1114  <listitem>
1115   <para>
1116     <emphasis>--version</emphasis>
1117   </para>
1118   <para>
1119      Print version info and exit. Unix only.
1120   </para>
1121  </listitem> 
1122  <listitem>
1123   <para>
1124     <emphasis>--help</emphasis>
1125   </para>
1126   <para>
1127    Print short usage info and exit. Unix only.
1128   </para>
1129  </listitem> 
1130  <listitem>
1131   <para>
1132    <emphasis>--no-daemon</emphasis>
1133   </para>
1134   <para>
1135    Don't become a daemon, i.e. don't fork and become process group
1136    leader, and don't detach from controlling tty. Unix only.
1137   </para>
1138  </listitem> 
1139  <listitem>
1140   <para>
1141    <emphasis>--pidfile FILE</emphasis>
1142   
1143   </para>
1144   <para>
1145    On startup, write the process ID to <emphasis>FILE</emphasis>. Delete the
1146    <emphasis>FILE</emphasis> on exit. Failure to create or delete the
1147    <emphasis>FILE</emphasis> is non-fatal. If no <emphasis>FILE</emphasis>
1148    option is given, no PID file will be used. Unix only.
1149   </para>
1150  </listitem> 
1151  <listitem>
1152   <para>
1153    <emphasis>--user USER[.GROUP]</emphasis>
1154   
1155   </para>
1156   <para>
1157    After (optionally) writing the PID file, assume the user  ID  of
1158    <emphasis>USER</emphasis>, and if included the GID of GROUP.  Exit if the
1159    privileges are not sufficient to do so. Unix only.
1160   </para>
1161  </listitem> 
1162  <listitem>
1163   <para>
1164     <emphasis>configfile</emphasis>
1165   </para>
1166   <para>
1167     If no <emphasis>configfile</emphasis> is included on the command line, 
1168     <application>Privoxy</application> will look for a file named 
1169     <quote>config</quote> in the current directory (except on Win32 
1170     where it will look for <quote>config.txt</quote> instead). Specify 
1171     full path to avoid confusion. If no config file is found, 
1172     <application>Privoxy</application> will fail to start.
1173   </para>
1174  </listitem> 
1175
1176  </itemizedlist>
1177 </para>
1178
1179 </sect2>
1180
1181 </sect1>
1182
1183 <!--  ~  End section  ~  -->
1184
1185
1186 <!--   ~~~~~       New section      ~~~~~     -->
1187 <sect1 id="configuration"><title><application>Privoxy</application> Configuration</title>
1188  <para>
1189   All <application>Privoxy</application> configuration is stored  
1190   in text files. These files can be edited with a text editor.
1191   Many important aspects of <application>Privoxy</application> can 
1192   also be controlled easily with a web browser.
1193  </para>
1194
1195
1196 <!--   ~~~~~       New section      ~~~~~     -->
1197
1198 <sect2>
1199 <title>Controlling <application>Privoxy</application> with Your Web Browser</title>
1200 <para>
1201  <application>Privoxy</application>'s user interface can be reached through the special 
1202  URL <ulink url="http://config.privoxy.org/">http://config.privoxy.org/</ulink>
1203  (shortcut: <ulink url="http://p.p/">http://p.p/</ulink>), 
1204  which is a built-in page and works without Internet access.
1205  You will see the following section:
1206
1207 </para>
1208
1209 <!-- Needs to be put in a table and colorized  -->
1210 <screen>
1211  <msgtext>
1212  <bridgehead renderas="sect2">&nbsp;&nbsp;&nbsp;&nbsp;Privoxy Menu</bridgehead>
1213
1214  <simplelist>
1215  <member>
1216   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&squf;&nbsp;&nbsp;<ulink url="http://config.privoxy.org/show-status">View & change the current configuration</ulink>
1217  </member>
1218  <member>
1219   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&squf;&nbsp;&nbsp;<ulink url="http://config.privoxy.org/show-version">View the source code version numbers</ulink>
1220  </member>
1221  <member>
1222   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&squf;&nbsp;&nbsp;<ulink url="http://config.privoxy.org/show-request">View the request headers.</ulink>
1223  </member>
1224  <member>
1225   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&squf;&nbsp;&nbsp;<ulink url="http://config.privoxy.org/show-url-info">Look up which actions apply to a URL and why</ulink>
1226  </member>
1227  <member>
1228   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&squf;&nbsp;&nbsp;<ulink url="http://config.privoxy.org/toggle">Toggle Privoxy on or off</ulink>
1229  </member>
1230  </simplelist>
1231  </msgtext>
1232 </screen>
1233
1234
1235 <para>
1236  This should be self-explanatory. Note the first item leads to an editor for the
1237  <link linkend="actions-file">actions files</link>, which is where the ad, banner,
1238  cookie, and URL blocking magic is configured as well as other advanced features of
1239  <application>Privoxy</application>. This is an easy way to adjust various
1240  aspects of <application>Privoxy</application> configuration. The actions
1241  file, and other configuration files, are explained in detail below. 
1242 </para>
1243
1244 <para>
1245  <quote>Toggle Privoxy On or Off</quote> is handy for sites that might 
1246  have problems with your current actions and filters. You can in fact use
1247  it as a test to see whether it is <application>Privoxy</application> 
1248  causing the problem or not. <application>Privoxy</application> continues 
1249  to run as a proxy in this case, but all manipulation is disabled, i.e.
1250  <application>Privoxy</application> acts like a normal forwarding proxy. There
1251  is even a toggle <link linkend="bookmarklets">Bookmarklet</link> offered, so
1252  that you can toggle <application>Privoxy</application> with one click from
1253  your browser.
1254 </para>
1255
1256 </sect2>
1257
1258 <!--  ~  End section  ~  -->
1259
1260
1261
1262
1263 <!--   ~~~~~       New section      ~~~~~     -->
1264
1265 <sect2 id="confoverview">
1266 <title>Configuration Files Overview</title>
1267 <para>
1268  For Unix, *BSD and Linux, all configuration files are located in
1269  <filename>/etc/privoxy/</filename> by default. For MS Windows, OS/2, and
1270  AmigaOS these are all in the same directory as the 
1271  <application>Privoxy</application> executable. <![%p-not-stable;[ The name
1272  and number of configuration files has changed from previous versions, and is
1273  subject to change as development progresses.]]>
1274 </para>
1275
1276 <para>
1277  The installed defaults provide a reasonable starting point, though 
1278  some settings may be aggressive by some standards. For the time being, the
1279  principle configuration files are:
1280 </para>
1281
1282 <para>
1283  <itemizedlist>
1284
1285   <listitem>
1286    <para>
1287      The <link linkend="config">main configuration file</link> is named <filename>config</filename>
1288      on Linux, Unix, BSD, OS/2, and AmigaOS and <filename>config.txt</filename>
1289      on Windows. This is a required file.
1290    </para>
1291   </listitem> 
1292
1293   <listitem>
1294    <para>
1295     <filename>default.action</filename> (the main <link linkend="actions-file">actions file</link>)
1296     is used to define which <quote>actions</quote> relating to banner-blocking, images, pop-ups,
1297     content modification, cookie handling etc should be applied by default. It also defines many
1298     exceptions (both positive and negative) from this default set of actions that enable 
1299     <application>Privoxy</application> to selectively eliminate the junk, and only the junk, on
1300     as many websites as possible.
1301    </para>
1302    <para>
1303     Multiple actions files may be defined in <filename>config</filename>. These 
1304     are processed in the order they are defined. Local customizations and locally 
1305     preferred exceptions to the default policies  as defined in
1306     <filename>default.action</filename> (which you will most probably want
1307     to define sooner or later) are probably best applied in
1308     <filename>user.action</filename>, where you can preserve them across
1309     upgrades. <filename>standard.action</filename> is for
1310     <application>Privoxy's</application> internal use.
1311    </para>
1312    <para>    
1313     There is also a web based editor that can be accessed from
1314     <ulink
1315     url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>
1316     (Shortcut: <ulink
1317     url="http://p.p/show-status">http://p.p/show-status</ulink>) for the
1318     various actions files. 
1319    </para>
1320   </listitem> 
1321
1322   <listitem>
1323    <para>
1324     <filename>default.filter</filename> (the <link linkend="filter-file">filter
1325     file</link>) can be used to re-write the raw page content, including
1326     viewable text as well as embedded HTML and JavaScript, and whatever else
1327     lurks on any given web page. The filtering jobs are only pre-defined here;
1328     whether to apply them or not is up to the actions files.
1329    </para>
1330   </listitem> 
1331
1332  </itemizedlist>
1333 </para>
1334
1335 <para>
1336  All files use the <quote><literal>#</literal></quote> character to denote a
1337  comment (the rest of the line will be ignored) and understand line continuation
1338  through placing a backslash ("<literal>\</literal>") as the very last character
1339  in a line. If the <literal>#</literal> is preceded by a backslash, it looses
1340  its special function. Placing a <literal>#</literal> in front of an otherwise
1341  valid configuration line to prevent it from being interpreted is called "commenting
1342  out" that line.
1343 </para>
1344
1345 <para>
1346  The actions files and <filename>default.filter</filename> 
1347  can use Perl style <link linkend="regex">regular expressions</link> for
1348  maximum flexibility. 
1349 </para>
1350
1351 <para>
1352  After making any changes, there is no need to restart
1353  <application>Privoxy</application> in order for the changes to take
1354  effect. <application>Privoxy</application> detects such changes 
1355  automatically. Note, however, that it may take one or two additional
1356  requests for the change to take effect. When changing the listening address
1357  of <application>Privoxy</application>, these <quote>wake up</quote> requests
1358  must obviously be sent to the <emphasis>old</emphasis> listening address.
1359 </para>
1360
1361 <![%p-not-stable;[
1362 <para>
1363  While under development, the configuration content is subject to change. 
1364  The below documentation may not be accurate by the time you read this. 
1365  Also, what constitutes a <quote>default</quote> setting, may change, so 
1366  please check all your configuration files on important issues.
1367 </para>
1368 ]]>
1369
1370 </sect2>
1371 </sect1>
1372 <!--  ~  End section  ~  -->
1373
1374
1375 <!--   ~~~~~~~~       New section Header    ~~~~~~~~~     -->
1376
1377 <!-- **************************************************** -->
1378 <!-- Include config.sgml here -->
1379 <!-- This is where the entire config file is detailed. -->
1380  &config;
1381 <!-- end include  -->
1382
1383
1384 <!--  ~  End section  ~  -->
1385
1386
1387
1388 <!--   ~~~~~~~~       New section Header    ~~~~~~~~~     -->
1389
1390 <sect1 id="actions-file"><title>Actions Files</title>
1391
1392 <para>
1393  The actions files are used to define what actions
1394  <application>Privoxy</application> takes for which URLs, and thus determine
1395  how ad images, cookies and various other aspects of HTTP content and
1396  transactions are handled, and on which sites (or even parts thereof). There 
1397  are three such files included with <application>Privoxy</application> (as of 
1398  version 2.9.15), with differing purposes:
1399  </para>
1400  
1401  <para>
1402   <itemizedlist>
1403    <listitem>
1404     <para>
1405      <filename>default.action</filename> - is the primary action file 
1406      that sets the initial values for all actions. It is intended to 
1407      provide a base level of functionality for
1408      <application>Privoxy's</application> array of features. So it is 
1409      a set of broad rules that should work reasonably well for users everywhere.
1410      This is the file that the developers are keeping updated, and <link
1411      linkend="installation-keepupdated">making available to users</link>.
1412     </para>
1413    </listitem> 
1414    <listitem>
1415     <para>
1416      <filename>user.action</filename> - is intended to be for local site 
1417      preferences and exceptions. As an example, if your ISP or your bank
1418      has specific requirements, and need special handling, this kind of 
1419      thing should go here. This file will not be upgraded.
1420     </para>
1421   </listitem> 
1422    <listitem>
1423     <para>
1424      <filename>standard.action</filename> - is used by the web based editor, 
1425      to set various pre-defined sets of rules for the default actions section
1426      in <filename>default.action</filename>. These have increasing levels of
1427      aggressiveness <emphasis>and have no influence on your browsing unless
1428      you select them explicitly in the editor</emphasis>. It is not recommend
1429      to edit this file.
1430     </para>
1431    </listitem> 
1432   </itemizedlist>
1433  </para> 
1434
1435 <para>
1436  The list of actions files to be used are defined in the main configuration 
1437  file, and are processed in the order they are defined. The content of these
1438  can all be viewed and edited from <ulink
1439  url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>.
1440 </para>
1441
1442 <para>
1443  An actions file typically has multiple sections. If you want to use
1444  <quote>aliases</quote> in an actions file, you have to place the (optional)
1445  <link linkend="aliases">alias section</link> at the top of that file.
1446  Then comes the default set of rules which will apply universally to all
1447  sites and pages (be <emphasis>very careful</emphasis> with using such a
1448  universal set in <filename>user.action</filename> or any other actions file after 
1449  <filename>default.action</filename>, because it will override the result
1450  from consulting any previous file). And then below that,
1451  exceptions to the defined universal policies. You can regard
1452  <filename>user.action</filename> as an appendix to <filename>default.action</filename>,
1453  with the advantage that is a separate file, which makes preserving your
1454  personal settings across <application>Privoxy</application> upgrades easier.
1455 </para>
1456
1457 <para> 
1458  Actions can be used to block anything you want, including ads, banners, or
1459  just some obnoxious URL that you would rather not see. Cookies can be accepted
1460  or rejected, or accepted only during the current browser session (i.e. not
1461  written to disk), content can be modified, JavaScripts tamed, user-tracking
1462  fooled, and much more. See below for a <link linkend="actions">complete list
1463  of actions</link>.
1464 </para>
1465
1466 <!--   ~~~~~       New section      ~~~~~     -->
1467 <sect2>
1468 <title>Finding the Right Mix</title>
1469 <para>
1470  Note that some <link linkend="actions">actions</link>, like cookie suppression
1471  or script disabling, may render some sites unusable that rely on these
1472  techniques to work properly. Finding the right mix of actions is not always easy and
1473  certainly a matter of personal taste. In general, it can be said that the more
1474  <quote>aggressive</quote> your default settings (in the top section of the
1475  actions file) are, the more exceptions for <quote>trusted</quote> sites you
1476  will have to make later. If, for example, you want to kill popup windows per
1477  default, you'll have to make exceptions from that rule for sites that you
1478  regularly use and that require popups for actually useful content, like maybe
1479  your bank, favorite shop, or newspaper.
1480 </para>
1481
1482 <para>
1483  We have tried to provide you with reasonable rules to start from in the
1484  distribution actions files. But there is no general rule of thumb on these
1485  things. There just are too many variables, and sites are constantly changing.
1486  Sooner or later you will want to change the rules (and read this chapter again :).
1487 </para>
1488 </sect2>
1489
1490 <!--   ~~~~~       New section      ~~~~~     -->
1491 <sect2>
1492 <title>How to Edit</title>
1493 <para>
1494  The easiest way to edit the actions files is with a browser by
1495  using our browser-based editor, which can be reached from <ulink
1496  url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>.
1497  The editor allows both fine-grained control over every single feature on a
1498  per-URL basis, and easy choosing from wholesale sets of defaults like
1499  <quote>Cautious</quote>, <quote>Medium</quote> or <quote>Advanced</quote>.
1500 </para>
1501
1502 <para>
1503  If you prefer plain text editing to GUIs, you can of course also directly edit the
1504  the actions files. Look at <filename>default.action</filename> which is richly
1505  commented.
1506 </para>
1507 </sect2>
1508
1509
1510 <sect2 id="actions-apply">
1511 <title>How Actions are Applied to URLs</title>
1512 <para>
1513  Actions files are divided into sections. There are special sections,
1514  like the <quote><link linkend="aliases">alias</link></quote> sections which will
1515  be discussed later. For now let's concentrate on regular sections: They have a
1516  heading line (often split up to multiple lines for readability) which consist
1517  of a list of actions, separated by whitespace and enclosed in curly braces.
1518  Below that, there is a list of URL patterns, each on a separate line.
1519 </para>
1520
1521 <para>
1522  To determine which actions apply to a request, the URL of the request is
1523  compared to all patterns in each action file file. Every time it matches, the list of
1524  applicable actions for the URL is incrementally updated, using the heading
1525  of the section in which the pattern is located. If multiple matches for
1526  the same URL set the same action differently, the last match wins. If not, 
1527  the effects are aggregated. E.g. a URL might match a regular section with 
1528  a heading line of <literal>{ 
1529  +<ulink url="actions-file.html#HANDLE-AS-IMAGE">handle-as-image</ulink> }</literal>,
1530  then later another one with just <literal>{
1531  +<ulink url="actions-file.html#BLOCK">block</ulink> }</literal>, resulting
1532  in <emphasis>both</emphasis> actions to apply.
1533 </para>
1534
1535 <para>
1536  You can trace this process for any given URL by visiting <ulink
1537  url="http://config.privoxy.org/show-url-info">http://config.privoxy.org/show-url-info</ulink>.
1538 </para>
1539
1540 <para>
1541  More detail on this is provided in the Appendix, <link linkend="ACTIONSANAT">
1542  Anatomy of an Action</link>.
1543 </para>
1544 </sect2>
1545
1546 <!--   ~~~~~       New section      ~~~~~     -->
1547 <sect2 id="af-patterns">
1548 <title>Patterns</title>
1549 <para>
1550  Generally, a pattern has the form <literal>&lt;domain&gt;/&lt;path&gt;</literal>,
1551  where both the <literal>&lt;domain&gt;</literal> and <literal>&lt;path&gt;</literal>
1552  are optional. (This is why the pattern <literal>/</literal> matches all URLs).
1553 </para>
1554
1555 <variablelist>
1556  <varlistentry>
1557   <term><literal>www.example.com/</literal></term>
1558   <listitem>
1559    <para>
1560     is a domain-only pattern and will match any request to <literal>www.example.com</literal>,
1561     regardless of which document on that server is requested.
1562    </para>
1563   </listitem>
1564  </varlistentry>
1565  <varlistentry>
1566   <term><literal>www.example.com</literal></term>
1567   <listitem>
1568    <para>
1569     means exactly the same. For domain-only patterns, the trailing <literal>/</literal> may
1570     be omitted.
1571    </para>
1572   </listitem>
1573  </varlistentry>
1574  <varlistentry>
1575   <term><literal>www.example.com/index.html</literal></term>
1576   <listitem>
1577    <para>
1578     matches only the single document <literal>/index.html</literal>
1579     on <literal>www.example.com</literal>.
1580    </para>
1581   </listitem>
1582  </varlistentry>
1583  <varlistentry>
1584   <term><literal>/index.html</literal></term>
1585   <listitem>
1586    <para>
1587     matches the document <literal>/index.html</literal>, regardless of the domain,
1588     i.e. on <emphasis>any</emphasis> web server.
1589    </para>
1590   </listitem>
1591  </varlistentry>
1592  <varlistentry>
1593   <term><literal>index.html</literal></term>
1594   <listitem>
1595    <para>
1596     matches nothing, since it would be  interpreted as a domain name and
1597     there is no top-level domain called <literal>.html</literal>.
1598    </para>
1599   </listitem>
1600  </varlistentry>
1601 </variablelist>
1602
1603
1604 <!--   ~~~~~       New section      ~~~~~     -->
1605 <sect3><title>The Domain Pattern</title>
1606
1607 <para>
1608  The matching of the domain part offers some flexible options: if the
1609  domain starts or ends with a dot, it becomes unanchored at that end. 
1610  For example:
1611 </para>
1612
1613 <variablelist>
1614  <varlistentry>
1615   <term><literal>.example.com</literal></term>
1616   <listitem>
1617    <para>
1618     matches any domain that <emphasis>ENDS</emphasis> in
1619     <literal>.example.com</literal>
1620    </para>
1621   </listitem>
1622  </varlistentry>
1623  <varlistentry>
1624   <term><literal>www.</literal></term>
1625   <listitem>
1626    <para>
1627     matches any domain that <emphasis>STARTS</emphasis> with
1628     <literal>www.</literal>
1629    </para>
1630   </listitem>
1631  </varlistentry>
1632  <varlistentry>
1633   <term><literal>.example.</literal></term>
1634   <listitem>
1635    <para>
1636     matches any domain that <emphasis>CONTAINS</emphasis> <literal>.example.</literal>
1637     (Correctly speaking: It matches any FQDN that contains <literal>example</literal> as a domain.)
1638    </para>
1639   </listitem>
1640  </varlistentry>
1641 </variablelist>
1642
1643 <para>
1644  Additionally, there are wild-cards that you can use in the domain names
1645  themselves. They work pretty similar to shell wild-cards: <quote>*</quote>
1646  stands for zero or more arbitrary characters, <quote>?</quote> stands for
1647  any single character, you can define character classes in square
1648  brackets and all of that can be freely mixed:
1649 </para>
1650
1651 <variablelist>
1652  <varlistentry>
1653   <term><literal>ad*.example.com</literal></term>
1654   <listitem>
1655    <para>
1656     matches <quote>adserver.example.com</quote>, 
1657     <quote>ads.example.com</quote>, etc but not <quote>sfads.example.com</quote>
1658    </para>
1659   </listitem>
1660  </varlistentry>
1661  <varlistentry>
1662   <term><literal>*ad*.example.com</literal></term>
1663   <listitem>
1664    <para>
1665     matches all of the above, and then some.
1666    </para>
1667   </listitem>
1668  </varlistentry>
1669  <varlistentry>
1670   <term><literal>.?pix.com</literal></term>
1671   <listitem>
1672    <para>
1673     matches <literal>www.ipix.com</literal>,
1674     <literal>pictures.epix.com</literal>, <literal>a.b.c.d.e.upix.com</literal> etc. 
1675    </para>
1676   </listitem>
1677  </varlistentry>
1678  <varlistentry>
1679   <term><literal>www[1-9a-ez].example.c*</literal></term>
1680   <listitem>
1681    <para>
1682      matches <literal>www1.example.com</literal>, 
1683      <literal>www4.example.cc</literal>, <literal>wwwd.example.cy</literal>, 
1684      <literal>wwwz.example.com</literal> etc., but <emphasis>not</emphasis> 
1685      <literal>wwww.example.com</literal>.
1686    </para>
1687   </listitem>
1688  </varlistentry>
1689 </variablelist>
1690
1691 </sect3>
1692
1693 <!--  ~  End section  ~  -->
1694
1695
1696 <!--   ~~~~~       New section      ~~~~~     -->
1697 <sect3><title>The Path Pattern</title>
1698
1699 <para>
1700  <application>Privoxy</application> uses Perl compatible regular expressions
1701  (through the <ulink url="http://www.pcre.org/">PCRE</ulink> library) for
1702  matching the path.
1703 </para>
1704
1705 <para>
1706  There is an <link linkend="regex">Appendix</link> with a brief quick-start into regular
1707  expressions, and full (very technical) documentation on PCRE regex syntax is available on-line
1708  at <ulink url="http://www.pcre.org/man.txt">http://www.pcre.org/man.txt</ulink>.
1709  You might also find the Perl man page on regular expressions (<literal>man perlre</literal>)
1710  useful, which is available on-line at <ulink
1711  url="http://www.perldoc.com/perl5.6/pod/perlre.html">http://www.perldoc.com/perl5.6/pod/perlre.html</ulink>.
1712 </para>
1713
1714 <para>
1715  Note that the path pattern is automatically left-anchored at the <quote>/</quote>,
1716  i.e. it matches as if it would start with a <quote>^</quote> (regular expression speak 
1717  for the beginning of a line).
1718 </para>
1719
1720 <para>
1721  Please also note that matching in the path is <emphasis>CASE INSENSITIVE</emphasis>
1722  by default, but you can switch to case sensitive at any point in the pattern by using the 
1723  <quote>(?-i)</quote> switch: <literal>www.example.com/(?-i)PaTtErN.*</literal> will match
1724  only documents whose path starts with <literal>PaTtErN</literal> in
1725  <emphasis>exactly</emphasis> this capitalization.
1726 </para>
1727 </sect3>
1728
1729 </sect2>
1730
1731 <!--  ~  End section  ~  -->
1732
1733
1734 <!--   ~~~~~       New section      ~~~~~     -->
1735
1736 <sect2 id="actions">
1737 <title>Actions</title>
1738 <para>
1739  All actions are disabled by default, until they are explicitly enabled
1740  somewhere in an actions file. Actions are turned on if preceded with a
1741  <quote>+</quote>, and turned off if preceded with a <quote>-</quote>. So a
1742  <literal>+action</literal> means <quote>do that action</quote>, e.g.
1743  <literal>+block</literal> means <quote>please block URLs that match the
1744  following patterns</quote>, and <literal>-block</literal> means <quote>don't
1745  block URLs that match the following patterns, even if <literal>+block</literal>
1746  previously applied.</quote>
1747
1748 </para>
1749
1750 <para> 
1751  Again, actions are invoked by placing them on a line, enclosed in curly braces and
1752  separated by whitespace, like in 
1753  <literal>{+some-action -some-other-action{some-parameter}}</literal>,
1754  followed by a list of URL patterns, one per line, to which they apply.
1755  Together, the actions line and the following pattern lines make up a section
1756  of the actions file. 
1757 </para>
1758
1759 <para> 
1760  There are three classes of actions:
1761 </para>
1762
1763 <para>
1764  <itemizedlist>
1765  <listitem>
1766   <para>  
1767    Boolean, i.e the action can only be <quote>enabled</quote> or
1768    <quote>disabled</quote>. Syntax:
1769   </para>
1770   <para>
1771    <screen>
1772   +<replaceable class="function">name</replaceable>        # enable action <replaceable class="parameter">name</replaceable>
1773   -<replaceable class="function">name</replaceable>        # disable action <replaceable class="parameter">name</replaceable></screen>
1774   </para>
1775   <para>  
1776    Example: <literal>+block</literal>
1777   </para>
1778  </listitem>
1779
1780
1781  <listitem>
1782   <para>  
1783    Parameterized, where some value is required in order to enable this type of action.
1784    Syntax:
1785   </para>
1786   <para>
1787    <screen>
1788   +<replaceable class="function">name</replaceable>{<replaceable class="parameter">param</replaceable>}  # enable action and set parameter to <replaceable class="parameter">param</replaceable>,
1789                # overwriting parameter from previous match if necessary
1790   -<replaceable class="function">name</replaceable>         # disable action. The parameter can be omitted</screen>
1791   </para>
1792   <para>
1793    Note that if the URL matches multiple positive forms of a parameterized action,
1794    the last match wins, i.e. the params from earlier matches are simply ignored.
1795   </para>
1796   <para>  
1797    Example: <literal>+hide-user-agent{ Mozilla 1.0 }</literal>
1798   </para>
1799  </listitem>
1800  
1801  <listitem>
1802   <para>  
1803    Multi-value. These look exactly like parameterized actions,
1804    but they behave differently: If the action applies multiple times to the
1805    same URL, but with different parameters, <emphasis>all</emphasis> the parameters
1806    from <emphasis>all</emphasis> matches are remembered. This is used for actions
1807    that can be executed for the same request repeatedly, like adding multiple
1808    headers, or filtering through multiple filters. Syntax:
1809   </para>
1810   <para>
1811    <screen>
1812   +<replaceable class="function">name</replaceable>{<replaceable class="parameter">param</replaceable>}   # enable action and add <replaceable class="parameter">param</replaceable> to the list of parameters
1813   -<replaceable class="function">name</replaceable>{<replaceable class="parameter">param</replaceable>}   # remove the parameter <replaceable class="parameter">param</replaceable> from the list of parameters
1814                 # If it was the last one left, disable the action.
1815   <replaceable class="parameter">-name</replaceable>          # disable this action completely and remove all parameters from the list</screen>
1816   </para>
1817   <para>  
1818    Examples: <literal>+add-header{X-Fun-Header: Some text}</literal> and
1819    <literal>+filter{html-annoyances}</literal>
1820   </para>
1821  </listitem>
1822
1823  </itemizedlist>
1824 </para>
1825
1826 <para>
1827  If nothing is specified in any actions file, no <quote>actions</quote> are
1828  taken. So in this case <application>Privoxy</application> would just be a
1829  normal, non-blocking, non-anonymizing proxy. You must specifically enable the
1830  privacy and blocking features you need (although the provided default actions
1831  files will give a good starting point).
1832 </para>
1833
1834 <para>
1835  Later defined actions always over-ride earlier ones.  So exceptions 
1836  to any rules you make, should come in the latter part of the file (or 
1837  in a file that is processed later when using multiple actions files). For
1838  multi-valued actions, the actions are applied in the order they are specified.
1839  Actions files are processed in the order they are defined in
1840  <filename>config</filename> (the default installation has three actions
1841  files). It also quite possible for any given URL pattern to match more than
1842  one pattern and thus more than one set of actions!
1843 </para>
1844
1845 <!-- start actions listing -->
1846 <para>
1847  The list of valid <application>Privoxy</application> actions are:
1848 </para>
1849
1850
1851 <!-- ********************************************************** -->
1852 <!-- Please note the below defined actions use id's that are    -->
1853 <!-- probably linked from other places, so please don't change. -->
1854 <!--                                                            -->
1855 <!-- ********************************************************** -->
1856
1857
1858 <!--   ~~~~~       New section      ~~~~~     -->
1859
1860 <sect3 renderas="sect4" id="add-header">
1861 <title>add-header</title>
1862
1863 <variablelist>
1864  <varlistentry>
1865   <term>Typical use:</term>
1866   <listitem>
1867    <para>Confuse log analysis, custom applications</para>
1868   </listitem>
1869  </varlistentry>
1870
1871  <varlistentry>
1872   <term>Effect:</term>
1873   <listitem>
1874    <para>
1875     Sends a user defined HTTP header to the web server.
1876    </para>
1877   </listitem>
1878  </varlistentry>
1879
1880  <varlistentry>
1881   <term>Type:</term>
1882   <!-- boolean, parameterized, Multi-value -->
1883   <listitem>
1884    <para>Multi-value.</para>
1885   </listitem>
1886  </varlistentry>
1887  
1888  <varlistentry>
1889   <term>Parameter:</term>
1890   <listitem>
1891    <para>
1892     Any string value is possible. Validity of the defined HTTP headers is not checked.
1893     It is recommended that you use the <quote><literal>X-</literal></quote> prefix
1894     for custom headers.
1895    </para>
1896   </listitem>
1897  </varlistentry>
1898  
1899 <varlistentry>
1900   <term>Notes:</term>
1901   <listitem>
1902    <para>
1903     This action may be specified multiple times, in order to define multiple 
1904     headers. This is rarely needed for the typical user. If you don't know what 
1905     <quote>HTTP headers</quote> are, you definitely don't need to worry about this 
1906     one.
1907    </para>
1908   </listitem>
1909  </varlistentry>
1910
1911  <varlistentry>
1912   <term>Example usage:</term>
1913   <listitem>
1914     <para>
1915      <screen>+add-header{X-User-Tracking: sucks}</screen>
1916    </para>
1917   </listitem>
1918  </varlistentry>
1919 </variablelist>
1920 </sect3>
1921
1922
1923 <!--   ~~~~~       New section      ~~~~~     -->
1924 <sect3 renderas="sect4" id="block">
1925 <title>block</title>
1926
1927 <variablelist>
1928  <varlistentry>
1929   <term>Typical use:</term>
1930   <listitem>
1931    <para>Block ads or other obnoxious content</para>
1932   </listitem>
1933  </varlistentry>
1934
1935  <varlistentry>
1936   <term>Effect:</term>
1937   <listitem>
1938    <para>
1939     Requests for URLs to which this action applies are blocked, i.e. the requests are not
1940     forwarded to the remote server, but answered locally with a substitute page or image,
1941     as determined by the <literal><link linkend="handle-as-image">handle-as-image</link></literal>
1942     and <literal><link linkend="set-image-blocker">set-image-blocker</link></literal> actions.
1943    </para>
1944   </listitem>
1945  </varlistentry>
1946
1947  <varlistentry>
1948   <term>Type:</term>
1949   <!-- boolean, parameterized, Multi-value -->
1950   <listitem>
1951    <para>Boolean.</para>
1952   </listitem>
1953  </varlistentry>
1954
1955  <varlistentry>
1956   <term>Parameter:</term>
1957   <listitem>
1958    <para>N/A</para>
1959   </listitem>
1960  </varlistentry>
1961  
1962 <varlistentry>
1963   <term>Notes:</term>
1964   <listitem>
1965    <para>
1966     <application>Privoxy</application> sends a special <quote>BLOCKED</quote> page
1967     for requests to blocked pages. This page contains links to find out why the request
1968     was blocked, and a click-through to the blocked content (the latter only if compiled with the
1969     force feature enabled). The <quote>BLOCKED</quote> page adapts to the available
1970     screen space -- it displays full-blown if space allows, or miniaturized and text-only
1971     if loaded into a small frame or window. If you are using <application>Privoxy</application>
1972     right now, you can take a look at the 
1973     <ulink url="http://ads.bannerserver.example.com/nasty-ads/sponsor.html"><quote>BLOCKED</quote>
1974     page</ulink>.
1975    </para>
1976    <para> 
1977     A very important exception occurs if <emphasis>both</emphasis> 
1978     <literal>block</literal> and <literal><link linkend="handle-as-image">handle-as-image</link></literal>,
1979     apply to the same request: it will then be replaced by an image. If 
1980     <literal><link linkend="set-image-blocker">set-image-blocker</link></literal>
1981     (see below) also applies, the type of image will be determined by its parameter,
1982     if not, the standard checkerboard pattern is sent.
1983    </para>
1984    <para>
1985     It is important to understand this process, in order 
1986     to understand how <application>Privoxy</application> deals with 
1987     ads and other unwanted content.
1988    </para>
1989    <para>
1990     The <literal><link linkend="filter">filter</link></literal>
1991     action can perform a very similar task, by <quote>blocking</quote>
1992     banner images and other content through rewriting the relevant URLs in the
1993     document's HTML source, so they don't get requested in the first place.
1994     Note that this is a totally different technique, and it's easy to confuse the two.
1995    </para>
1996   </listitem>
1997  </varlistentry>
1998
1999  <varlistentry>
2000   <term>Example usage (section):</term>
2001   <listitem>
2002     <para>
2003      <screen>{+block}      # Block and replace with "blocked" page
2004 .nasty-stuff.example.com
2005
2006 {+block +handle-as-image} # Block and replace with image
2007 .ad.doubleclick.net
2008 .ads.r.us</screen>
2009     </para>
2010   </listitem>
2011  </varlistentry>
2012
2013
2014 </variablelist>
2015 </sect3>
2016
2017 <!--   ~~~~~       New section      ~~~~~     -->
2018 <sect3 renderas="sect4" id="crunch-incoming-cookies">
2019 <title>crunch-incoming-cookies</title>
2020
2021 <variablelist>
2022  <varlistentry>
2023   <term>Typical use:</term>
2024   <listitem>
2025    <para>
2026     Prevent the web server from setting any cookies on your system
2027    </para>
2028   </listitem>
2029  </varlistentry>
2030
2031  <varlistentry>
2032   <term>Effect:</term>
2033   <listitem>
2034    <para>
2035     Deletes any <quote>Set-Cookie:</quote> HTTP headers from server replies.
2036    </para>
2037   </listitem>
2038  </varlistentry>
2039
2040  <varlistentry>
2041   <term>Type:</term>
2042   <!-- Boolean, Parameterized, Multi-value -->
2043   <listitem>
2044    <para>Boolean.</para>
2045   </listitem>
2046  </varlistentry>
2047
2048  <varlistentry>
2049   <term>Parameter:</term>
2050   <listitem>
2051    <para>
2052     N/A
2053    </para>
2054   </listitem>
2055  </varlistentry>
2056  
2057  <varlistentry>
2058   <term>Notes:</term>
2059   <listitem>
2060    <para>
2061     This action is only concerned with <emphasis>incoming</emphasis> cookies. For
2062     <emphasis>outgoing</emphasis> cookies, use
2063     <literal><link linkend="crunch-outgoing-cookies">crunch-outgoing-cookies</link></literal>.
2064     Use <emphasis>both</emphasis> to disable cookies completely.
2065    </para>
2066    <para>
2067     It makes <emphasis>no sense at all</emphasis> to use this action in conjunction
2068     with the <literal><link linkend="session-cookies-only">session-cookies-only</link></literal> action,
2069     since it would prevent the session cookies from being set.
2070    </para>
2071   </listitem>
2072  </varlistentry>
2073
2074  <varlistentry>
2075   <term>Example usage:</term>
2076   <listitem>
2077    <para>
2078     <screen>+crunch-incoming-cookies</screen>
2079    </para>
2080   </listitem>
2081  </varlistentry>
2082 </variablelist>
2083 </sect3>
2084
2085
2086 <!--   ~~~~~       New section      ~~~~~     -->
2087 <sect3 renderas="sect4" id="crunch-outgoing-cookies">
2088 <title>crunch-outgoing-cookies</title>
2089
2090 <variablelist>
2091  <varlistentry>
2092   <term>Typical use:</term>
2093   <listitem>
2094    <para>
2095     Prevent the web server from reading any cookies from your system
2096    </para>
2097   </listitem>
2098  </varlistentry>
2099
2100  <varlistentry>
2101   <term>Effect:</term>
2102   <listitem>
2103    <para>
2104     Deletes any <quote>Cookie:</quote> HTTP headers from client requests.
2105    </para>
2106   </listitem>
2107  </varlistentry>
2108
2109  <varlistentry>
2110   <term>Type:</term>
2111   <!-- Boolean, Parameterized, Multi-value -->
2112   <listitem>
2113    <para>Boolean.</para>
2114   </listitem>
2115  </varlistentry>
2116
2117  <varlistentry>
2118   <term>Parameter:</term>
2119   <listitem>
2120    <para>
2121     N/A
2122    </para>
2123   </listitem>
2124  </varlistentry>
2125  
2126  <varlistentry>
2127   <term>Notes:</term>
2128   <listitem>
2129    <para>
2130     This action is only concerned with <emphasis>outgoing</emphasis> cookies. For
2131     <emphasis>incoming</emphasis> cookies, use
2132     <literal><link linkend="crunch-incoming-cookies">crunch-incoming-cookies</link></literal>.
2133     Use <emphasis>both</emphasis> to disable cookies completely.
2134    </para>
2135    <para>
2136     It makes <emphasis>no sense at all</emphasis> to use this action in conjunction
2137     with the <literal><link linkend="session-cookies-only">session-cookies-only</link></literal> action,
2138     since it would prevent the session cookies from being read.
2139    </para>
2140   </listitem>
2141  </varlistentry>
2142
2143  <varlistentry>
2144   <term>Example usage:</term>
2145   <listitem>
2146    <para>
2147     <screen>+crunch-outgoing-cookies</screen>
2148    </para>
2149   </listitem>
2150  </varlistentry>
2151
2152 </variablelist>
2153 </sect3>
2154
2155
2156 <!--   ~~~~~       New section      ~~~~~     -->
2157 <sect3 renderas="sect4" id="deanimate-gifs">
2158 <title>deanimate-gifs</title>
2159
2160 <variablelist>
2161  <varlistentry>
2162   <term>Typical use:</term>
2163   <listitem>
2164    <para>Stop those annoying, distracting animated GIF images.</para>
2165   </listitem>
2166  </varlistentry>
2167
2168  <varlistentry>
2169   <term>Effect:</term>
2170   <listitem>
2171    <para>
2172     De-animate GIF animations, i.e. reduce them to their first or last image.
2173    </para>
2174   </listitem>
2175  </varlistentry>
2176
2177  <varlistentry>
2178   <term>Type:</term>
2179   <!-- boolean, parameterized, Multi-value -->
2180   <listitem>
2181    <para>Parameterized.</para>
2182   </listitem>
2183  </varlistentry>
2184
2185  <varlistentry>
2186   <term>Parameter:</term>
2187   <listitem>
2188    <para>
2189     <quote>last</quote> or <quote>first</quote>
2190    </para>
2191   </listitem>
2192  </varlistentry>
2193  
2194  <varlistentry>
2195   <term>Notes:</term>
2196   <listitem>
2197    <para>
2198     This will also shrink the images considerably (in bytes, not pixels!). If
2199     the option <quote>first</quote> is given, the first frame of the animation
2200     is used as the replacement. If <quote>last</quote> is given, the last
2201     frame of the animation is used instead, which probably makes more sense for
2202     most banner animations, but also has the risk of not showing the entire
2203     last frame (if it is only a delta to an earlier frame).
2204    </para>
2205    <para>
2206     You can safely use this action with patterns that will also match non-GIF
2207     objects, because no attempt will be made at anything that doesn't look like
2208     a GIF.
2209    </para>
2210   </listitem>
2211  </varlistentry>
2212
2213  <varlistentry>
2214   <term>Example usage:</term>
2215   <listitem>
2216     <para>
2217       <screen>+deanimate-gifs{last}</screen>
2218     </para>
2219   </listitem>
2220  </varlistentry>
2221 </variablelist>
2222 </sect3>
2223
2224 <!--   ~~~~~       New section      ~~~~~     -->
2225 <sect3 renderas="sect4" id="downgrade-http-version">
2226 <title>downgrade-http-version</title>
2227
2228 <variablelist>
2229  <varlistentry>
2230   <term>Typical use:</term>
2231   <listitem>
2232    <para>Work around (very rare) problems with HTTP/1.1</para>
2233   </listitem>
2234  </varlistentry>
2235
2236  <varlistentry>
2237   <term>Effect:</term>
2238   <listitem>
2239    <para>
2240     Downgrades HTTP/1.1 client requests and server replies to HTTP/1.0.
2241    </para>
2242   </listitem>
2243  </varlistentry>
2244
2245  <varlistentry>
2246   <term>Type:</term>
2247   <!-- boolean, parameterized, Multi-value -->
2248   <listitem>
2249    <para>Boolean.</para>
2250   </listitem>
2251  </varlistentry>
2252
2253  <varlistentry>
2254   <term>Parameter:</term>
2255   <listitem>
2256    <para>
2257     N/A
2258    </para>
2259   </listitem>
2260  </varlistentry>
2261  
2262 <varlistentry>
2263   <term>Notes:</term>
2264   <listitem>
2265    <para>
2266     This is a left-over from the time when <application>Privoxy</application>
2267     didn't support important HTTP/1.1 features well. It is left here for the
2268     unlikely case that you experience HTTP/1.1 related problems with some server
2269     out there. Not all (optional) HTTP/1.1 features are supported yet, so there
2270     is a chance you might need this action.
2271    </para>
2272   </listitem>
2273  </varlistentry>
2274
2275  <varlistentry>
2276   <term>Example usage (section):</term>
2277   <listitem>
2278     <para>
2279      <screen>{+downgrade-http-version}
2280 problem-host.example.com</screen>
2281     </para>
2282   </listitem>
2283  </varlistentry>
2284
2285 </variablelist>
2286 </sect3>
2287
2288 <!--   ~~~~~       New section      ~~~~~     -->
2289 <sect3 renderas="sect4" id="fast-redirects">
2290 <title>fast-redirects</title>
2291
2292 <variablelist>
2293  <varlistentry>
2294   <term>Typical use:</term>
2295   <listitem>
2296    <para>Fool some click-tracking scripts and speed up indirect links</para>
2297   </listitem>
2298  </varlistentry>
2299
2300  <varlistentry>
2301   <term>Effect:</term>
2302   <listitem>
2303    <para>
2304     Cut off all but the last valid URL from requests.
2305    </para>
2306   </listitem>
2307  </varlistentry>
2308
2309  <varlistentry>
2310   <term>Type:</term>
2311   <!-- boolean, parameterized, Multi-value -->
2312   <listitem>
2313    <para>Boolean.</para>
2314   </listitem>
2315  </varlistentry>
2316
2317  <varlistentry>
2318   <term>Parameter:</term>
2319   <listitem>
2320    <para>
2321     N/A
2322    </para>
2323   </listitem>
2324  </varlistentry>
2325
2326  <varlistentry>
2327   <term>Notes:</term>
2328   <listitem>
2329    <para>  
2330     Many sites, like yahoo.com, don't just link to other sites. Instead, they
2331     will link to some script on their own servers, giving the destination as a
2332     parameter, which will then redirect you to the final target. URLs
2333     resulting from this scheme typically look like:
2334     <emphasis>http://some.place/click-tracker.cgi?target=http://some.where.else</emphasis>.
2335   </para>
2336    <para>
2337     Sometimes, there are even multiple consecutive redirects encoded in the
2338     URL. These redirections via scripts make your web browsing more traceable,
2339     since the server from which you follow such a link can see where you go
2340     to. Apart from that, valuable bandwidth and time is wasted, while your
2341     browser ask the server for one redirect after the other. Plus, it feeds
2342     the advertisers.
2343    </para>
2344    <para>
2345     This feature is currently not very smart and is scheduled for improvement.
2346     It is likely to break some sites. You should expect to need possibly 
2347     many exceptions to this action, if it is enabled by default in
2348     <filename>default.action</filename>. Some sites just don't work without 
2349     it.
2350    </para>
2351   </listitem>
2352  </varlistentry>
2353
2354  <varlistentry>
2355   <term>Example usage:</term>
2356   <listitem>
2357     <para>
2358      <screen>{+fast-redirects}</screen>
2359     </para>
2360   </listitem>
2361  </varlistentry>
2362
2363 </variablelist>
2364 </sect3>
2365
2366
2367 <!--   ~~~~~       New section      ~~~~~     -->
2368 <sect3 renderas="sect4" id="filter">
2369 <title>filter</title>
2370
2371 <variablelist>
2372  <varlistentry>
2373   <term>Typical use:</term>
2374   <listitem>
2375    <para>Get rid of HTML and JavaScript annoyances, banner advertisements (by size), do fun text replacements, etc.</para>
2376   </listitem>
2377  </varlistentry>
2378
2379  <varlistentry>
2380   <term>Effect:</term>
2381   <listitem>
2382    <para>
2383     Text documents, including HTML and JavaScript, to which this action
2384     applies, are filtered on-the-fly through the specified regular expression
2385     based substitutions.
2386    </para>
2387   </listitem>
2388  </varlistentry>
2389
2390  <varlistentry>
2391   <term>Type:</term>
2392   <!-- boolean, parameterized, Multi-value -->
2393   <listitem>
2394    <para>Parameterized.</para>
2395   </listitem>
2396  </varlistentry>
2397
2398  <varlistentry>
2399   <term>Parameter:</term>
2400   <listitem>
2401    <para>
2402     The name of a filter, as defined in the <link linkend="filter-file">filter file</link>
2403     (typically <filename>default.filter</filename>, set by the
2404     <literal><link linkend="filterfile">filterfile</link></literal>
2405     option in the <link linkend="config">config file</link>). Filtering 
2406     can be completely disabled without the use of parameters.
2407    </para>
2408   </listitem>
2409  </varlistentry>
2410  
2411  <varlistentry>
2412   <term>Notes:</term>
2413   <listitem>
2414    <para>
2415     For your convenience, there are a number of pre-defined filters available 
2416     in the distribution filter file that you can use. See the examples below for
2417     a list.
2418    </para>
2419    <para>
2420     This is potentially a very powerful feature!  But <quote>rolling your own</quote>
2421     filters requires a knowledge of regular expressions and HTML.
2422    </para>
2423    <para>
2424     Filtering requires buffering the page content, which may appear to
2425     slow down page rendering since nothing is displayed until all content has
2426     passed the filters. (It does not really take longer, but seems that way
2427     since the page is not incrementally displayed.) This effect will be more
2428     noticeable on slower connections.
2429    </para>
2430    <para>
2431     The amount of data that can be filtered is limited to the 
2432     <literal><link linkend="buffer-limit">buffer-limit</link></literal>
2433     option in the main <link linkend="config">config file</link>. The 
2434     default is 4096 KB (4 Megs). Once this limit is exceeded, the buffered
2435     data, and all pending data, is passed through unfiltered. Inappropriate 
2436     MIME types are not filtered.
2437    </para>
2438    <para>
2439     At this time, <application>Privoxy</application> cannot (yet!) uncompress compressed
2440     documents. If you want filtering to work on all documents, even those that
2441     would normally be sent compressed, use the
2442     <literal><link linkend="prevent-compression">prevent-compression</link></literal>
2443     action in conjunction with <literal>filter</literal>.
2444    </para>
2445    <para>
2446     Filtering can achieve some of the same effects as the 
2447     <literal><link linkend="block">block</link></literal>
2448     action, i.e. it can be used to block ads and banners. But the mechanism 
2449     works quite differently. One effective use, is to block ad banners 
2450     based on their size (see below), since many of these seem to be somewhat 
2451     standardized.
2452    </para>
2453    <para>
2454     <link linkend="contact">Feedback</link> with suggestions for new or
2455     improved filters is particularly welcome!
2456    </para>
2457   </listitem>
2458  </varlistentry>
2459
2460  <varlistentry>
2461   <term>Example usage (with filters from the distribution <filename>default.filter</filename> file):</term>
2462   <listitem>
2463    <para>
2464     <anchor id="filter-html-annoyances">
2465     <screen>+filter{html-annoyances}     # Get rid of particularly annoying HTML abuse.</screen>
2466    </para>
2467    <para>
2468     <anchor id="filter-js-annoyances">
2469     <screen>+filter{js-annoyances}       # Get rid of particularly annoying JavaScript abuse</screen>
2470    </para>
2471    <para>
2472     <anchor id="filter-banners-by-size">
2473     <screen>+filter{banners-by-size}     # Kill banners based on their size for this page (<emphasis>very</emphasis> efficient!)</screen>
2474    </para>
2475    <para>
2476     <anchor id="filter-banners-by-link">
2477     <screen>+filter{banners-by-link}     # Kill banners based on the link they are contained in (experimental)</screen>
2478    </para>
2479    <para>
2480     <anchor id="filter-img-reorder">
2481     <screen>+filter{img-reorder}         # Reorder attributes in &lt;img&gt; tags to make the banners-by-* filters more effective</screen>
2482    </para>
2483    <para>
2484     <anchor id="filter-content-cookies">
2485     <screen>+filter{content-cookies}     # Kill cookies that come sneaking in the HTML or JS content</screen>
2486    </para>
2487    <para>
2488     <anchor id="filter-popups">
2489     <screen>+filter{popups}              # Kill all popups in JS and HTML</screen>
2490    </para>
2491    <para>
2492     <anchor id="filter-webbugs">
2493     <screen>+filter{webbugs}             # Squish WebBugs (1x1 invisible GIFs used for user tracking)</screen>
2494    </para>
2495    <para>
2496     <anchor id="filter-fun">
2497     <screen>+filter{fun}                 # Text replacements for subversive browsing fun!</screen>
2498    </para>
2499    <para>
2500     <anchor id="filter-frameset-borders">
2501     <screen>+filter{frameset-borders}    # Give frames a border and make them resizeable</screen> 
2502    </para>
2503    <para>
2504     <anchor id="filter-refresh-tags">
2505     <screen>+filter{refresh-tags}        # Kill automatic refresh tags (for dial-on-demand setups)</screen>
2506    </para>
2507    <para>
2508     <anchor id="filter-nimda">
2509     <screen>+filter{nimda}               # Remove Nimda (virus) code.</screen>
2510    </para>
2511    <para>
2512     <anchor id="filter-shockwave-flash">
2513     <screen>+filter{shockwave-flash}     # Kill embedded Shockwave Flash objects</screen>
2514    </para>
2515    <para>
2516     <anchor id="filter-crude-parental">
2517     <screen>+filter{crude-parental}      # Kill all web pages that contain the words "sex" or "warez"</screen>
2518    </para>
2519    <para>
2520     <anchor id="filter-js-events">
2521     <screen>+filter{js-events}           # Kill all JS event bindings (<emphasis>Radically destructive!</emphasis> Only for extra nasty sites) </screen>
2522    </para>
2523   </listitem>
2524  </varlistentry>
2525 </variablelist>
2526 </sect3>
2527
2528
2529 <!--   ~~~~~       New section      ~~~~~     -->
2530 <sect3 renderas="sect4" id="handle-as-image">
2531 <title>handle-as-image</title>
2532
2533 <variablelist>
2534  <varlistentry>
2535   <term>Typical use:</term>
2536   <listitem>
2537    <para>Mark URLs as belonging to images (so they'll be replaced by images <emphasis>if they get blocked</emphasis>)</para>
2538   </listitem>
2539  </varlistentry>
2540
2541  <varlistentry>
2542   <term>Effect:</term>
2543   <listitem>
2544    <para>
2545     This action alone doesn't do anything noticeable. It just marks URLs as images.
2546     If the <literal><link linkend="block">block</link></literal> action <emphasis>also applies</emphasis>,
2547     the presence or absence of this mark decides whether an HTML <quote>blocked</quote>
2548     page, or a replacement image (as determined by the <literal><link
2549     linkend="set-image-blocker">set-image-blocker</link></literal> action) will be sent to the
2550     client as a substitute for the blocked content.
2551    </para>
2552   </listitem>
2553  </varlistentry>
2554
2555  <varlistentry>
2556   <term>Type:</term>
2557   <!-- Boolean, Parameterized, Multi-value -->
2558   <listitem>
2559    <para>Boolean.</para>
2560   </listitem>
2561  </varlistentry>
2562
2563  <varlistentry>
2564   <term>Parameter:</term>
2565   <listitem>
2566    <para>
2567     N/A
2568    </para>
2569   </listitem>
2570  </varlistentry>
2571  
2572  <varlistentry>
2573   <term>Notes:</term>
2574   <listitem>
2575    <para>
2576     The below generic example section is actually part of <filename>default.action</filename>.
2577     It marks all URLs with well-known image file name extensions as images and should
2578     be left intact. 
2579    </para>
2580    <para>
2581     Users will probably only want to use the handle-as-image action in conjunction with
2582     <literal><link linkend="block">block</link></literal>, to block sources of banners, whose URLs don't
2583     reflect the file type, like in the second example section.
2584    </para>
2585    <para>
2586     Note that you cannot treat HTML pages as images in most cases. For instance, (in-line) ad
2587     frames require an HTML page to be sent, or they won't display properly.
2588     Forcing <literal>handle-as-image</literal> in this situation will not replace the
2589     ad frame with an image, but lead to error messages.
2590    </para>
2591   </listitem>
2592  </varlistentry>
2593
2594  <varlistentry>
2595   <term>Example usage (sections):</term>
2596   <listitem>
2597    <para>
2598      <screen># Generic image extensions:
2599 #
2600 {+handle-as-image}
2601 /.*\.(gif|jpg|jpeg|png|bmp|ico)$
2602
2603 # These don't look like images, but they're banners and should be
2604 # blocked as images:
2605 #
2606 {+block +handle-as-image}
2607 some.nasty-banner-server.com/junk.cgi?output=trash
2608
2609 # Banner source! Who cares if they also have non-image content?
2610 ad.doubleclick.net 
2611 </screen>
2612    </para>
2613   </listitem>
2614  </varlistentry>
2615 </variablelist>
2616 </sect3>
2617
2618
2619 <!--   ~~~~~       New section      ~~~~~     -->
2620 <sect3 renderas="sect4" id="hide-forwarded-for-headers">
2621 <title>hide-forwarded-for-headers</title>
2622
2623 <variablelist>
2624  <varlistentry>
2625   <term>Typical use:</term>
2626   <listitem>
2627    <para>Improve privacy by hiding the true source of the request</para>
2628   </listitem>
2629  </varlistentry>
2630
2631  <varlistentry>
2632   <term>Effect:</term>
2633   <listitem>
2634    <para>
2635     Deletes any existing <quote>X-Forwarded-for:</quote> HTTP header from client requests,
2636     and prevents adding a new one.
2637    </para>
2638   </listitem>
2639  </varlistentry>
2640
2641  <varlistentry>
2642   <term>Type:</term>
2643   <!-- Boolean, Parameterized, Multi-value -->
2644   <listitem>
2645    <para>Boolean.</para>
2646   </listitem>
2647  </varlistentry>
2648
2649  <varlistentry>
2650   <term>Parameter:</term>
2651   <listitem>
2652    <para>
2653     N/A
2654    </para>
2655   </listitem>
2656  </varlistentry>
2657  
2658  <varlistentry>
2659   <term>Notes:</term>
2660   <listitem>
2661    <para>
2662     It is fairly safe to leave this on.
2663    </para>
2664    <para>
2665     This action is scheduled for improvement: It should be able to generate forged 
2666     <quote>X-Forwarded-for:</quote> headers using random IP addresses from a specified network,
2667     to make successive requests from the same client look like requests from a pool of different
2668     users sharing the same proxy.
2669    </para>
2670   </listitem>
2671  </varlistentry>
2672
2673  <varlistentry>
2674   <term>Example usage:</term>
2675   <listitem>
2676     <para>
2677      <screen>+hide-forwarded-for-headers</screen>
2678    </para>
2679   </listitem>
2680  </varlistentry>
2681 </variablelist>
2682 </sect3>
2683
2684
2685 <!--   ~~~~~       New section      ~~~~~     -->
2686 <sect3 renderas="sect4" id="hide-from-header">
2687 <title>hide-from-header</title>
2688
2689 <variablelist>
2690  <varlistentry>
2691   <term>Typical use:</term>
2692   <listitem>
2693    <para>Keep your (old and ill) browser from telling web servers your email address</para>
2694   </listitem>
2695  </varlistentry>
2696
2697  <varlistentry>
2698   <term>Effect:</term>
2699   <listitem>
2700    <para>
2701     Deletes any existing <quote>From:</quote> HTTP header, or replaces it with the
2702     specified string.
2703    </para>
2704   </listitem>
2705  </varlistentry>
2706
2707  <varlistentry>
2708   <term>Type:</term>
2709   <!-- Boolean, Parameterized, Multi-value -->
2710   <listitem>
2711    <para>Parameterized.</para>
2712   </listitem>
2713  </varlistentry>
2714
2715  <varlistentry>
2716   <term>Parameter:</term>
2717   <listitem>
2718    <para>
2719     Keyword: <quote>block</quote>, or any user defined value.
2720    </para>
2721   </listitem>
2722  </varlistentry>
2723  
2724  <varlistentry>
2725   <term>Notes:</term>
2726   <listitem>
2727    <para>
2728     The keyword <quote>block</quote> will completely remove the header 
2729     (not to be confused with the <literal><link linkend="block">block</link></literal>
2730     action).
2731    </para>
2732    <para>
2733     Alternately, you can specify any value you prefer to be sent to the web
2734     server. If you do, it is a matter of fairness not to use any address that
2735     is actually used by a real person.
2736    </para>
2737    <para>
2738     This action is rarely needed, as modern web browsers don't send
2739     <quote>From:</quote> headers anymore.
2740    </para>
2741   </listitem>
2742  </varlistentry>
2743
2744  <varlistentry>
2745   <term>Example usage:</term>
2746   <listitem>
2747    <para>
2748     <screen>+hide-from-header{block}</screen> or
2749     <screen>+hide-from-header{spam-me-senseless@sittingduck.example.com}</screen>
2750    </para>
2751   </listitem>
2752  </varlistentry>
2753 </variablelist>
2754 </sect3>
2755
2756
2757 <!--   ~~~~~       New section      ~~~~~     -->
2758 <sect3 renderas="sect4" id="hide-referrer">
2759 <title>hide-referrer</title>
2760 <anchor id="hide-referer">
2761 <variablelist>
2762  <varlistentry>
2763   <term>Typical use:</term>
2764   <listitem>
2765    <para>Conceal which link you followed to get to a particular site</para>
2766   </listitem>
2767  </varlistentry>
2768
2769  <varlistentry>
2770   <term>Effect:</term>
2771   <listitem>
2772    <para>
2773     Deletes the <quote>Referer:</quote> (sic) HTTP header from the client request,
2774     or replaces it with a forged one.
2775    </para>
2776   </listitem>
2777  </varlistentry>
2778
2779  <varlistentry>
2780   <term>Type:</term>
2781   <!-- Boolean, Parameterized, Multi-value -->
2782   <listitem>
2783    <para>Parameterized.</para>
2784   </listitem>
2785  </varlistentry>
2786
2787  <varlistentry>
2788   <term>Parameter:</term>
2789   <listitem>
2790    <itemizedlist>
2791     <listitem>
2792      <para><quote>block</quote> to delete the header completely.</para>
2793     </listitem>
2794     <listitem>
2795      <para><quote>forge</quote> to pretend to be coming from the homepage of the server we are talking to.</para>
2796     </listitem>
2797     <listitem>
2798      <para>Any other string to set a user defined referrer.</para>
2799     </listitem>
2800    </itemizedlist>
2801   </listitem>
2802  </varlistentry>
2803  
2804  <varlistentry>
2805   <term>Notes:</term>
2806   <listitem>
2807    <para>
2808     <quote>forge</quote> is the preferred option here, since some servers will
2809     not send images back otherwise, in an attempt to prevent their valuable
2810     content from being embedded elsewhere (and hence, without being surrounded
2811     by <emphasis>their</emphasis> banners).
2812    </para>
2813   <para>  
2814    <literal>hide-referer</literal> is an alternate spelling of
2815    <literal>hide-referrer</literal> and the two can be can be freely
2816    substituted with each other. (<quote>referrer</quote> is the
2817    correct English spelling, however the HTTP specification has a bug - it
2818    requires it to be spelled as <quote>referer</quote>.) 
2819   </para>
2820   </listitem>
2821  </varlistentry>
2822
2823  <varlistentry>
2824   <term>Example usage:</term>
2825   <listitem>
2826    <para>
2827      <screen>+hide-referrer{forge}</screen> or
2828      <screen>+hide-referrer{http://www.yahoo.com/}</screen>
2829    </para>
2830   </listitem>
2831  </varlistentry>
2832 </variablelist>
2833 </sect3>
2834
2835
2836 <!--   ~~~~~       New section      ~~~~~     -->
2837 <sect3 renderas="sect4" id="hide-user-agent">
2838 <title>hide-user-agent</title>
2839
2840 <variablelist>
2841  <varlistentry>
2842   <term>Typical use:</term>
2843   <listitem>
2844    <para>Conceal your type of browser and client operating system</para>
2845   </listitem>
2846  </varlistentry>
2847
2848  <varlistentry>
2849   <term>Effect:</term>
2850   <listitem>
2851    <para>
2852     Replaces the value of the <quote>User-Agent:</quote> HTTP header
2853     in client requests with the specified value.
2854    </para>
2855   </listitem>
2856  </varlistentry>
2857
2858  <varlistentry>
2859   <term>Type:</term>
2860   <!-- Boolean, Parameterized, Multi-value -->
2861   <listitem>
2862    <para>Parameterized.</para>
2863   </listitem>
2864  </varlistentry>
2865
2866  <varlistentry>
2867   <term>Parameter:</term>
2868   <listitem>
2869    <para>
2870     Any user-defined string.
2871    </para>
2872   </listitem>
2873  </varlistentry>
2874  
2875  <varlistentry>
2876   <term>Notes:</term>
2877   <listitem>
2878    <warning> 
2879     <para>
2880      This breaks many web sites that depend on looking at this header in order
2881      to customize their content for different browsers (which, by the
2882      way, is <emphasis>NOT</emphasis> a <ulink
2883      url="http://www.javascriptkit.com/javaindex.shtml">smart way to do
2884      that</ulink>!).
2885     </para>
2886    </warning>
2887    <para>
2888     Using this action in multi-user setups or wherever different types of
2889     browsers will access the same <application>Privoxy</application> is
2890     <emphasis>not recommended</emphasis>. In single-user, single-browser
2891     setups, you might use it to delete your OS version information from
2892     the headers, because it is an invitation to exploit known bugs for your
2893     OS. It is also occasionally useful to forge this in order to access 
2894     sites that won't let you in otherwise (though there may be a good 
2895     reason in some cases). Example of this: some MSN sites will not 
2896     let <application>Mozilla</application> enter, yet forging to a 
2897     <application>Netscape 6.1</application> user-agent works just fine.
2898     (Must be just a silly MS goof, I'm sure :-).
2899    </para>
2900    <para>
2901     This action is scheduled for improvement.
2902    </para>
2903    </listitem>
2904  </varlistentry>
2905
2906  <varlistentry>
2907   <term>Example usage:</term>
2908   <listitem>
2909    <para>
2910      <screen>+hide-user-agent{Netscape 6.1 (X11; I; Linux 2.4.18 i686)}</screen>
2911    </para>
2912   </listitem>
2913  </varlistentry>
2914 </variablelist>
2915 </sect3>
2916
2917
2918 <!--   ~~~~~       New section      ~~~~~     -->
2919 <sect3 renderas="sect4" id="kill-popups">
2920 <title>kill-popups<anchor id="kill-popup"></title>
2921
2922 <variablelist>
2923  <varlistentry>
2924   <term>Typical use:</term>
2925   <listitem>
2926    <para>Eliminate those annoying pop-up windows</para>
2927   </listitem>
2928  </varlistentry>
2929
2930  <varlistentry>
2931   <term>Effect:</term>
2932   <listitem>
2933    <para>
2934     While loading the document, replace JavaScript code that opens
2935     pop-up windows with (syntactically neutral) dummy code on the fly.
2936    </para>
2937   </listitem>
2938  </varlistentry>
2939
2940  <varlistentry>
2941   <term>Type:</term>
2942   <!-- Boolean, Parameterized, Multi-value -->
2943   <listitem>
2944    <para>Boolean.</para>
2945   </listitem>
2946  </varlistentry>
2947
2948  <varlistentry>
2949   <term>Parameter:</term>
2950   <listitem>
2951    <para>
2952     N/A
2953    </para>
2954   </listitem>
2955  </varlistentry>
2956  
2957  <varlistentry>
2958   <term>Notes:</term>
2959   <listitem>
2960    <para>
2961     This action is easily confused with the built-in, hardwired <literal><link linkend="filter">filter</link></literal>
2962     action, but there are important differences: For <literal>kill-popups</literal>,
2963     the document need not be buffered, so it can be incrementally rendered while
2964     downloading. But <literal>kill-popups</literal> doesn't catch as many pop-ups as
2965     <literal><link
2966     linkend="filter">filter</link>{<replaceable>popups</replaceable>}</literal>
2967     does. 
2968    </para>
2969    <para>
2970     Think of it as a fast and efficient replacement for a filter that you
2971     can use if you don't want any filtering at all. Note that it doesn't make
2972     sense to combine it with any <literal><link linkend="filter">filter</link></literal> action,
2973     since as soon as one <literal><link linkend="filter">filter</link></literal> applies,
2974     the whole document needs to be buffered anyway, which destroys the advantage of
2975     the <literal>kill-popups</literal> action over its filter equivalent.
2976    </para>
2977    <para>
2978     Killing all pop-ups is a dangerous business. Many shops and banks rely on
2979     pop-ups to display forms, shopping carts etc, and killing only the unwanted pop-ups 
2980     would require artificial intelligence in <application>Privoxy</application>.
2981     If the only kind of pop-ups that you want to kill are exit consoles (those
2982     <emphasis>really nasty</emphasis> windows that appear when you close an other
2983     one), you might want to use
2984     <literal><link
2985     linkend="filter">filter</link>{<replaceable>js-annoyances</replaceable>}</literal>
2986     instead. 
2987    </para>
2988
2989   <!-- 
2990    <para>
2991     An alternate spelling is <literal>+kill-popup</literal>, which is 
2992     interchangeable.
2993    </para>
2994  --> 
2995   </listitem>
2996  </varlistentry>
2997
2998  <varlistentry>
2999   <term>Example usage:</term>
3000   <listitem>
3001    <para><screen>+kill-popups</screen></para>
3002   </listitem>
3003  </varlistentry>
3004 </variablelist>
3005 </sect3>
3006
3007
3008 <!--   ~~~~~       New section      ~~~~~     -->
3009 <sect3 renderas="sect4" id="limit-connect">
3010 <title>limit-connect</title>
3011
3012 <variablelist>
3013  <varlistentry>
3014   <term>Typical use:</term>
3015   <listitem>
3016    <para>Prevent abuse of <application>Privoxy</application> as a TCP proxy relay</para>
3017   </listitem>
3018  </varlistentry>
3019
3020  <varlistentry>
3021   <term>Effect:</term>
3022   <listitem>
3023    <para>
3024     Specifies to which ports HTTP CONNECT requests are allowable.
3025    </para>
3026   </listitem>
3027  </varlistentry>
3028
3029  <varlistentry>
3030   <term>Type:</term>
3031   <!-- Boolean, Parameterized, Multi-value -->
3032   <listitem>
3033    <para>Parameterized.</para>
3034   </listitem>
3035  </varlistentry>
3036
3037  <varlistentry>
3038   <term>Parameter:</term>
3039   <listitem>
3040    <para>
3041     A comma-separated list of ports or port ranges (the latter using dashes, with the minimum
3042     defaulting to 0 and the maximum to 65K).
3043    </para>
3044   </listitem>
3045  </varlistentry>
3046  
3047  <varlistentry>
3048   <term>Notes:</term>
3049   <listitem>
3050    <para>
3051     By default, i.e. if no <literal>limit-connect</literal> action applies,
3052     <application>Privoxy</application> only allows HTTP CONNECT
3053     requests to port 443 (the standard, secure HTTPS port). Use 
3054     <literal>limit-connect</literal> if more fine-grained control is desired
3055     for some or all destinations.
3056    </para>
3057    <para>
3058     The CONNECT methods exists in HTTP to allow access to secure websites
3059     (<quote>https://</quote> URLs) through proxies. It works very simply:
3060     the proxy connects to the server on the specified port, and then
3061     short-circuits its connections to the client and to the remote server.
3062     This can be a big security hole, since CONNECT-enabled proxies can be
3063     abused as TCP relays very easily.
3064   </para>
3065   <para>
3066    If you don't know what any of this means, there probably is no reason to 
3067    change this one, since the default is already very restrictive.
3068   </para>
3069   </listitem>
3070  </varlistentry>
3071
3072  <varlistentry>
3073   <term>Example usages:</term>
3074   <listitem>
3075    <!-- I had trouble getting the spacing to look right in my browser -->
3076    <!-- I probably have the wrong font setup, bollocks. -->
3077    <!-- Apparently the emphasis tag uses a proportional font no matter what -->
3078     <para>
3079      <screen>+limit-connect{443}                   # This is the default and need not be specified.
3080 +limit-connect{80,443}                # Ports 80 and 443 are OK.
3081 +limit-connect{-3, 7, 20-100, 500-}   # Ports less than 3, 7, 20 to 100 and above 500 are OK.
3082 +limit-connect{-}                     # All ports are OK (gaping security hole!)</screen>
3083    </para>
3084   </listitem>
3085  </varlistentry>
3086 </variablelist>
3087 </sect3>
3088
3089 <!--   ~~~~~       New section      ~~~~~     -->
3090 <sect3 renderas="sect4" id="prevent-compression">
3091 <title>prevent-compression</title>
3092
3093 <variablelist>
3094  <varlistentry>
3095   <term>Typical use:</term>
3096   <listitem>
3097    <para>
3098     Ensure that servers send the content uncompressed, so it can be
3099     passed through <literal><link linkend="filter">filter</link></literal>s
3100    </para>
3101   </listitem>
3102  </varlistentry>
3103
3104  <varlistentry>
3105   <term>Effect:</term>
3106   <listitem>
3107    <para>
3108     Adds a header to the request that asks for uncompressed transfer.
3109    </para>
3110   </listitem>
3111  </varlistentry>
3112
3113  <varlistentry>
3114   <term>Type:</term>
3115   <!-- Boolean, Parameterized, Multi-value -->
3116   <listitem>
3117    <para>Boolean.</para>
3118   </listitem>
3119  </varlistentry>
3120
3121  <varlistentry>
3122   <term>Parameter:</term>
3123   <listitem>
3124    <para>
3125     N/A
3126    </para>
3127   </listitem>
3128  </varlistentry>
3129  
3130  <varlistentry>
3131   <term>Notes:</term>
3132   <listitem>
3133    <para>
3134     More and more websites send their content compressed by default, which
3135     is generally a good idea and saves bandwidth. But for the <literal><link
3136     linkend="filter">filter</link></literal>, <literal><link linkend="deanimate-gifs">deanimate-gifs</link></literal>
3137     and <literal><link linkend="kill-popups">kill-popups</link></literal> actions to work,
3138     <application>Privoxy</application> needs access to the  uncompressed data.
3139     Unfortunately, <application>Privoxy</application> can't yet(!)  uncompress, filter, and
3140     re-compress the content on the fly. So if you want to ensure that all websites, including
3141     those that normally compress, can be filtered, you need to use this action.
3142    </para>
3143    <para>
3144     This will slow down transfers from those websites, though. If you use any of the above-mentioned
3145     actions, you will typically want to use <literal>prevent-compression</literal> in conjunction
3146     with them.
3147    </para>
3148    <para>
3149     Note that some (rare) ill-configured sites don't handle requests for uncompressed
3150     documents correctly (they send an empty document body). If you use <literal>prevent-compression</literal>
3151     per default, you'll have to add exceptions for those sites. See the example for how to do that.
3152    </para>
3153   </listitem>
3154  </varlistentry>
3155
3156  <varlistentry>
3157   <term>Example usage (sections):</term>
3158   <listitem>
3159    <para>
3160     <screen># Set default:
3161 #
3162 {+prevent-compression}
3163 / # Match all sites
3164
3165 # Make exceptions for ill sites:
3166 #
3167 {-prevent-compression}
3168 www.debianhelp.org
3169 www.pclinuxonline.com</screen>
3170    </para>
3171   </listitem>
3172  </varlistentry>
3173
3174 </variablelist>
3175 </sect3>
3176
3177
3178 <!--   ~~~~~       New section      ~~~~~     -->
3179 <sect3 renderas="sect4" id="send-vanilla-wafer">
3180 <title>send-vanilla-wafer</title>
3181
3182 <variablelist>
3183  <varlistentry>
3184   <term>Typical use:</term>
3185   <listitem>
3186    <para>
3187     Feed log analysis scripts with useless data.
3188    </para>
3189   </listitem>
3190  </varlistentry>
3191
3192  <varlistentry>
3193   <term>Effect:</term>
3194   <listitem>
3195    <para>
3196     Sends a cookie with each request stating that you do not accept any copyright
3197     on cookies sent to you, and asking the site operator not to track you.
3198    </para>
3199   </listitem>
3200  </varlistentry>
3201
3202  <varlistentry>
3203   <term>Type:</term>
3204   <!-- Boolean, Parameterized, Multi-value -->
3205   <listitem>
3206    <para>Boolean.</para>
3207   </listitem>
3208  </varlistentry>
3209
3210  <varlistentry>
3211   <term>Parameter:</term>
3212   <listitem>
3213    <para>
3214     N/A
3215    </para>
3216   </listitem>
3217  </varlistentry>
3218  
3219  <varlistentry>
3220   <term>Notes:</term>
3221   <listitem>
3222    <para>
3223     The vanilla wafer is a (relatively) unique header and could conceivably be used to track you.
3224    </para>
3225    <para>
3226     This action is rarely used and not enabled in the default configuration.
3227    </para>
3228   </listitem>
3229  </varlistentry>
3230
3231  <varlistentry>
3232   <term>Example usage:</term>
3233   <listitem>
3234    <para>
3235      <screen>+send-vanilla-wafer</screen>
3236    </para>
3237   </listitem>
3238  </varlistentry>
3239
3240 </variablelist>
3241 </sect3>
3242
3243
3244 <!--   ~~~~~       New section      ~~~~~     -->
3245 <sect3 renderas="sect4" id="send-wafer">
3246 <title>send-wafer</title>
3247
3248 <variablelist>
3249  <varlistentry>
3250   <term>Typical use:</term>
3251   <listitem>
3252    <para>
3253     Send custom cookies or feed log analysis scripts with even more useless data.
3254    </para>
3255   </listitem>
3256  </varlistentry>
3257
3258  <varlistentry>
3259   <term>Effect:</term>
3260   <listitem>
3261    <para>
3262     Sends a custom, user-defined cookie with each request.
3263    </para>
3264   </listitem>
3265  </varlistentry>
3266
3267  <varlistentry>
3268   <term>Type:</term>
3269   <!-- Boolean, Parameterized, Multi-value -->
3270   <listitem>
3271    <para>Multi-value.</para>
3272   </listitem>
3273  </varlistentry>
3274
3275  <varlistentry>
3276   <term>Parameter:</term>
3277   <listitem>
3278    <para>
3279     A string of the form <quote><replaceable class="option">name</replaceable>=<replaceable
3280     class="parameter">value</replaceable></quote>.
3281    </para>
3282   </listitem>
3283  </varlistentry>
3284  
3285  <varlistentry>
3286   <term>Notes:</term>
3287   <listitem>
3288    <para>
3289     Being multi-valued, multiple instances of this action can apply to the same request,
3290     resulting in multiple cookies being sent.
3291    </para>
3292    <para>
3293     This action is rarely used and not enabled in the default configuration.
3294    </para>
3295   </listitem>
3296  </varlistentry>
3297  <varlistentry>
3298   <term>Example usage (section):</term>
3299   <listitem>
3300    <para>
3301     <screen>{+send-wafer{UsingPrivoxy=true}}
3302 my-internal-testing-server.void</screen>
3303    </para>
3304   </listitem>
3305  </varlistentry>
3306 </variablelist>
3307 </sect3>
3308
3309
3310 <!--   ~~~~~       New section      ~~~~~     -->
3311 <sect3 renderas="sect4" id="session-cookies-only">
3312 <title>session-cookies-only</title>
3313
3314 <variablelist>
3315  <varlistentry>
3316   <term>Typical use:</term>
3317   <listitem>
3318    <para>
3319     Allow only temporary <quote>session</quote> cookies (for the current browser session <emphasis>only</emphasis>).
3320    </para>
3321   </listitem>
3322  </varlistentry>
3323
3324  <varlistentry>
3325   <term>Effect:</term>
3326   <listitem>
3327    <para>
3328     Deletes the <quote>expires</quote> field from <quote>Set-Cookie:</quote> server headers.
3329     Most browsers will not store such cookies permanently and forget them in between sessions.
3330    </para>
3331   </listitem>
3332  </varlistentry>
3333
3334 <varlistentry>
3335   <term>Type:</term>
3336   <!-- Boolean, Parameterized, Multi-value -->
3337   <listitem>
3338    <para>Boolean.</para>
3339   </listitem>
3340  </varlistentry>
3341
3342  <varlistentry>
3343   <term>Parameter:</term>
3344   <listitem>
3345    <para>
3346     N/A
3347    </para>
3348   </listitem>
3349  </varlistentry>
3350  
3351  <varlistentry>
3352   <term>Notes:</term>
3353   <listitem>
3354    <para>
3355     This is less strict than <literal><link linkend="crunch-incoming-cookies">crunch-incoming-cookies</link></literal> / 
3356     <literal><link linkend="crunch-outgoing-cookies">crunch-outgoing-cookies</link></literal> and allows you to browse
3357     websites that insist or rely on setting cookies, without compromising your privacy too badly.
3358    </para>
3359    <para>
3360     Most browsers will not permanently store cookies that have been processed by
3361     <literal>session-cookies-only</literal> and will forget about them between sessions.
3362     This makes profiling cookies useless, but won't break sites which require cookies so
3363     that you can log in for transactions. This is generally turned on for all 
3364     sites, and is the recommended setting.
3365    </para>
3366    <para>
3367     It makes <emphasis>no sense at all</emphasis> to use <literal>session-cookies-only</literal>
3368     together with <literal><link linkend="crunch-incoming-cookies">crunch-incoming-cookies</link></literal> or
3369     <literal><link linkend="crunch-outgoing-cookies">crunch-outgoing-cookies</link></literal>. If you do, cookies
3370     will be plainly killed.
3371    </para>
3372    <para>
3373     Note that it is up to the browser how it handles such cookies without an <quote>expires</quote>
3374     field. If you use an exotic browser, you might want to try it out to be sure.
3375    </para>
3376   </listitem>
3377  </varlistentry>
3378
3379  <varlistentry>
3380   <term>Example usage:</term>
3381   <listitem>
3382    <para>
3383      <screen>+session-cookies-only</screen>
3384    </para>
3385   </listitem>
3386  </varlistentry>
3387 </variablelist>
3388 </sect3>
3389
3390
3391 <!--   ~~~~~       New section      ~~~~~     -->
3392 <sect3 renderas="sect4" id="set-image-blocker">
3393 <title>set-image-blocker</title>
3394
3395 <variablelist>
3396  <varlistentry>
3397   <term>Typical use:</term>
3398   <listitem>
3399    <para>Choose the replacement for blocked images</para>
3400   </listitem>
3401  </varlistentry>
3402
3403  <varlistentry>
3404   <term>Effect:</term>
3405   <listitem>
3406    <para>
3407      This action alone doesn't do anything noticeable. If <emphasis>both</emphasis>
3408      <literal><link linkend="block">block</link></literal> <emphasis>and</emphasis> <literal><link
3409      linkend="handle-as-image">handle-as-image</link></literal> <emphasis>also</emphasis>
3410      apply, i.e. if the request is to be blocked as an image,
3411      <emphasis>then</emphasis> the parameter of this action decides what will be
3412      sent as a replacement.
3413    </para>
3414   </listitem>
3415  </varlistentry>
3416
3417  <varlistentry>
3418   <term>Type:</term>
3419   <!-- Boolean, Parameterized, Multi-value -->
3420   <listitem>
3421    <para>Parameterized.</para>
3422   </listitem>
3423  </varlistentry>
3424
3425  <varlistentry>
3426   <term>Parameter:</term>
3427   <listitem>
3428    <itemizedlist>
3429     <listitem>
3430      <para>
3431       <quote>pattern</quote> to send a built-in checkerboard pattern image. The image is visually
3432       decent, scales very well, and makes it obvious where banners were busted.
3433      </para>
3434     </listitem>
3435     <listitem>
3436      <para>
3437       <quote>blank</quote> to send a built-in transparent image. This makes banners disappear
3438       completely, but makes it hard to detect where <application>Privoxy</application> has blocked
3439       images on a given page and complicates troubleshooting if <application>Privoxy</application>
3440       has blocked innocent images, like navigation icons.
3441      </para>
3442     </listitem>
3443     <listitem>
3444      <para>
3445       <quote><replaceable class="parameter">target-url</replaceable></quote> to
3446       send a redirect to <replaceable class="parameter">target-url</replaceable>. You can redirect
3447       to any image anywhere, even in your local filesystem (via <quote>file:///</quote> URL).
3448      </para>
3449      <para>
3450       A good application of redirects is to use special <application>Privoxy</application>-built-in
3451       URLs, which send the built-in images, as <replaceable class="parameter">target-url</replaceable>.
3452       This has the same visual effect as specifying <quote>blank</quote> or <quote>pattern</quote> in
3453       the first place, but enables your browser to cache the replacement image, instead of requesting
3454       it over and over again.
3455      </para>
3456     </listitem>
3457    </itemizedlist>
3458   </listitem>
3459  </varlistentry>
3460
3461  <varlistentry>
3462   <term>Notes:</term>
3463   <listitem>
3464    <para>
3465     The URLs for the built-in images are <quote>http://config.privoxy.org/send-banner?type=<replaceable
3466     class="parameter">type</replaceable></quote>, where <replaceable class="parameter">type</replaceable> is
3467     either <quote>blank</quote> or <quote>pattern</quote>.
3468    </para>
3469    <para>
3470     There is a third (advanced) type, called <quote>auto</quote>. It is <emphasis>NOT</emphasis> to be
3471     used in <literal>set-image-blocker</literal>, but meant for use from <link linkend="filter-file">filters</link>.
3472     Auto will select the type of image that would have applied to the referring page, had it been an image.
3473    </para>
3474   </listitem>
3475  </varlistentry>
3476
3477  <varlistentry>
3478   <term>Example usage:</term>
3479   <listitem>
3480    <para>
3481     Built-in pattern:
3482    </para>
3483    <para>
3484     <screen>+set-image-blocker{pattern}</screen>
3485    </para>
3486    <para>
3487     Redirect to the BSD devil:
3488    </para>
3489    <para>
3490     <screen>+set-image-blocker{http://www.freebsd.org/gifs/dae_up3.gif}</screen>
3491    </para>
3492    <para>
3493     Redirect to the built-in pattern for better caching:
3494    </para>
3495    <para>
3496     <screen>+set-image-blocker{http://config.privoxy.org/send-banner?type=pattern}</screen>
3497    </para>
3498   </listitem>
3499  </varlistentry>
3500 </variablelist>
3501 </sect3>
3502
3503
3504 <!--   ~~~~~       New section      ~~~~~     -->
3505 <sect3>
3506 <title>Summary</title>
3507 <para>
3508  Note that many of these actions have the potential to cause a page to
3509  misbehave, possibly even not to display at all. There are many ways 
3510  a site designer may choose to design his site, and what HTTP header 
3511  content, and other criteria, he may depend on. There is no way to have hard
3512  and fast rules for all sites. See the <link
3513  linkend="ACTIONSANAT">Appendix</link> for a brief example on troubleshooting
3514  actions.
3515 </para>
3516 </sect3>
3517 </sect2>
3518
3519 <!--   ~~~~~       New section      ~~~~~     -->
3520 <sect2 id="aliases">
3521 <title>Aliases</title>
3522 <para>
3523  Custom <quote>actions</quote>, known to <application>Privoxy</application>
3524  as <quote>aliases</quote>, can be defined by combining other actions.
3525  These can in turn be invoked just like the built-in actions.
3526  Currently, an alias name can contain any character except space, tab,
3527  <quote>=</quote>,
3528  <quote>{</quote> and <quote>}</quote>, but we <emphasis>strongly 
3529  recommend</emphasis> that you only use <quote>a</quote> to <quote>z</quote>,
3530  <quote>0</quote> to <quote>9</quote>, <quote>+</quote>, and <quote>-</quote>.
3531  Alias names are not case sensitive, and are not required to start with a
3532  <quote>+</quote> or <quote>-</quote> sign, since they are merely textually
3533  expanded.
3534 </para>
3535 <para>
3536  Aliases can be used throughout the actions file, but they <emphasis>must be
3537  defined in a special section at the top of the file!</emphasis>
3538  And there can only be one such section per actions file. Each actions file may
3539  have its own alias section, and the aliases defined in it are only visible
3540  within that file.
3541 </para>
3542 <para>
3543  There are two main reasons to use aliases: One is to save typing for frequently
3544  used combinations of actions, the other one is a gain in flexibility: If you
3545  decide once how you want to handle shops by defining an alias called
3546  <quote>shop</quote>, you can later change your policy on shops in
3547  <emphasis>one</emphasis> place, and your changes will take effect everywhere
3548  in the actions file where the <quote>shop</quote> alias is used. Calling aliases
3549  by their purpose also makes your actions files more readable.
3550 </para>
3551 <para>
3552  Currently, there is one big drawback to using aliases, though:
3553  <application>Privoxy</application>'s built-in web-based action file
3554  editor honors aliases when reading the actions files, but it expands
3555  them before writing. So the effects of your aliases are of course preserved,
3556  but the aliases themselves are lost when you edit sections that use aliases
3557  with it.
3558  This is likely to change in future versions of <application>Privoxy</application>.
3559 </para>
3560
3561 <para>
3562  Now let's define some aliases...
3563 </para>
3564
3565 <para>
3566  <screen>
3567  # Useful custom aliases we can use later.
3568  #
3569  # Note the (required!) section header line and that this section
3570  # must be at the top of the actions file!
3571  #
3572  {{alias}}
3573
3574  # These aliases just save typing later:
3575  # (Note that some already use other aliases!)
3576  #
3577  +crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
3578  -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
3579  block-as-image      = +block +handle-as-image
3580  mercy-for-cookies   = -crunch-all-cookies -session-cookies-only
3581
3582  # These aliases define combinations of actions
3583  # that are useful for certain types of sites:
3584  #
3585  fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups
3586  shop        = -crunch-all-cookies -filter{popups} -kill-popups
3587
3588  # Short names for other aliases, for really lazy people ;-)
3589  #
3590  c0 = +crunch-all-cookies
3591  c1 = -crunch-all-cookies</screen>
3592 </para>
3593
3594 <para>
3595  ...and put them to use. These sections would appear in the lower part of an 
3596  actions file and define exceptions to the default actions (as specified further
3597  up for the <quote>/</quote> pattern):
3598 </para>
3599
3600 <para>
3601  <screen>
3602  # These sites are either very complex or very keen on
3603  # user data and require minimal interference to work:
3604  #
3605  {fragile}
3606  .office.microsoft.com
3607  .windowsupdate.microsoft.com
3608  .nytimes.com
3609
3610  # Shopping sites:
3611  # Allow cookies (for setting and retrieving your customer data)
3612  #           
3613  {shop}
3614  .quietpc.com
3615  .worldpay.com   # for quietpc.com
3616  .scan.co.uk
3617
3618  # These shops require pop-ups:
3619  #
3620  {shop -kill-popups -filter{popups}}
3621   .dabs.com
3622   .overclockers.co.uk</screen>
3623 </para>
3624
3625 <para>
3626  Aliases like <quote>shop</quote> and <quote>fragile</quote> are often used for 
3627  <quote>problem</quote> sites that require some actions to be disabled 
3628  in order to function properly.
3629 </para>
3630 </sect2>
3631
3632 <!--   ~~~~~       New section      ~~~~~     -->
3633 <sect2 id="act-examples">
3634 <title>Actions Files Tutorial</title>
3635 <para>
3636  The above chapters have shown <link linkend="actions-file">which actions files
3637  there are and how they are organized</link>, how actions are <link
3638  linkend="actions">specified</link> and <link linkend="actions-apply">applied
3639  to URLs</link>, how <link linkend="af-patterns">patterns</link> work, and how to
3640  define and use <link linkend="aliases">aliases</link>. Now, let's look at an
3641  example <filename>default.action</filename> and <filename>user.action</filename>
3642  file and see how all these pieces come together:
3643 </para>
3644
3645 <sect3><title>default.action</title>
3646
3647 <para>
3648 Every config file should start with a short comment stating its purpose:
3649 </para>
3650
3651 <para>
3652  <screen># Sample default.action file &lt;developers@privoxy.org&gt;</screen>
3653 </para>
3654
3655 <para>
3656 Then, since this is the <filename>default.action</filename> file, the
3657 first section is a special section for internal use that you needn't
3658 change or worry about:
3659 </para>
3660
3661 <para>
3662  <screen>
3663 ##########################################################################
3664 # Settings -- Don't change! For internal Privoxy use ONLY.
3665 ##########################################################################
3666
3667 {{settings}}
3668 for-privoxy-version=3.0</screen>
3669 </para>
3670
3671 <para>
3672 After that comes the (optional) alias section. We'll use the example
3673 section from the above <link linkend="aliases">chapter on aliases</link>,
3674 that also explains why and how aliases are used:
3675 </para>
3676
3677 <para>
3678  <screen>
3679 ##########################################################################
3680 # Aliases
3681 ##########################################################################
3682 {{alias}}
3683
3684 # These aliases just save typing later:
3685 # (Note that some already use other aliases!)
3686 #
3687 +crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
3688 -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
3689 block-as-image      = +block +handle-as-image
3690 mercy-for-cookies   = -crunch-all-cookies -session-cookies-only
3691
3692 # These aliases define combinations of actions
3693 # that are useful for certain types of sites:
3694 #
3695 fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups
3696 shop        = mercy-for-cookies -filter{popups} -kill-popups</screen>
3697 </para>
3698
3699 <para>
3700  Now come the regular sections, i.e. sets of actions, accompanied
3701  by URL patterns to which they apply. Remember <emphasis>all actions
3702  are disabled when matching starts</emphasis>, so we have to explicitly
3703  enable the ones we want.
3704 </para>
3705
3706 <para>
3707  The first regular section is probably the most important. It has only
3708  one pattern, <quote><literal>/</literal></quote>, but this pattern
3709  <link linkend="af-patterns">matches all URLs</link>. Therefore, the
3710  set of actions used in this <quote>default</quote> section <emphasis>will
3711  be applied to all requests as a start</emphasis>. It can  be partly or
3712  wholly overridden by later matches further down this file, or in user.action,
3713  but it will still be largely responsible for your overall browsing
3714  experience.
3715 </para>
3716
3717 <para>
3718  Again, at the start of matching, all actions are disabled, so there is
3719  no real need to disable any actions here, but we will do that nonetheless,
3720  to have a complete listing for your reference. (Remember: a <quote>+</quote>
3721  preceding the action name enables the action, a <quote>-</quote> disables!).
3722  Also note how this long line has been made more readable by splitting it into
3723  multiple lines with line continuation.
3724 </para> 
3725
3726 <para>
3727  <screen>
3728 ##########################################################################
3729 # "Defaults" section:
3730 ##########################################################################
3731  { \
3732  -<link linkend="ADD-HEADER">add-header</link> \
3733  -<link linkend="BLOCK">block</link> \
3734  -<link linkend="CRUNCH-INCOMING-COOKIES">crunch-incoming-cookies</link> \
3735  -<link linkend="CRUNCH-OUTGOING-COOKIES">crunch-outgoing-cookies</link> \
3736  +<link linkend="DEANIMATE-GIFS">deanimate-gifs</link> \
3737  -<link linkend="DOWNGRADE-HTTP-VERSION">downgrade-http-version</link> \
3738  +<link linkend="FAST-REDIRECTS">fast-redirects</link> \
3739  +<link linkend="FILTER-HTML-ANNOYANCES">filter{html-annoyances}</link> \
3740  +<link linkend="FILTER-JS-ANNOYANCES">filter{js-annoyances}</link> \
3741  -<link linkend="FILTER-CONTENT-COOKIES">filter{content-cookies}</link> \
3742  +<link linkend="FILTER-POPUPS">filter{popups}</link> \
3743  +<link linkend="FILTER-WEBBUGS">filter{webbugs}</link> \
3744  -<link linkend="FILTER-REFRESH-TAGS">filter{refresh-tags}</link> \
3745  -<link linkend="FILTER-FUN">filter{fun}</link> \
3746  +<link linkend="FILTER-NIMDA">filter{nimda}</link> \
3747  +<link linkend="FILTER-BANNERS-BY-SIZE">filter{banners-by-size}</link> \
3748  -<link linkend="FILTER-BANNERS-BY-LINK">filter{banners-by-link}</link> \
3749  -<link linkend="FILTER-IMG-REORDER">filter{img-reorder}</link> \
3750  -<link linkend="FILTER-SHOCKWAVE-FLASH">filter{shockwave-flash}</link> \
3751  -<link linkend="FILTER-CRUDE-PARENTAL">filter{crude-parental}</link> \
3752  -<link linkend="FILTER-JS-EVENTS">filter{js-events}</link> \
3753  -<link linkend="HANDLE-AS-IMAGE">handle-as-image</link> \
3754  +<link linkend="HIDE-FORWARDED-FOR-HEADERS">hide-forwarded-for-headers</link> \
3755  +<link linkend="HIDE-FROM-HEADER">hide-from-header{block}</link> \
3756  +<link linkend="HIDE-REFERER">hide-referrer{forge}</link> \
3757  -<link linkend="HIDE-USER-AGENT">hide-user-agent</link> \
3758  -<link linkend="KILL-POPUPS">kill-popups</link> \
3759  -<link linkend="LIMIT-CONNECT">limit-connect</link> \
3760  +<link linkend="PREVENT-COMPRESSION">prevent-compression</link> \
3761  -<link linkend="SEND-VANILLA-WAFER">send-vanilla-wafer</link> \
3762  -<link linkend="SEND-WAFER">send-wafer</link> \
3763  +<link linkend="SESSION-COOKIES-ONLY">session-cookies-only</link> \
3764  +<link linkend="SET-IMAGE-BLOCKER">set-image-blocker{pattern}</link> \
3765  }
3766  / # forward slash will match *all* potential URL patterns.</screen>
3767 </para>
3768
3769 <para>
3770  The default behavior is now set. Note that some actions, like not hiding
3771  the user agent, are part of a <quote>general policy</quote> that applies
3772  universally and won't get any exceptions defined later. Other choices,
3773  like not blocking (which is <emphasis>understandably</emphasis> the
3774  default!) need exceptions, i.e. we need to specify explicitly what we
3775  want to block in later sections.
3776  We will also want to make exceptions from our general pop-up-killing,
3777  and use our defined aliases for that.
3778 </para>
3779
3780 <para>
3781  The first of our specialized sections is concerned with <quote>fragile</quote>
3782  sites, i.e. sites that require minimum interference, because they are either
3783  very complex or very keen on tracking you (and have mechanisms in place that
3784  make them unusable for people who avoid being tracked). We will simply use
3785  our pre-defined <literal>fragile</literal> alias instead of stating the list
3786  of actions explicitly:
3787 </para>
3788
3789 <para>
3790  <screen>
3791 ##########################################################################
3792 # Exceptions for sites that'll break under the default action set:
3793 ##########################################################################
3794
3795 # "Fragile" Use a minimum set of actions for these sites (see alias above):
3796 #
3797 { fragile }
3798 .office.microsoft.com           # surprise, surprise!
3799 .windowsupdate.microsoft.com</screen>
3800 </para>
3801
3802 <para>
3803  Shopping sites are not as fragile, but they typically
3804  require cookies to log in, and pop-up windows for shopping
3805  carts or item details. Again, we'll use a pre-defined alias:
3806 </para>
3807  
3808 <para>
3809  <screen>
3810 # Shopping sites:
3811 #
3812 { shop }
3813 .quietpc.com 
3814 .worldpay.com   # for quietpc.com
3815 .jungle.com
3816 .scan.co.uk</screen>
3817 </para>
3818
3819 <para>
3820  Then, there are sites which rely on pop-up windows (yuck!) to work.
3821  Since we made pop-up-killing our default above, we need to make exceptions
3822  now. <ulink url="http://www.mozilla.org/">Mozilla</ulink> users, who
3823  can turn on smart handling of unwanted pop-ups in their browsers, can
3824  safely choose
3825  -<literal><link linkend="FILTER-POPUPS">filter{popups}</link></literal> (and
3826  -<literal><link linkend="KILL-POPUPS">kill-popups</link></literal>) above
3827  and hence don't need this section. Anyway, disabling an already disabled
3828  action doesn't hurt, so we'll define our exceptions regardless of what was
3829  chosen in the defaults section:
3830 </para>
3831
3832 <para>
3833  <screen>
3834 # These sites require pop-ups too :( 
3835 #
3836 { -<link linkend="KILL-POPUPS">kill-popups</link> -<link linkend="FILTER-POPUPS">filter{popups}</link> }
3837 .dabs.com
3838 .overclockers.co.uk
3839 .deutsche-bank-24.de</screen>
3840 </para>
3841
3842 <para>
3843  The <literal><link linkend="FAST-REDIRECTS">fast-redirects</link></literal>
3844  action, which we enabled per default above,  breaks some sites. So disable
3845  it for popular sites where we know it misbehaves:
3846 </para>
3847
3848 <para>
3849  <screen>
3850 { -<link linkend="FAST-REDIRECTS">fast-redirects</link> }
3851 login.yahoo.com
3852 edit.*.yahoo.com
3853 .google.com
3854 .altavista.com/.*(like|url|link):http
3855 .altavista.com/trans.*urltext=http
3856 .nytimes.com</screen>
3857 </para>
3858
3859 <para>
3860  It is important that <application>Privoxy</application> knows which
3861  URLs belong to images, so that <emphasis>if</emphasis> they are to
3862  be blocked, a substitute image can be sent, rather than an HTML page.
3863  Contacting the remote site to find out is not an option, since it
3864  would destroy the loading time advantage of banner blocking, and it
3865  would feed the advertisers (in terms of money <emphasis>and</emphasis>
3866  information). We can mark any URL as an image with the <literal><link
3867  linkend="handle-as-image">handle-as-image</link></literal> action,
3868  and marking all URLs that end in a known image file extension is a
3869  good start:
3870 </para>
3871
3872 <para>
3873  <screen>
3874 ##########################################################################
3875 # Images:
3876 ##########################################################################
3877
3878 # Define which file types will be treated as images, in case they get
3879 # blocked further down this file:
3880 #
3881 { +<link linkend="HANDLE-AS-IMAGE">handle-as-image</link> }
3882 /.*\.(gif|jpe?g|png|bmp|ico)$</screen>
3883 </para>
3884
3885 <para>
3886  And then there are known banner sources. They often use scripts to
3887  generate the banners, so it won't be visible from the URL that the
3888  request is for an image. Hence we block them <emphasis>and</emphasis>
3889  mark them as images in one go, with the help of our
3890  <literal>block-as-image</literal> alias defined above. (We could of
3891  course just as well use <literal>+<link linkend="block">block</link>
3892  +<link linkend="handle-as-image">handle-as-image</link></literal> here.)
3893  Remember that the type of the replacement image is chosen by the
3894  <literal><link linkend="set-image-blocker">set-image-blocker</link></literal>
3895  action. Since all URLs have matched the default section with its
3896  <literal>+<link linkend="set-image-blocker">set-image-blocker</link>{pattern}</literal>
3897  action before, it still applies and needn't be repeated:
3898 </para>
3899
3900 <para>
3901  <screen>
3902 # Known ad generators:
3903 #
3904 { block-as-image }
3905 ar.atwola.com 
3906 .ad.doubleclick.net
3907 .ad.*.doubleclick.net
3908 .a.yimg.com/(?:(?!/i/).)*$
3909 .a[0-9].yimg.com/(?:(?!/i/).)*$
3910 bs*.gsanet.com
3911 bs*.einets.com
3912 .qkimg.net</screen>
3913 </para>
3914
3915 <para>
3916  One of the most important jobs of <application>Privoxy</application>
3917  is to block banners. A huge bunch of them are already <quote>blocked</quote>
3918  by the <literal><link linkend="filter">filter</link>{banners-by-size}</literal>
3919  action, which we enabled above, and which deletes the references to banner
3920  images from the pages while they are loaded, so the browser doesn't request
3921  them anymore, and hence they don't need to be blocked here. But this naturally
3922  doesn't catch all banners, and some people choose not to use filters, so we
3923  need a comprehensive list of patterns for banner URLs here, and apply the
3924  <literal><link linkend="block">block</link></literal> action to them.
3925 </para>
3926 <para>
3927  First comes a bunch of generic patterns, which do most of the work, by
3928  matching typical domain and path name components of banners. Then comes
3929  a list of individual patterns for specific sites, which is omitted here
3930  to keep the example short:
3931 </para>
3932
3933 <para>
3934  <screen>
3935 ##########################################################################
3936 # Block these fine banners:
3937 ##########################################################################
3938 { <link linkend="BLOCK">+block</link> }
3939
3940 # Generic patterns:
3941
3942 ad*.
3943 .*ads.
3944 banner?.
3945 count*.
3946 /.*count(er)?\.(pl|cgi|exe|dll|asp|php[34]?)
3947 /(?:.*/)?(publicite|werbung|rekla(ma|me|am)|annonse|maino(kset|nta|s)?)/
3948
3949 # Site-specific patterns (abbreviated):
3950 #
3951 .hitbox.com</screen>
3952 </para>
3953
3954 <para>
3955  You wouldn't believe how many advertisers actually call their banner
3956  servers ads.<replaceable>company</replaceable>.com, or call the directory
3957  in which the banners are stored simply <quote>banners</quote>. So the above
3958  generic patterns are surprisingly effective.
3959 </para>
3960 <para>
3961  But being very generic, they necessarily also catch URLs that we don't want
3962  to block. The pattern <literal>.*ads.</literal> e.g. catches 
3963  <quote>nasty-<emphasis>ads</emphasis>.nasty-corp.com</quote> as intended,
3964  but also <quote>downlo<emphasis>ads</emphasis>.sourcefroge.net</quote> or
3965  <quote><emphasis>ads</emphasis>l.some-provider.net.</quote> So here come some
3966  well-known exceptions to the <literal>+<link linkend="BLOCK">block</link></literal>
3967  section above.
3968 </para>
3969 <para>
3970  Note that these are exceptions to exceptions from the default! Consider the URL
3971  <quote>downloads.sourcefroge.net</quote>: Initially, all actions are deactivated,
3972  so it wouldn't get blocked. Then comes the defaults section, which matches the
3973  URL, but just deactivates the <literal><link linkend="BLOCK">block</link></literal>
3974  action once again. Then it matches <literal>.*ads.</literal>, an exception to the
3975  general non-blocking policy, and suddenly
3976  <literal><link linkend="BLOCK">+block</link></literal> applies. And now, it'll match
3977  <literal>.*loads.</literal>, where <literal><link linkend="BLOCK">-block</link></literal>
3978  applies, so (unless it matches <emphasis>again</emphasis> further down) it ends up
3979  with no <literal><link linkend="BLOCK">block</link></literal> action applying.
3980 </para>
3981
3982 <para>
3983  <screen>
3984 ##########################################################################
3985 # Save some innocent victims of the above generic block patterns:
3986 ##########################################################################
3987
3988 # By domain:
3989
3990 { -<link linkend="BLOCK">block</link> }
3991 adv[io]*.  # (for advogato.org and advice.*)
3992 adsl.      # (has nothing to do with ads)
3993 ad[ud]*.   # (adult.* and add.*)
3994 .edu       # (universities don't host banners (yet!))
3995 .*loads.   # (downloads, uploads etc)
3996
3997 # By path:
3998 #
3999 /.*loads/
4000
4001 # Site-specific:
4002 #
4003 www.globalintersec.com/adv # (adv = advanced)
4004 www.ugu.com/sui/ugu/adv</screen>
4005 </para>
4006
4007 <para>
4008  Filtering source code can have nasty side effects,
4009  so make an exception for our friends at sourceforge.net,
4010  and all paths with <quote>cvs</quote> in them. Note that
4011  <literal>-<link linkend="FILTER">filter</link></literal>
4012  disables <emphasis>all</emphasis> filters in one fell swoop!
4013 </para>
4014
4015 <para>
4016  <screen>
4017 # Don't filter code!
4018 #
4019 { -<link linkend="FILTER">filter</link> }
4020 /.*cvs
4021 .sourceforge.net</screen>
4022 </para>
4023
4024 <para>
4025  The actual <filename>default.action</filename> is of course more
4026  comprehensive, but we hope this example made clear how it works.
4027 </para>
4028
4029 </sect3>
4030
4031 <sect3><title>user.action</title>
4032
4033 <para>
4034  So far we are painting with a broad brush by setting general policies,
4035  which would be a reasonable starting point for many people. Now, 
4036  you might want to be more specific and have customized rules that
4037  are more suitable to your personal habits and preferences. These would
4038  be for narrowly defined situations like your ISP or your bank, and should
4039  be placed in <filename>user.action</filename>, which is parsed after all other 
4040  actions files and hence has the last word, over-riding any previously
4041  defined actions. <filename>user.action</filename> is also a 
4042  <emphasis>safe</emphasis> place for your personal settings, since
4043  <filename>default.action</filename> is actively maintained by the
4044  <application>Privoxy</application> developers and you'll probably want
4045  to install updated versions from time to time.
4046 </para>
4047
4048 <para>
4049  So let's look at a few examples of things that one might typically do in
4050  <filename>user.action</filename>: 
4051 </para>
4052
4053
4054 <!-- brief sample user.action here -->
4055
4056 <para>
4057  <screen>
4058 # My user.action file. &lt;fred@foobar.com&gt;</screen>
4059 </para>
4060
4061 <para>
4062  As <link linkend="aliases">aliases</link> are local to the actions
4063  file that they are defined in, you can't use the ones from
4064  <filename>default.action</filename>, unless you repeat them here:
4065 </para>
4066
4067 <para>
4068  <screen>
4069 # (Re-)define aliases for this file:
4070 #
4071 {{alias}}
4072 -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
4073 mercy-for-cookies   = -crunch-all-cookies -session-cookies-only
4074 fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups
4075 shop        = mercy-for-cookies -filter{popups} -kill-popups
4076 allow-ads   = -block -filter{banners-by-size} # (see below)</screen>
4077  
4078 </para>
4079
4080 <para>
4081  Say you have accounts on some sites that you visit regularly, and
4082  you don't want to have to log in manually each time. So you'd like
4083  to allow persistent cookies for these sites. The
4084  <literal>mercy-for-cookies</literal> alias defined above does exactly
4085  that, i.e. it disables crunching of cookies in any direction, and
4086  processing of cookies to make them temporary.
4087 </para>
4088
4089 <para>
4090  <screen>
4091 { mercy-for-cookies }
4092 sunsolve.sun.com
4093 slashdot.org
4094 .yahoo.com
4095 .msdn.microsoft.com
4096 .redhat.com</screen>
4097 </para>
4098
4099 <para>
4100  Your bank needs popups and is allergic to some filter, but you don't
4101  know which, so you disable them all:
4102 </para>
4103
4104 <para>
4105  <screen>
4106 { -<link linkend="FILTER">filter</link> -<link linkend="KILL-POPUPS">kill-popups</link> }
4107 .your-home-banking-site.com</screen>
4108 </para>
4109
4110 <para>
4111  While browsing the web with <application>Privoxy</application> you
4112  noticed some ads that sneaked through, but you were too lazy to
4113  report them through our fine and easy <link linkend="contact">feedback</link>
4114  system, so you have added them here:
4115 </para>
4116
4117 <para>
4118  <screen>
4119 { +<link linkend="BLOCK">block</link> }
4120 www.a-popular-site.com/some/unobvious/path
4121 another.popular.site.net/more/junk/here/</screen>
4122 </para>
4123
4124 <para>
4125  Note that, assuming the banners in the above example have regular image
4126  extensions (most do),
4127  <literal>+<link linkend="HANDLE-AS-IMAGE">handle-as-image</link></literal>
4128  need not be specified, since all URLs ending in these extensions will
4129  already have been tagged as images in the relevant section of 
4130  <filename>default.action</filename> by now.
4131 </para>
4132
4133 <para>
4134  Then you noticed that the default configuration breaks Forbes Magazine,
4135  but you were too lazy to find out which action is the culprit, and you
4136  were again too lazy to give <link linkend="contact">feedback</link>, so
4137  you just used the <literal>fragile</literal> alias on the site, and
4138  -- whoa! -- it worked:
4139 </para>
4140
4141 <para>
4142 <screen>
4143 { fragile }
4144 .forbes.com</screen>
4145 </para>
4146
4147 <para>
4148  You like the <quote>fun</quote> text replacements in <filename>default.filter</filename>,
4149  but it is disabled in the distributed actions file. (My colleagues on the team just
4150  don't have a sense of humour, that's why! ;-). So you'd like to turn it on in your private,
4151  update-safe config, once and for all:
4152 </para>
4153
4154 <para>
4155 <screen>
4156 { +<link linkend="filter-fun">filter{fun}</link> }
4157 / # For ALL sites!</screen>
4158 </para>
4159
4160 <para>
4161  Note that the above is not really a good idea: There are exceptions
4162  to the filters in <filename>default.action</filename> for things that
4163  really shouldn't be filtered, like code on CVS->Web interfaces. Since
4164  <filename>user.action</filename> has the last word, these exceptions
4165  won't be valid for the <quote>fun</quote> filtering specified here.
4166 </para>
4167
4168 <para>
4169  Finally, you might think about how your favourite free websites are
4170  funded, and find that they rely on displaying banner advertisements
4171  to survive. So you might want to specifically allow banners for those
4172  sites that you feel provide value to you:
4173 </para>
4174
4175 <para>
4176 <screen>
4177 { allow-ads }
4178 .sourceforge.net
4179 .slashdot.org
4180 .osdn.net</screen>   
4181 </para>
4182
4183 <para>
4184  Note that <literal>allow-ads</literal> has been aliased to 
4185  <literal>-<link linkend="block">block</link></literal>
4186  <literal>-<link linkend="filter-banners-by-size">filter{banners-by-size}</link></literal>
4187  above.
4188 </para>
4189 </sect3>
4190 </sect2>
4191
4192 <!--  ~  End section  ~  -->
4193
4194 </sect1>
4195
4196 <!--  ~  End section  ~  -->
4197
4198 <!--   ~~~~~~~~       New section Header    ~~~~~~~~~     -->
4199
4200 <sect1 id="filter-file">
4201 <title>The Filter File</title>
4202
4203 <para>
4204  All text substitutions that can be invoked through the
4205  <literal><link linkend="filter">filter</link></literal> action
4206  must first be defined in the filter file, which is typically
4207  called <filename>default.filter</filename> and which can be
4208  selected through the <literal>
4209  <link linkend="filterfile">filterfile</link></literal> config
4210  option.
4211 </para>
4212
4213 <para>
4214  Typical reasons for doing such substitutions are to eliminate
4215  common annoyances in HTML and JavaScript, such as pop-up windows,
4216  exit consoles, crippled windows without navigation tools, the
4217  infamous &lt;BLINK&gt; tag etc, to suppress images with certain
4218  width and height attributes (standard banner sizes or web-bugs),
4219  or just to have fun. The possibilities are endless.
4220 </para>
4221
4222 <para>
4223  Filtering works on any text-based document type, including plain
4224  text, HTML, JavaScript, CSS etc. (all <literal>text/*</literal>
4225  MIME types). Substitutions are made at the source level, so if
4226  you want to <quote>roll your own</quote> filters, you should be
4227  familiar with HTML syntax.
4228 </para>
4229
4230 <para>
4231  Just like the <link linkend="actions-file">actions files</link>, the
4232  filter file is organized in sections, which are called <emphasis>filters</emphasis>
4233  here. Each filter consists of a heading line, that starts with the
4234  <emphasis>keyword</emphasis> <literal>FILTER:</literal>, followed by
4235  the filter's <emphasis>name</emphasis>, and a short (one line) 
4236  <emphasis>description</emphasis> of what it does. Below that line
4237  come the <emphasis>jobs</emphasis>, i.e. lines that define the actual
4238  text substitutions. By convention, the name of a filter
4239  should describe what the filter <emphasis>eliminates</emphasis>. The
4240  comment is used in the <ulink url="http://config.privoxy.org/">web-based
4241  user interface</ulink>.
4242 </para>
4243
4244 <para>
4245  Once a filter called <replaceable>name</replaceable> has been defined
4246  in the filter file, it can be invoked by using an action of the form
4247  +<literal><link linkend="filter">filter</link>{<replaceable>name</replaceable>}</literal>
4248  in any <link linkend="actions-file">actions file</link>.
4249 </para>
4250  
4251 <para>
4252  A filter header line for a filter called <quote>foo</quote> could look
4253  like this:
4254 </para>
4255
4256 <para>
4257  <screen>FILTER: foo Replace all "foo" with "bar"</screen>
4258 </para>
4259
4260 <para>
4261  Below that line, and up to the next header line, come the jobs that
4262  define what text replacements the filter executes. They are specified
4263  in a syntax that imitates <ulink url="http://www.perl.org/">Perl</ulink>'s
4264  <literal>s///</literal> operator. If you are familiar with Perl, you
4265  will find this to be quite intuitive, and may want to look at the
4266  <ulink url="http://www.oesterhelt.org/pcrs/pcrs.3.html">PCRS man page</ulink>
4267  for the subtle differences to Perl behaviour. Most notably, the non-standard
4268  option letter <literal>U</literal> is supported, which turns the default
4269  to ungreedy matching.
4270 </para>
4271
4272 <para>
4273  If you are new to regular expressions, you might want to take a look at
4274  the <link linkend="regex">Appendix on regular expressions</link>, and
4275  see the <ulink url="http://perldoc.com/perl5.6.1/pod/perl.html">Perl
4276  manual</ulink> for
4277  <ulink url="http://perldoc.com/perl5.6.1/pod/perlop.html#s-PATTERN-REPLACEMENT-egimosx">the 
4278  <literal>s///</literal> operator's syntax</ulink> and <ulink
4279  url="http://perldoc.com/perl5.6.1/pod/perlre.html">Perl-style regular
4280  expressions</ulink> in general.
4281  The below examples might also help to get you started.
4282 </para>
4283
4284 <!--   ~~~~~~~~       New section Header    ~~~~~~~~~     -->
4285
4286 <sect2><title>Filter File Tutorial</title>
4287 <para>
4288  Now, let's complete our <quote>foo</quote> filter. We have already defined
4289  the heading, but the jobs are still missing. Since all it does is to replace
4290  <quote>foo</quote> with <quote>bar</quote>, there is only one (trivial) job
4291  needed:
4292 </para>
4293
4294 <para>
4295  <screen>s/foo/bar/</screen>
4296 </para>
4297
4298 <para>
4299  But wait! Didn't the comment say that <emphasis>all</emphasis> occurrences
4300  of <quote>foo</quote> should be replaced? Our current job will only take
4301  care of the first <quote>foo</quote> on each page. For global substitution,
4302  we'll need to add the <literal>g</literal> option:
4303 </para>
4304
4305 <para>
4306  <screen>s/foo/bar/g</screen>
4307 </para>
4308
4309 <para>
4310  Our complete filter now looks like this:
4311 </para>
4312 <para>
4313  <screen>FILTER: foo Replace all "foo" with "bar"
4314 s/foo/bar/g</screen>
4315 </para>
4316
4317 <para>
4318  Let's look at some real filters for more interesting examples. Here you see
4319  a filter that protects against some common annoyances that arise from JavaScript
4320  abuse. Let's look at its jobs one after the other:
4321 </para>
4322
4323
4324 <para>
4325  <screen>
4326 FILTER: js-annoyances Get rid of particularly annoying JavaScript abuse
4327
4328 # Get rid of JavaScript referrer tracking. Test page: http://www.randomoddness.com/untitled.htm
4329 #
4330 s|(&lt;script.*)document\.referrer(.*&lt;/script&gt;)|$1"Not Your Business!"$2|Usg</screen>
4331 </para>
4332
4333 <para>
4334  Following the header line and a comment, you see the job. Note that it uses
4335  <literal>|</literal> as the delimiter instead of <literal>/</literal>, because
4336  the pattern contains a forward slash, which would otherwise have to be escaped
4337  by a backslash (<literal>\</literal>).
4338 </para>
4339
4340 <para>
4341  Now, let's examine the pattern: it starts with the text <literal>&lt;script.*</literal>
4342  enclosed in parentheses. Since the dot matches any character, and <literal>*</literal>
4343  means: <quote>Match an arbitrary number of the element left of myself</quote>, this
4344  matches <quote>&lt;script</quote>, followed by <emphasis>any</emphasis> text, i.e.
4345  it matches the whole page, from the start of the first &lt;script&gt; tag.
4346 </para>
4347
4348 <para>
4349  That's more than we want, but the pattern continues: <literal>document\.referrer</literal>
4350  matches only the exact string <quote>document.referrer</quote>. The dot needed to
4351  be <emphasis>escaped</emphasis>, i.e. preceded by a backslash, to take away its
4352  special meaning as a joker, and make it just a regular dot. So far, the meaning is:
4353  Match from the start of the first &lt;script&gt; tag in a the page, up to, and including,
4354  the text <quote>document.referrer</quote>, if <emphasis>both</emphasis> are present
4355  in the page (and appear in that order).
4356 </para>
4357
4358 <para>
4359  But there's still more pattern to go. The next element, again enclosed in parentheses,
4360  is <literal>.*&lt;/script&gt;</literal>. You already know what <literal>.*</literal>
4361  means, so the whole pattern translates to: Match from the start of the first  &lt;script&gt;
4362  tag in a page to the end of the last &lt;script&gt; tag, provided that the text
4363  <quote>document.referrer</quote> appears somewhere in between.
4364 </para>
4365
4366 <para>
4367  This is still not the whole story, since we have ignored the options and the parentheses:
4368  The portions of the page matched by sub-patterns that are enclosed in parentheses, will be
4369  remembered and be available through the variables <literal>$1, $2, ...</literal> in
4370  the substitute. The <literal>U</literal> option switches to ungreedy matching, which means
4371  that the first <literal>.*</literal> in the pattern will only <quote>eat up</quote> all
4372  text in between <quote>&lt;script</quote> and the <emphasis>first</emphasis> occurrence
4373  of <quote>document.referrer</quote>, and that the second <literal>.*</literal> will
4374  only span the text up to the <emphasis>first</emphasis> <quote>&lt;/script&gt;</quote>
4375  tag. Furthermore, the <literal>s</literal> option says that the match may span
4376  multiple lines in the page, and the <literal>g</literal> option again means that the
4377  substitution is global.
4378 </para>
4379
4380 <para>
4381  So, to summarize, the pattern means: Match all scripts that contain the text
4382  <quote>document.referrer</quote>. Remember the parts of the script from
4383  (and including) the start tag up to (and excluding) the string
4384  <quote>document.referrer</quote> as <literal>$1</literal>, and the part following
4385  that string, up to and including the closing tag, as <literal>$2</literal>.
4386 </para>
4387
4388 <para>
4389  Now the pattern is deciphered, but wasn't this about substituting things? So
4390  lets look at the substitute: <literal>$1"Not Your Business!"$2</literal> is
4391  easy to read: The text remembered as <literal>$1</literal>, followed by 
4392  <literal>"Not Your Business!"</literal> (<emphasis>including</emphasis>
4393  the quotation marks!), followed by the text remembered as <literal>$2</literal>.
4394  This produces an exact copy of the original string, with the middle part
4395  (the <quote>document.referrer</quote>) replaced by <literal>"Not Your
4396  Business!"</literal>.
4397 </para>
4398
4399 <para>
4400  The whole job now reads: Replace <quote>document.referrer</quote> by
4401  <literal>"Not Your Business!"</literal> wherever it appears inside a
4402  &lt;script&gt tag. Note that this job won't break JavaScript syntax,
4403  since both the original and the replacement are syntactically valid
4404  string objects. The script just won't have access to the referrer
4405  information anymore.
4406 </para>
4407
4408 <para>
4409  We'll show you two other jobs from the JavaScript taming department, but
4410  this time only point out the constructs of special interest:
4411 </para>
4412
4413 <para>
4414  <screen>
4415 # The status bar is for displaying link targets, not pointless blahblah
4416 #
4417 s/window\.status\s*=\s*(['"]).*?\1/dUmMy=1/ig</screen>
4418 </para>
4419
4420 <para>
4421  <literal>\s</literal> stands for whitespace characters (space, tab, newline,
4422  carriage return, form feed), so that <literal>\s*</literal> means: <quote>zero
4423  or more whitespace</quote>. The <literal>?</literal> in <literal>.*?</literal>
4424  makes this matching of arbitrary text ungreedy. (Note that the <literal>U</literal>
4425  option is not set). The <literal>['"]</literal> construct means: <quote>a single
4426  <emphasis>or</emphasis> a double quote</quote>. Finally, <literal>\1</literal> is
4427  a backreference to the first parenthesis just like <literal>$1</literal> above,
4428  with the difference that in the <emphasis>pattern</emphasis>, a backslash indicates
4429  a backreference, whereas in the <emphasis>substitute</emphasis>, it's the dollar.
4430 </para>
4431
4432 <para>
4433  So what does this job do? It replaces assignments of single- or double-quoted
4434  strings to the <quote>window.status</quote> object with a dummy assignment
4435  (using a variable name that is hopefully odd enough not to conflict with
4436  real variables in scripts). Thus, it catches many cases where e.g. pointless
4437  descriptions are displayed in the status bar instead of the link target when
4438  you move your mouse over links.
4439 </para>
4440
4441 <para>
4442  <screen>
4443 # Kill OnUnload popups. Yummy. Test: http://www.zdnet.com/zdsubs/yahoo/tree/yfs.html
4444 #
4445 s/(&lt;body [^&gt;]*)onunload(.*&gt;)/$1never$2/iU</screen>
4446 </para>
4447
4448 <para>
4449  Including the
4450  <ulink url="http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-eventgroupings-htmlevents">OnUnload
4451  event binding</ulink> in the HTML DOM was a <emphasis>CRIME</emphasis>.
4452  When I close a browser window, I want it to close and die. Basta.
4453  This job replaces the <quote>onunload</quote> attribute in
4454  <quote>&lt;body&gt</quote> tags with the dummy word <literal>never</literal>.
4455  Note that the <literal>i</literal> option makes the pattern matching
4456  case-insensitive. Also note that ungreedy matching alone doesn't always guarantee
4457  a minimal match: In the first parenthesis, we had to use <literal>[^&gt;]*</literal>
4458  instead of <literal>.*</literal> to prevent the match from exceeding the 
4459  &lt;body&gt tag if it doesn't contain <quote>OnUnload</quote>, but the page's
4460  content does.
4461 </para>
4462
4463 <para>
4464  The last example is from the fun department:
4465 </para>
4466
4467 <para>
4468  <screen>
4469 FILTER: fun Fun text replacements
4470
4471 # Spice the daily news:
4472 #
4473 s/microsoft(?!\.com)/MicroSuck/ig</screen>
4474 </para>
4475
4476 <para>
4477  Note the <literal>(?!\.com)</literal> part (a so-called negative lookahead)
4478  in the job's pattern, which means: Don't match, if the string 
4479  <quote>.com</quote> appears directly following <quote>microsoft</quote>
4480  in the page. This prevents links to microsoft.com from being trashed, while
4481  still replacing the word everywhere else.
4482 </para>
4483
4484 <para>
4485  <screen>
4486 # Buzzword Bingo (example for extended regex syntax)
4487 #
4488 s* industry[ -]leading \
4489 |  cutting[ -]edge \
4490 |  customer[ -]focused \
4491 |  market[ -]driven \
4492 |  award[ -]winning # Comments are OK, too! \
4493 |  high[ -]performance \
4494 |  solutions[ -]based \
4495 |  unmatched \
4496 |  unparalleled \
4497 |  unrivalled \
4498 *&lt;font color="red"&gt;&lt;b&gt;BINGO!&lt;/b&gt;&lt;/font&gt; \
4499 *igx</screen>
4500 </para>
4501
4502 <para>
4503  The <literal>x</literal> option in this job turns on extended syntax, and allows for
4504  e.g. the liberal use of (non-interpreted!) whitespace for nicer formatting. 
4505 </para>
4506
4507 <para>
4508  You get the idea?
4509 </para>
4510 </sect2>
4511 </sect1>
4512
4513 <!--  ~  End section  ~  -->
4514
4515
4516
4517 <!--   ~~~~~       New section      ~~~~~     -->
4518
4519 <sect1 id="templates">
4520 <title>Templates</title>
4521 <para>
4522  All <application>Privoxy</application> built-in pages, i.e. error pages such as the 
4523  <ulink url="http://show-the-404-error.page"><quote>404 - No Such Domain</quote>
4524  error page</ulink>, the <ulink
4525  url="http://ads.bannerserver.example.com/nasty-ads/sponsor.html"><quote>BLOCKED</quote>
4526  page</ulink>
4527  and all pages of its <ulink url="http://config.privoxy.org/">web-based
4528  user interface</ulink>, are generated from <emphasis>templates</emphasis>. 
4529  (<application>Privoxy</application> must be running for the above links to work as
4530  intended.)
4531 </para>
4532
4533 <para>
4534  These templates are stored in a subdirectory of the <link linkend="confdir">configuration
4535  directory</link> called <filename>templates</filename>. On Unixish platforms,
4536  this is typically
4537  <ulink url="file:///etc/privoxy/templates/"><filename>/etc/privoxy/templates/</filename></ulink>.
4538 </para>
4539
4540 <para>
4541  The templates are basically normal HTML files, but with place-holders (called symbols
4542  or exports), which <application>Privoxy</application> fills at run time. You can
4543  edit the templates with a normal text editor, should you want to customize them.
4544  (<emphasis>Not recommended for the casual user</emphasis>). Note that
4545  just like in configuration files, lines starting with <literal>#</literal> are
4546  ignored when the templates are filled in.
4547 </para>
4548
4549 <para>
4550  The place-holders are of the form <literal>@name@</literal>, and you will
4551  find a list of available symbols, which vary from template to template,
4552  in the comments at the start of each file. Note that these comments are not
4553  always accurate, and that it's probably best to look at the existing HTML
4554  code to find out which symbols are supported and what they are filled in with.
4555 </para>
4556
4557 <para>
4558  A special application of this substitution mechanism is to make whole
4559  blocks of HTML code disappear when a specific symbol is set. We use this
4560  for many purposes, one of them being to include the beta warning in all
4561  our user interface (CGI) pages when <application>Privoxy</application>
4562  in in an alpha or beta development stage:
4563 </para>
4564
4565 <para>
4566  <screen>
4567 &lt;!-- @if-unstable-start --&gt;
4568
4569   ... beta warning HTML code goes here ...
4570
4571 &lt;!-- if-unstable-end@ --&gt;</screen>
4572 </para>
4573
4574 <para>
4575  If the "unstable" symbol is set, everything in between and including
4576  <literal>@if-unstable-start</literal> and <literal>if-unstable-end@</literal>
4577  will disappear, leaving nothing but an empty comment:
4578 </para>
4579
4580 <para>
4581  <screen>&lt;!--  --&gt;</screen>
4582 </para>
4583
4584 <para>
4585  There's also an if-then-else construct and an <literal>#include</literal>
4586  mechanism, but you'll sure find out if you are inclined to edit the
4587  templates ;-)
4588 </para>
4589
4590 <para>
4591  All templates refer to a style located at
4592  <ulink url="http://config.privoxy.org/send-stylesheet"><literal>http://config.privoxy.org/send-stylesheet</literal></ulink>.
4593  This is, of course, locally served by <application>Privoxy</application>
4594  and the source for it can be found and edited in the
4595  <filename>cgi-style.css</filename> template.
4596 </para>
4597
4598 </sect1>
4599
4600 <!--  ~  End section  ~  -->
4601
4602
4603
4604 <!--   ~~~~~       New section      ~~~~~     -->
4605
4606 <sect1 id="contact"><title>Contacting the Developers, Bug Reporting and Feature
4607 Requests</title>
4608
4609 <!-- Include contacting.sgml boilerplate: -->
4610  &contacting;
4611 <!-- end boilerplate -->
4612
4613 </sect1>
4614
4615 <!--  ~  End section  ~  -->
4616
4617
4618 <!--   ~~~~~       New section      ~~~~~     -->
4619 <sect1 id="copyright"><title><application>Privoxy</application> Copyright, License and History</title>
4620
4621 <!-- Include copyright.sgml: -->
4622  &copyright;
4623 <!-- end copyright -->
4624
4625 <!--   ~~~~~       New section      ~~~~~     -->
4626 <sect2><title>License</title>
4627 <!-- Include copyright.sgml: -->
4628  &license;
4629 <!-- end copyright -->
4630 </sect2>
4631 <!--  ~  End section  ~  -->
4632
4633
4634 <!--   ~~~~~       New section      ~~~~~     -->
4635
4636 <sect2 id="history"><title>History</title>
4637 <!-- Include history.sgml: -->
4638  &history;
4639 <!-- end history -->
4640 </sect2>
4641
4642 <sect2 id="authors"><title>Authors</title>
4643 <!-- Include p-authors.sgml: -->
4644  &p-authors;
4645 <!-- end authors -->
4646 </sect2>
4647
4648 </sect1>
4649
4650 <!--  ~  End section  ~  -->
4651
4652
4653 <!--   ~~~~~       New section      ~~~~~     -->
4654 <sect1 id="seealso"><title>See Also</title>
4655 <!-- Include seealso.sgml: -->
4656  &seealso;
4657 <!-- end seealso -->
4658 </sect1>
4659
4660
4661
4662 <!--   ~~~~~       New section      ~~~~~     -->
4663 <sect1 id="appendix"><title>Appendix</title>
4664
4665
4666 <!--   ~~~~~       New section      ~~~~~     -->
4667 <sect2 id="regex">
4668 <title>Regular Expressions</title>
4669 <para>
4670  <application>Privoxy</application> uses Perl-style <quote>regular
4671  expressions</quote> in its <link linkend="actions-file">actions
4672  files</link> and <link linkend="filter-file">filter file</link>,
4673  through the <ulink url="http://www.pcre.org/">PCRE</ulink> and
4674  <ulink url="http://www.oesterhelt.org/pcrs/">PCRS</ulink> libraries.
4675 </para>
4676
4677 <para>
4678  If you are reading this, you probably don't understand what <quote>regular
4679  expressions</quote> are, or what they can do. So this will be a very brief
4680  introduction only. A full explanation would require a <ulink
4681  url="http://www.oreilly.com/catalog/regex/">book</ulink> ;-)
4682 </para>
4683
4684 <para>
4685  Regular expressions provide a language to describe patterns that can be
4686  run against strings of characters (letter, numbers, etc), to see if they
4687  match the string or not. The  patterns are themselves (sometimes complex)
4688  strings of literal characters, combined with  wild-cards, and other special
4689  characters, called meta-characters. The <quote>meta-characters</quote> have
4690  special meanings and are used to build complex patterns to be matched against.
4691  Perl Compatible Regular Expressions are an especially convenient
4692  <quote>dialect</quote> of the regular expression language.
4693 </para>
4694
4695 <para>
4696  To make a simple analogy, we do something similar when we use wild-card
4697  characters when listing files with the <command>dir</command> command in DOS. 
4698  <literal>*.*</literal> matches all filenames. The <quote>special</quote>
4699  character here is the asterisk which matches any and all characters. We can be
4700  more specific and use <literal>?</literal> to match just individual
4701  characters. So <quote>dir file?.text</quote> would match
4702  <quote>file1.txt</quote>, <quote>file2.txt</quote>, etc. We are pattern
4703  matching, using a similar technique to <quote>regular expressions</quote>!
4704 </para>
4705
4706 <para>
4707  Regular expressions do essentially the same thing, but are much, much more
4708  powerful. There are many more <quote>special characters</quote> and ways of 
4709  building complex patterns however. Let's look at a few of the common ones,
4710  and then some examples:
4711 </para>
4712
4713 <para><simplelist>
4714  <member>
4715   <emphasis>.</emphasis> - Matches any single character, e.g. <quote>a</quote>,
4716   <quote>A</quote>, <quote>4</quote>, <quote>:</quote>, or <quote>@</quote>.
4717  </member>
4718 </simplelist></para>
4719
4720 <para><simplelist>
4721  <member>
4722   <emphasis>?</emphasis> - The preceding character or expression is matched ZERO or ONE
4723   times. Either/or.
4724  </member>
4725 </simplelist></para>
4726
4727 <para><simplelist>
4728  <member>
4729   <emphasis>+</emphasis> - The preceding character or expression is matched ONE or MORE
4730   times.
4731  </member>
4732 </simplelist></para>
4733
4734 <para><simplelist>
4735  <member>
4736   <emphasis>*</emphasis> - The preceding character or expression is matched ZERO or MORE
4737   times.
4738  </member>
4739 </simplelist></para>
4740
4741 <para><simplelist>
4742  <member>
4743   <emphasis>\</emphasis> - The <quote>escape</quote> character denotes that
4744   the following character should be taken literally. This is used where one of the 
4745   special characters (e.g. <quote>.</quote>) needs to be taken literally and
4746   not as a special meta-character. Example: <quote>example\.com</quote>, makes 
4747   sure the period is recognized only as a period (and not expanded to its 
4748   meta-character meaning of any single character).
4749  </member>
4750 </simplelist></para>
4751
4752 <para><simplelist>
4753  <member>
4754   <emphasis>[]</emphasis> - Characters enclosed in brackets will be matched if
4755   any of the enclosed characters are encountered. For instance, <quote>[0-9]</quote>
4756   matches any numeric digit (zero through nine). As an example, we can combine 
4757   this with <quote>+</quote> to match any digit one of more times: <quote>[0-9]+</quote>.
4758  </member>
4759 </simplelist></para>
4760
4761 <para><simplelist>
4762  <member>
4763   <emphasis>()</emphasis> - parentheses are used to group a sub-expression,
4764   or multiple sub-expressions.
4765  </member>
4766 </simplelist></para>
4767
4768 <para><simplelist>
4769  <member>
4770   <emphasis>|</emphasis> - The <quote>bar</quote> character works like an
4771   <quote>or</quote> conditional statement. A match is successful if the
4772   sub-expression on either side of <quote>|</quote> matches. As an example:
4773   <quote>/(this|that) example/</quote> uses grouping and the bar character 
4774   and would match either <quote>this example</quote> or <quote>that
4775   example</quote>, and nothing else.
4776  </member>
4777 </simplelist></para>
4778
4779 <para>
4780  These are just some of the ones you are likely to use when matching URLs with 
4781  <application>Privoxy</application>, and is a long way from a definitive
4782  list. This is enough to get us started with a few simple examples which may
4783  be more illuminating:
4784 </para>
4785
4786 <para>
4787  <emphasis><literal>/.*/banners/.*</literal></emphasis> - A  simple example
4788  that uses the common combination of <quote>.</quote> and <quote>*</quote> to 
4789  denote any character, zero or more times. In other words, any string at all.
4790  So we start with a literal forward slash, then our regular expression pattern 
4791  (<quote>.*</quote>) another literal forward slash, the string
4792  <quote>banners</quote>, another forward slash, and lastly another
4793  <quote>.*</quote>. We are building 
4794  a directory path here. This will match any file with the path that has a
4795  directory named <quote>banners</quote> in it. The <quote>.*</quote> matches
4796  any characters, and this could conceivably be more forward slashes, so it
4797  might expand into a much longer looking path. For example, this could match:
4798  <quote>/eye/hate/spammers/banners/annoy_me_please.gif</quote>, or just
4799  <quote>/banners/annoying.html</quote>, or almost an infinite number of other
4800  possible combinations, just so it has <quote>banners</quote> in the path
4801  somewhere.
4802 </para>
4803
4804 <para>
4805  A now something a little more complex:
4806 </para>
4807
4808 <para>
4809  <emphasis><literal>/.*/adv((er)?ts?|ertis(ing|ements?))?/</literal></emphasis> - 
4810  We have several literal forward slashes again (<quote>/</quote>), so we are
4811  building another expression that is a file path statement. We have another 
4812  <quote>.*</quote>, so we are matching against any conceivable sub-path, just so
4813  it matches our expression. The only true literal that <emphasis>must
4814  match</emphasis> our pattern is <application>adv</application>, together with
4815  the forward slashes. What comes after the <quote>adv</quote> string is the
4816  interesting part. 
4817 </para>
4818
4819 <para>
4820  Remember the <quote>?</quote> means the preceding expression (either a
4821  literal character or anything grouped with <quote>(...)</quote> in this case)
4822  can exist or not, since this means either zero or one match. So
4823  <quote>((er)?ts?|ertis(ing|ements?))</quote> is optional, as are the
4824  individual sub-expressions: <quote>(er)</quote>,
4825  <quote>(ing|ements?)</quote>, and the <quote>s</quote>. The <quote>|</quote>
4826  means <quote>or</quote>. We have two of those. For instance, 
4827  <quote>(ing|ements?)</quote>, can expand to match either <quote>ing</quote> 
4828  <emphasis>OR</emphasis> <quote>ements?</quote>. What is being done here, is an
4829  attempt at matching as many variations of <quote>advertisement</quote>, and 
4830  similar, as possible. So this would expand to match just <quote>adv</quote>,
4831  or <quote>advert</quote>, or <quote>adverts</quote>, or
4832  <quote>advertising</quote>, or <quote>advertisement</quote>, or
4833  <quote>advertisements</quote>. You get the idea. But it would not match 
4834  <quote>advertizements</quote> (with a <quote>z</quote>). We could fix that by
4835  changing our regular expression to: 
4836  <quote>/.*/adv((er)?ts?|erti(s|z)(ing|ements?))?/</quote>, which would then match
4837  either spelling.
4838 </para>
4839
4840 <para>
4841  <emphasis><literal>/.*/advert[0-9]+\.(gif|jpe?g)</literal></emphasis> - Again 
4842  another path statement with forward slashes. Anything in the square brackets 
4843  <quote>[]</quote> can be matched. This is using <quote>0-9</quote> as a
4844  shorthand expression to mean any digit one through nine. It is the same as
4845  saying <quote>0123456789</quote>. So any digit matches. The <quote>+</quote>
4846  means one or more of the preceding expression must be included. The preceding 
4847  expression here is what is in the square brackets -- in this case, any digit 
4848  one through nine. Then, at the end, we have a grouping: <quote>(gif|jpe?g)</quote>. 
4849  This includes a <quote>|</quote>, so this needs to match the expression on
4850  either side of that bar character also. A simple <quote>gif</quote> on one side, and the other
4851  side will in turn match either <quote>jpeg</quote> or <quote>jpg</quote>,
4852  since the <quote>?</quote> means the letter <quote>e</quote> is optional and
4853  can be matched once or not at all. So we are building an expression here to
4854  match image GIF or JPEG type image file. It must include the literal
4855  string <quote>advert</quote>, then one or more digits, and a <quote>.</quote>
4856  (which is now a literal, and not a special character, since it is escaped
4857  with <quote>\</quote>), and lastly either <quote>gif</quote>, or
4858  <quote>jpeg</quote>, or <quote>jpg</quote>. Some possible matches would
4859  include: <quote>//advert1.jpg</quote>,
4860  <quote>/nasty/ads/advert1234.gif</quote>,
4861  <quote>/banners/from/hell/advert99.jpg</quote>. It would not match
4862  <quote>advert1.gif</quote> (no leading slash), or
4863  <quote>/adverts232.jpg</quote> (the expression does not include an
4864  <quote>s</quote>), or <quote>/advert1.jsp</quote> (<quote>jsp</quote> is not
4865  in the expression anywhere).
4866 </para>
4867
4868 <para>
4869  We are barely scratching the surface of regular expressions here so that you
4870  can understand the default <application>Privoxy</application>
4871  configuration files, and maybe use this knowledge to customize your own
4872  installation. There is much, much more that can be done with regular
4873  expressions. Now that you know enough to get started, you can learn more on
4874  your own :/
4875 </para>
4876
4877 <para>
4878  More reading on Perl Compatible Regular expressions: 
4879  <ulink url="http://www.perldoc.com/perl5.6/pod/perlre.html">http://www.perldoc.com/perl5.6/pod/perlre.html</ulink>
4880 </para>
4881
4882 <para>
4883  For information on regular expression based substitutions and their applications
4884  in filters, please see the <link linkend="filter-file">filter file tutorial</link>
4885  in this manual.
4886 </para>
4887 </sect2>
4888
4889 <!--  ~  End section  ~  -->
4890
4891
4892 <!--   ~~~~~       New section      ~~~~~     -->
4893 <sect2>
4894 <title><application>Privoxy</application>'s Internal Pages</title>
4895
4896 <para>
4897  Since <application>Privoxy</application> proxies each requested 
4898  web page, it is easy for <application>Privoxy</application> to 
4899  trap certain special URLs. In this way, we can talk directly to
4900  <application>Privoxy</application>, and see how it is 
4901  configured, see how our rules are being applied, change these 
4902  rules and other configuration options, and even turn
4903  <application>Privoxy's</application> filtering off, all with 
4904  a web browser.
4905
4906 </para>
4907
4908 <para>
4909  The URLs listed below are the special ones that allow direct access 
4910  to <application>Privoxy</application>. Of course,
4911  <application>Privoxy</application> must be running to access these. If 
4912  not, you will get a friendly error message. Internet access is not 
4913  necessary either.
4914 </para>
4915
4916 <para>
4917  <itemizedlist>
4918
4919  <listitem>
4920   <para>  
4921    Privoxy main page: 
4922   </para>
4923   <blockquote>
4924    <para> 
4925      <ulink url="http://config.privoxy.org/">http://config.privoxy.org/</ulink>
4926    </para>
4927   </blockquote>
4928   <para>
4929    There is a shortcut: <ulink url="http://p.p/">http://p.p/</ulink> (But it
4930    doesn't provide a fall-back to a real page, in case the request is not
4931    sent through <application>Privoxy</application>)
4932   </para>
4933  </listitem>
4934
4935  <listitem>
4936   <para>  
4937     Show information about the current configuration, including viewing and 
4938     editing of actions files:
4939   </para>
4940    <blockquote>
4941    <para> 
4942     <ulink url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>
4943    </para>
4944   </blockquote>
4945  </listitem>
4946  
4947  <listitem>
4948   <para>  
4949     Show the source code version numbers:
4950   </para>
4951   <blockquote>
4952    <para> 
4953     <ulink url="http://config.privoxy.org/show-version">http://config.privoxy.org/show-version</ulink>
4954    </para>
4955   </blockquote>
4956  </listitem>
4957  
4958  <listitem>
4959   <para>  
4960    Show the browser's request headers:
4961   </para>
4962   <blockquote>
4963    <para> 
4964     <ulink url="http://config.privoxy.org/show-request">http://config.privoxy.org/show-request</ulink>
4965    </para>
4966   </blockquote>
4967  </listitem>
4968  
4969  <listitem>
4970   <para>  
4971    Show which actions apply to a URL and why:
4972   </para>
4973    <blockquote>
4974    <para> 
4975     <ulink url="http://config.privoxy.org/show-url-info">http://config.privoxy.org/show-url-info</ulink>
4976    </para>
4977   </blockquote>
4978  </listitem>
4979  
4980  <listitem>
4981   <para>  
4982    Toggle Privoxy on or off. In this case, <quote>Privoxy</quote> continues 
4983    to run, but only as a pass-through proxy, with no actions taking place:
4984   </para>
4985    <blockquote>
4986    <para> 
4987     <ulink url="http://config.privoxy.org/toggle">http://config.privoxy.org/toggle</ulink>
4988    </para>
4989   </blockquote>
4990   <para>
4991    Short cuts. Turn off, then on: 
4992   </para>
4993    <blockquote>
4994    <para> 
4995      <ulink url="http://config.privoxy.org/toggle?set=disable">http://config.privoxy.org/toggle?set=disable</ulink>
4996    </para>
4997   </blockquote>
4998    <blockquote>
4999    <para> 
5000      <ulink url="http://config.privoxy.org/toggle?set=enable">http://config.privoxy.org/toggle?set=enable</ulink>
5001    </para>
5002   </blockquote>
5003  </listitem>
5004  
5005  </itemizedlist>
5006 </para>
5007
5008 <para>
5009  These may be bookmarked for quick reference. See next.
5010
5011 </para>
5012
5013 <sect3 id="bookmarklets">
5014 <title>Bookmarklets</title>
5015 <para>
5016  Below are some <quote>bookmarklets</quote> to allow you to easily access a
5017  <quote>mini</quote> version of some of <application>Privoxy's</application>
5018  special pages. They are designed for MS Internet Explorer, but should work
5019  equally well in Netscape, Mozilla, and other browsers which support
5020  JavaScript. They are designed to run directly from your bookmarks - not by
5021  clicking the links below (although that should work for testing).
5022 </para>
5023 <para>
5024  To save them, right-click the link and choose <quote>Add to Favorites</quote>
5025  (IE) or <quote>Add Bookmark</quote> (Netscape). You will get a warning that
5026  the bookmark <quote>may not be safe</quote> - just click OK. Then you can run the
5027  Bookmarklet directly from your favorites/bookmarks. For even faster access,
5028  you can put them on the <quote>Links</quote> bar (IE) or the <quote>Personal
5029  Toolbar</quote> (Netscape), and run them with a single click. 
5030 </para>
5031
5032 <para>
5033  <itemizedlist>
5034
5035   <listitem>
5036    <para>
5037     <ulink
5038     url="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());">Privoxy - Enable</ulink>
5039    </para>
5040   </listitem> 
5041
5042   <listitem>
5043    <para>
5044     <ulink
5045     url="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());">Privoxy - Disable</ulink>
5046    </para>
5047   </listitem> 
5048
5049   <listitem>
5050    <para>
5051     <ulink
5052     url="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());">Privoxy - Toggle Privoxy</ulink> (Toggles between enabled and disabled)
5053    </para>
5054   </listitem> 
5055
5056   <listitem>
5057    <para>
5058     <ulink
5059     url="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());">Privoxy- View Status</ulink>
5060    </para>
5061   </listitem> 
5062
5063   <listitem>
5064    <para>
5065     <ulink url="javascript:w=Math.floor(screen.width/2);h=Math.floor(screen.height*0.9);void(window.open('http://www.privoxy.org/actions/index.php?url='+escape(location.href),'Feedback','screenx='+w+',width='+w+',height='+h+',scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());">Privoxy - Submit Actions File Feedback</ulink>
5066    </para>
5067   </listitem> 
5068   <listitem>
5069    <para>
5070     <ulink url="javascript:void(window.open('http://config.privoxy.org/show-url-info?url='+escape(location.href),'Why').focus());">Privoxy - Why?</ulink>
5071    </para>
5072   </listitem> 
5073  </itemizedlist>
5074 </para>
5075
5076 <para>
5077  Credit: The site which gave us the general idea for these bookmarklets is
5078  <ulink url="http://www.bookmarklets.com">www.bookmarklets.com</ulink>. They
5079  have more information about bookmarklets. 
5080 </para>
5081
5082
5083 </sect3>
5084
5085 </sect2>
5086
5087
5088 <!--   ~~~~~       New section      ~~~~~     -->
5089 <sect2 id="chain">
5090 <title>Chain of Events</title>
5091 <para>
5092  Let's take a quick look at the basic sequence of events when a web page is 
5093  requested by your browser and <application>Privoxy</application> is on duty:
5094 </para>
5095
5096 <para>
5097  <itemizedlist>
5098  <listitem>
5099   <para>
5100    First, your web browser requests a web page. The browser knows to send 
5101    the request to <application>Privoxy</application>, which will in turn, 
5102    relay the request to the remote web server after passing the following 
5103    tests: 
5104   </para>
5105  </listitem> 
5106  <listitem>
5107   <para>
5108    <application>Privoxy</application> traps any request for its own internal CGI 
5109    pages (e.g http://p.p/) and sends the CGI page back to the browser.
5110   </para>
5111  </listitem> 
5112  <listitem>
5113   <para>
5114    Next, <application>Privoxy</application> checks to see if the URL 
5115    matches any <link
5116    linkend="BLOCK"><quote>+block</quote></link> patterns. If
5117    so, the URL is then blocked, and the remote web server will not be contacted.
5118    <link linkend="HANDLE-AS-IMAGE"><quote>+handle-as-image</quote></link> 
5119    is then checked and if it does not match, an 
5120    HTML <quote>BLOCKED</quote> page is sent back. Otherwise, if it does match,
5121    an image is returned. The type of image depends on the setting of <link
5122    linkend="SET-IMAGE-BLOCKER"><quote>+set-image-blocker</quote></link>
5123    (blank, checkerboard pattern, or an HTTP redirect to an image elsewhere).
5124   </para>
5125  </listitem> 
5126  <listitem>
5127   <para>
5128    Untrusted URLs are blocked. If URLs are being added to the
5129    <filename>trust</filename> file, then that is done.
5130   </para>
5131  </listitem> 
5132  <listitem>
5133   <para>
5134    If the URL pattern matches the <link
5135    linkend="FAST-REDIRECTS"><quote>+fast-redirects</quote></link> action,
5136    it is then processed. Unwanted parts of the requested URL are stripped.
5137   </para>
5138  </listitem> 
5139  <listitem>
5140   <para>
5141    Now the rest of the client browser's request headers are processed. If any
5142    of these match any of the relevant actions (e.g. <link
5143    linkend="HIDE-USER-AGENT"><quote>+hide-user-agent</quote></link>,
5144    etc.), headers are suppressed or forged as determined by these actions and
5145    their parameters.
5146   </para>
5147  </listitem> 
5148  <listitem>
5149   <para>
5150    Now the web server starts sending its response back (i.e. typically a web page and related 
5151    data).
5152   </para>
5153  </listitem> 
5154  <listitem>
5155   <para>
5156    First, the server headers are read and processed to determine, among other
5157    things, the MIME type (document type) and encoding. The headers are then
5158    filtered as deterimined by the 
5159    <link linkend="CRUNCH-INCOMING-COOKIES"><quote>+crunch-incoming-cookies</quote></link>,
5160    <link linkend="SESSION-COOKIES-ONLY"><quote>+session-cookies-only</quote></link>,
5161    and <link linkend="DOWNGRADE-HTTP-VERSION"><quote>+downgrade-http-version</quote></link>
5162    actions.
5163   </para>
5164  </listitem> 
5165  <listitem>
5166   <para>
5167    If the <link linkend="KILL-POPUPS"><quote>+kill-popups</quote></link>
5168    action applies, and it is an HTML or JavaScript document, the popup-code in the
5169    response is filtered on-the-fly as it is received.
5170   </para>
5171  </listitem> 
5172  <listitem>
5173   <para>
5174    If a <link linkend="FILTER"><quote>+filter</quote></link>
5175    or <link
5176    linkend="DEANIMATE-GIFS"><quote>+deanimate-gifs</quote></link>
5177    action applies (and the document type fits the action), the rest of the page is
5178    read into memory (up to a configurable limit). Then the filter rules (from
5179    <filename>default.filter</filename>) are processed against the buffered
5180    content. Filters are applied in the order they are specified in the
5181    <filename>default.filter</filename> file. Animated GIFs, if present, are
5182    reduced to either the first or last frame, depending on the action
5183    setting.The entire page, which is now filtered, is then sent by
5184    <application>Privoxy</application> back to your browser. 
5185   </para>
5186   <para>
5187    If neither <link linkend="FILTER"><quote>+filter</quote></link>
5188    or <link
5189    linkend="DEANIMATE-GIFS"><quote>+deanimate-gifs</quote></link>
5190    matches, then <application>Privoxy</application> passes the raw data through 
5191    to the client browser as it becomes available.
5192   </para>
5193  </listitem> 
5194  <listitem>
5195   <para>
5196    As the browser receives the now (probably filtered) page content, it 
5197    reads and then requests any URLs that may be embedded within the page
5198    source, e.g. ad images, stylesheets, JavaScript, other HTML documents (e.g.
5199    frames), sounds, etc. For each of these objects, the browser issues a new
5200    request. And each such request is in turn processed as above. Note that a
5201    complex web page may have many such embedded URLs.
5202   </para>
5203  </listitem> 
5204  
5205  </itemizedlist>
5206 </para>
5207
5208 </sect2>
5209
5210
5211 <!--   ~~~~~       New section      ~~~~~     -->
5212 <sect2 id="actionsanat">
5213 <title>Anatomy of an Action</title>
5214
5215 <para>
5216  The way <application>Privoxy</application> applies 
5217  <link linkend="ACTIONS">actions</link> and <link linkend="FILTER">filters</link>
5218  to any given URL can be complex, and not always so
5219  easy to understand what is happening. And sometimes we need to be able to
5220  <emphasis>see</emphasis> just what <application>Privoxy</application> is
5221  doing. Especially, if something <application>Privoxy</application> is doing
5222  is causing us a problem inadvertently. It can be a little daunting to look at
5223  the actions and filters files themselves, since they tend to be filled with
5224  <link linkend="regex">regular expressions</link> whose consequences are not
5225  always so obvious. 
5226 </para>
5227
5228 <para>
5229  One quick test to see if <application>Privoxy</application> is causing a problem 
5230  or not, is to disable it temporarily. This should be the first troubleshooting 
5231  step. See <link linkend="bookmarklets">the Bookmarklets</link> section on a quick 
5232  and easy way to do this (be sure to flush caches afterward!). Looking at the 
5233  logs is a good idea too.
5234 </para>
5235
5236 <para>
5237  <application>Privoxy</application> also provides the 
5238  <ulink url="http://config.privoxy.org/show-url-info">http://config.privoxy.org/show-url-info</ulink>
5239  page that can show us very specifically how <application>actions</application>
5240  are being applied to any given URL. This is a big help for troubleshooting.
5241 </para>
5242
5243 <para>
5244  First, enter one URL (or partial URL) at the prompt, and then
5245  <application>Privoxy</application> will tell us 
5246  how the current configuration will handle it. This will not
5247  help with filtering effects (i.e. the <link
5248  linkend="FILTER"><quote>+filter</quote></link> action) from
5249  the <filename>default.filter</filename> file since this is handled very
5250  differently and not so easy to trap! It also will not tell you about any other
5251  URLs that may be embedded within the URL you are testing. For instance, images
5252  such as ads are expressed as URLs within the raw page source of HTML pages. So
5253  you will only get info for the actual URL that is pasted into the prompt area
5254  -- not any sub-URLs. If you want to know about embedded URLs like ads, you
5255  will have to dig those out of the HTML source. Use your browser's <quote>View
5256  Page Source</quote> option for this. Or right click on the ad, and grab the
5257  URL.
5258 </para>
5259
5260 <para>
5261  Let's try an example, <ulink url="http://google.com">google.com</ulink>, 
5262  and look at it one section at a time:
5263 </para>
5264
5265 <para>
5266  <screen>
5267  Matches for http://google.com:
5268
5269  In file: default.action <guibutton>[ View ]</guibutton> <guibutton>[ Edit ]</guibutton>
5270
5271 {-add-header 
5272  -block 
5273  -crunch-outgoing-cookies 
5274  -crunch-incoming-cookies 
5275  +deanimate-gifs{last} 
5276  -downgrade-http-version 
5277  +fast-redirects 
5278  -filter{popups} 
5279  -filter{fun} 
5280  -filter{shockwave-flash} 
5281  -filter{crude-parental} 
5282  +filter{html-annoyances} 
5283  +filter{js-annoyances} 
5284  +filter{content-cookies} 
5285  +filter{webbugs} 
5286  +filter{refresh-tags} 
5287  +filter{nimda} 
5288  +filter{banners-by-size} 
5289  +hide-forwarded-for-headers 
5290  +hide-from-header{block} 
5291  +hide-referer{forge} 
5292  -hide-user-agent 
5293  -handle-as-image 
5294  -kill-popups 
5295  -limit-connect 
5296  +prevent-compression 
5297  -send-vanilla-wafer 
5298  -send-wafer 
5299  +session-cookies-only 
5300  +set-image-blocker{pattern} }
5301 /
5302
5303  { -session-cookies-only }
5304  .google.com
5305
5306  { -fast-redirects }
5307  .google.com
5308
5309 In file: user.action <guibutton>[ View ]</guibutton> <guibutton>[ Edit ]</guibutton>
5310 (no matches in this file)  
5311 </screen>
5312 </para>
5313
5314 <para>
5315  This tells us how we have defined our 
5316  <link linkend="ACTIONS"><quote>actions</quote></link>, and
5317  which ones match for our example, <quote>google.com</quote>. The first listing
5318  is any matches for the <filename>standard.action</filename> file. No hits at
5319  all here on <quote>standard</quote>. Then next is <quote>default</quote>, or
5320  our <filename>default.action</filename> file. The large, multi-line listing,
5321  is how the actions are set to match for all URLs, i.e. our default settings.
5322  If you look at your <quote>actions</quote> file, this would be the section
5323  just below the <quote>aliases</quote> section near the top. This will apply to
5324  all URLs as signified by the single forward slash at the end of the listing
5325  -- <quote>/</quote>.
5326 </para>
5327
5328 <para>
5329  But we can define additional actions that would be exceptions to these general
5330  rules, and then list specific URLs (or patterns) that these exceptions would
5331  apply to. Last match wins. Just below this then are two explicit matches for
5332  <quote>.google.com</quote>. The first is negating our previous cookie setting, 
5333  which was for <link
5334  linkend="SESSION-COOKIES-ONLY"><quote>+session-cookies-only</quote></link>
5335  (i.e. not persistent). So we will allow persistent cookies for google. The
5336  second turns <emphasis>off</emphasis> any 
5337  <link
5338  linkend="FAST-REDIRECTS"><quote>+fast-redirects</quote></link>
5339  action, allowing this to take place unmolested. Note that there is a leading
5340  dot here -- <quote>.google.com</quote>. This will match any hosts and
5341  sub-domains, in the google.com domain also, such as
5342  <quote>www.google.com</quote>. So, apparently, we have these two actions
5343  defined somewhere in the lower part of our <filename>default.action</filename>
5344  file, and <quote>google.com</quote> is referenced somewhere in these latter
5345  sections.
5346 </para>
5347
5348 <para>
5349  Then, for our <filename>user.action</filename> file, we again have no hits.
5350 </para>
5351
5352 <para>
5353  And finally we pull it all together in the bottom section and summarize how
5354  <application>Privoxy</application> is applying all its <quote>actions</quote> 
5355  to <quote>google.com</quote>:
5356
5357 </para>
5358
5359 <para>
5360  <screen>
5361
5362  Final results:
5363  
5364  -add-header 
5365  -block 
5366  -crunch-outgoing-cookies 
5367  -crunch-incoming-cookies 
5368  +deanimate-gifs{last} 
5369  -downgrade-http-version 
5370  -fast-redirects 
5371  -filter{popups} 
5372  -filter{fun} 
5373  -filter{shockwave-flash} 
5374  -filter{crude-parental} 
5375  +filter{html-annoyances} 
5376  +filter{js-annoyances} 
5377  +filter{content-cookies} 
5378  +filter{webbugs} 
5379  +filter{refresh-tags} 
5380  +filter{nimda} 
5381  +filter{banners-by-size} 
5382  +hide-forwarded-for-headers 
5383  +hide-from-header{block} 
5384  +hide-referer{forge} 
5385  -hide-user-agent 
5386  -handle-as-image 
5387  -kill-popups 
5388  -limit-connect 
5389  +prevent-compression 
5390  -send-vanilla-wafer 
5391  -send-wafer
5392  -session-cookies-only 
5393  +set-image-blocker{pattern} 
5394 </screen>
5395 </para>
5396
5397 <para>
5398  Notice the only difference here to the previous listing, is to 
5399  <quote>fast-redirects</quote> and <quote>session-cookies-only</quote>.
5400 </para>
5401
5402 <para>
5403  Now another example, <quote>ad.doubleclick.net</quote>:
5404 </para>
5405
5406 <para>
5407  <screen>
5408
5409  { +block +handle-as-image }
5410   .ad.doubleclick.net
5411
5412  { +block +handle-as-image }
5413   ad*.
5414
5415  { +block +handle-as-image }
5416   .doubleclick.net
5417 </screen>
5418 </para>
5419
5420 <para>
5421  We'll just show the interesting part here, the explicit matches. It is 
5422  matched three different times. Each as an <quote>+block +handle-as-image</quote>,
5423  which is the expanded form of one of our aliases that had been defined as: 
5424  <quote>+imageblock</quote>. (<link
5425  linkend="ALIASES"><quote>Aliases</quote></link> are defined in
5426  the first section of the actions file and typically used to combine more 
5427  than one action.)
5428 </para>
5429
5430 <para>
5431  Any one of these would have done the trick and blocked this as an unwanted 
5432  image. This is unnecessarily redundant since the last case effectively 
5433  would also cover the first. No point in taking chances with these guys 
5434  though ;-) Note that if you want an ad or obnoxious 
5435  URL to be invisible, it should be defined as <quote>ad.doubleclick.net</quote>
5436  is done here -- as both a <link
5437  linkend="BLOCK"><quote>+block</quote></link>
5438  <emphasis>and</emphasis> an 
5439  <link
5440  linkend="HANDLE-AS-IMAGE"><quote>+handle-as-image</quote></link>.
5441  The custom alias <quote>+imageblock</quote> just simplifies the process and make 
5442  it more readable.
5443 </para>
5444
5445 <para>
5446  One last example. Let's try <quote>http://www.rhapsodyk.net/adsl/HOWTO/</quote>.
5447  This one is giving us problems. We are getting a blank page. Hmmm ...
5448 </para>
5449
5450 <para>
5451  <screen>
5452
5453  Matches for http://www.rhapsodyk.net/adsl/HOWTO/:
5454
5455  In file: default.action <guibutton>[ View ]</guibutton> <guibutton>[ Edit ]</guibutton>
5456
5457  {-add-header 
5458   -block 
5459   -crunch-incoming-cookies 
5460   -crunch-outgoing-cookies 
5461   +deanimate-gifs 
5462   -downgrade-http-version 
5463   +fast-redirects 
5464   +filter{html-annoyances} 
5465   +filter{js-annoyances} 
5466   +filter{kill-popups} 
5467   +filter{webbugs} 
5468   +filter{nimda} 
5469   +filter{banners-by-size} 
5470   +filter{hal} 
5471   +filter{fun} 
5472   +hide-forwarded-for-headers 
5473   +hide-from-header{block} 
5474   +hide-referer{forge} 
5475   -hide-user-agent 
5476   -handle-as-image 
5477   +kill-popups 
5478   +prevent-compression 
5479   -send-vanilla-wafer 
5480   -send-wafer 
5481   +session-cookies-only 
5482   +set-image-blocker{blank} }
5483    /
5484
5485  { +block +handle-as-image }
5486   /ads
5487 </screen>
5488 </para>
5489
5490 <para>
5491  Ooops, the <quote>/adsl/</quote> is matching <quote>/ads</quote>! But 
5492  we did not want this at all! Now we see why we get the blank page. We could
5493  now add a new action below this that explicitly does <emphasis>not</emphasis>
5494  block (<quote>{-block}</quote>) paths with <quote>adsl</quote>. There are
5495  various ways to handle such exceptions. Example:
5496 </para>
5497
5498 <para>
5499  <screen>
5500
5501  { -block }
5502   /adsl
5503 </screen>
5504 </para>
5505
5506 <para>
5507  Now the page displays ;-) Be sure to flush your browser's caches when 
5508  making such changes. Or, try using <literal>Shift+Reload</literal>.
5509 </para>
5510
5511 <para>
5512  But now what about a situation where we get no explicit matches like 
5513  we did with:
5514 </para>
5515
5516 <para>
5517  <screen>
5518
5519  { +block +handle-as-image }
5520  /ads
5521 </screen>
5522 </para>
5523
5524 <para>
5525  That actually was very telling and pointed us quickly to where the problem
5526  was. If you don't get this kind of match, then it means one of the default 
5527  rules in the first section is causing the problem. This would require some 
5528  guesswork, and maybe a little trial and error to isolate the offending rule.
5529  One likely cause would be one of the <quote>{+filter}</quote> actions. These 
5530  tend to be harder to troubleshoot. Try adding the URL for the site to one of
5531  aliases that turn off <quote>+filter</quote>:
5532 </para>
5533
5534 <para>
5535  <screen>
5536
5537  {shop}
5538  .quietpc.com
5539  .worldpay.com   # for quietpc.com
5540  .jungle.com
5541  .scan.co.uk
5542  .forbes.com
5543 </screen>
5544 </para>
5545
5546 <para>
5547  <quote>{shop}</quote> is an <quote>alias</quote> that expands to 
5548  <quote>{ -filter -session-cookies-only }</quote>.
5549  Or you could do your own exception to negate filtering:
5550
5551 </para>
5552
5553 <para>
5554  <screen>
5555
5556  {-filter}
5557  .forbes.com
5558 </screen>
5559 </para>
5560
5561 <para>
5562  This would turn off all filtering for that site. This would probably be most
5563  appropriately put in <filename>user.action</filename>, for local site
5564  exceptions.
5565 </para>
5566
5567 <para>
5568  Images that are inexplicably being blocked, may well be hitting the 
5569  <quote>+filter{banners-by-size}</quote> rule, which assumes 
5570  that images of certain sizes are ad banners (works well most of the time 
5571  since these tend to be standardized).
5572 </para>
5573
5574 <para>
5575  <quote>{fragile}</quote> is an alias that disables most actions. This can be 
5576  used as a last resort for problem sites. Remember to flush caches! If this 
5577  still does not work, you will have to go through the remaining actions one by
5578  one to find which one(s) is causing the problem.
5579 </para>
5580
5581 </sect2>
5582
5583 </sect1>
5584
5585  <!--
5586
5587  This program is free software; you can redistribute it 
5588  and/or modify it under the terms of the GNU General
5589  Public License as published by the Free Software
5590  Foundation; either version 2 of the License, or (at
5591  your option) any later version.
5592
5593  This program is distributed in the hope that it will
5594  be useful, but WITHOUT ANY WARRANTY; without even the
5595  implied warranty of MERCHANTABILITY or FITNESS FOR A
5596  PARTICULAR PURPOSE.  See the GNU General Public
5597  License for more details.
5598
5599  The GNU General Public License should be included with
5600  this file.  If not, you can view it at
5601  http://www.gnu.org/copyleft/gpl.html
5602  or write to the Free Software Foundation, Inc., 59
5603  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
5604
5605  $Log: user-manual.sgml,v $
5606  Revision 1.123.2.11  2002/07/26 15:20:31  oes
5607  - Added version info to title
5608  - Added info on new filters
5609  - Revised parts of the filter file tutorial
5610  - Added info on where to get updated actions files
5611
5612  Revision 1.123.2.10  2002/07/25 21:42:29  hal9
5613  Add brief notes on not proxying non-HTTP protocols.
5614
5615  Revision 1.123.2.9  2002/07/11 03:40:28  david__schmidt
5616
5617  Updated Mac OSX sections due to installation location change
5618
5619  Revision 1.123.2.8  2002/06/09 16:36:32  hal9
5620  Clarifications on filtering and MIME. Hardcode 'latest release' in index.html.
5621
5622  Revision 1.123.2.7  2002/06/09 00:29:34  hal9
5623  Touch ups on filtering, in actions section and Anatomy.
5624
5625  Revision 1.123.2.6  2002/06/06 23:11:03  hal9
5626  Fix broken link. Linkchecked all docs.
5627
5628  Revision 1.123.2.5  2002/05/29 02:01:02  hal9
5629  This is break out of the entire config section from u-m, so it can
5630  eventually be used to generate the comments, etc in the main config file
5631  so that these are in sync with each other.
5632
5633  Revision 1.123.2.4  2002/05/27 03:28:45  hal9
5634  Ooops missed something from David.
5635
5636  Revision 1.123.2.3  2002/05/27 03:23:17  hal9
5637  Fix FIXMEs for OS2 and OSX startup. Fix Redhat typos (should be Red Hat).
5638  That's a wrap, I think.
5639
5640  Revision 1.123.2.2  2002/05/26 19:02:09  hal9
5641  Move Amiga stuff around to take of FIXME in start up section.
5642
5643  Revision 1.123.2.1  2002/05/26 17:04:25  hal9
5644  -Spellcheck, very minor edits, and sync across branches
5645
5646  Revision 1.123  2002/05/24 23:19:23  hal9
5647  Include new image (Proxy setup). More fun with guibutton.
5648  Minor corrections/clarifications here and there.
5649
5650  Revision 1.122  2002/05/24 13:24:08  oes
5651  Added Bookmarklet for one-click pre-filled access to show-url-info
5652
5653  Revision 1.121  2002/05/23 23:20:17  oes
5654   - Changed more (all?) references to actions to the
5655     <literal><link> style.
5656   - Small fixes in the actions chapter
5657   - Small clarifications in the quickstart to ad blocking
5658   - Removed <emphasis> from <title>s since the new doc CSS
5659     renders them red (bad in TOC).
5660
5661  Revision 1.120  2002/05/23 19:16:43  roro
5662  Correct Debian specials (installation and startup).
5663
5664  Revision 1.119  2002/05/22 17:17:05  oes
5665  Added Security hint
5666
5667  Revision 1.118  2002/05/21 04:54:55  hal9
5668  -New Section: Quickstart to Ad Blocking
5669  -Reformat Actions Anatomy to match new CGI layout
5670
5671  Revision 1.117  2002/05/17 13:56:16  oes
5672   - Reworked & extended Templates chapter
5673   - Small changes to Regex appendix
5674   - #included authors.sgml into (C) and hist chapter
5675
5676  Revision 1.116  2002/05/17 03:23:46  hal9
5677  Fixing merge conflict in Quickstart section.
5678
5679  Revision 1.115  2002/05/16 16:25:00  oes
5680  Extended the Filter File chapter & minor fixes
5681
5682  Revision 1.114  2002/05/16 09:42:50  oes
5683  More ulink->link, added some hints to Quickstart section
5684
5685  Revision 1.113  2002/05/15 21:07:25  oes
5686  Extended and further commented the example actions files
5687
5688  Revision 1.112  2002/05/15 03:57:14  hal9
5689  Spell check. A few minor edits here and there for better syntax and
5690  clarification.
5691
5692  Revision 1.111  2002/05/14 23:01:36  oes
5693  Fixing the fixes   
5694
5695  Revision 1.110  2002/05/14 19:10:45  oes
5696  Restored alphabetical order of actions
5697
5698  Revision 1.109  2002/05/14 17:23:11  oes
5699  Renamed the prevent-*-cookies actions, extended aliases section and moved it before the example AFs
5700
5701  Revision 1.108  2002/05/14 15:29:12  oes
5702  Completed proofreading the actions chapter
5703
5704  Revision 1.107  2002/05/12 03:20:41  hal9
5705  Small clarifications for 127.0.0.1 vs localhost for listen-address since this
5706  apparently an important distinction for some OS's.
5707
5708  Revision 1.106  2002/05/10 01:48:20  hal9
5709  This is mostly proposed copyright/licensing additions and changes. Docs
5710  are still GPL, but licensing and copyright are more visible. Also, copyright
5711  changed in doc header comments (eliminate references to JB except FAQ).
5712
5713  Revision 1.105  2002/05/05 20:26:02  hal9
5714  Sorting out license vs copyright in these docs.
5715
5716  Revision 1.104  2002/05/04 08:44:45  swa
5717  bumped version
5718
5719  Revision 1.103  2002/05/04 00:40:53  hal9
5720  -Remove the TOC first page kludge. It's fixed proper now in ldp.dsl.in.
5721  -Some minor additions to Quickstart.
5722
5723  Revision 1.102  2002/05/03 17:46:00  oes
5724  Further proofread & reactivated short build instructions
5725
5726  Revision 1.101  2002/05/03 03:58:30  hal9
5727  Move the user-manual config directive to top of section. Add note about
5728  Privoxy needing read permissions for configs, and write for logs.
5729
5730  Revision 1.100  2002/04/29 03:05:55  hal9
5731  Add clarification on differences of new actions files.
5732
5733  Revision 1.99  2002/04/28 16:59:05  swa
5734  more structure in starting section
5735
5736  Revision 1.98  2002/04/28 05:43:59  hal9
5737  This is the break up of configuration.html into multiple files. This
5738  will probably break links elsewhere :(
5739
5740  Revision 1.97  2002/04/27 21:04:42  hal9
5741  -Rewrite of Actions File example.
5742  -Add section for user-manual directive in config.
5743
5744  Revision 1.96  2002/04/27 05:32:00  hal9
5745  -Add short section to Filter Files to tie in with +filter action.
5746  -Start rewrite of examples in Actions Examples (not finished).
5747
5748  Revision 1.95  2002/04/26 17:23:29  swa
5749  bookmarks cleaned, changed structure of user manual, screen and programlisting cleanups, and numerous other changes that I forgot
5750
5751  Revision 1.94  2002/04/26 05:24:36  hal9
5752  -Add most of Andreas suggestions to Chain of Events section.
5753  -A few other minor corrections and touch up.
5754
5755  Revision 1.92  2002/04/25 18:55:13  hal9
5756  More catchups on new actions files, and new actions names.
5757  Other assorted cleanups, and minor modifications.
5758
5759  Revision 1.91  2002/04/24 02:39:31  hal9
5760  Add 'Chain of Events' section.
5761
5762  Revision 1.90  2002/04/23 21:41:25  hal9
5763  Linuxconf is deprecated on RH, substitute chkconfig.
5764
5765  Revision 1.89  2002/04/23 21:05:28  oes
5766  Added hint for startup on Red Hat
5767
5768  Revision 1.88  2002/04/23 05:37:54  hal9
5769  Add AmigaOS install stuff.
5770
5771  Revision 1.87  2002/04/23 02:53:15  david__schmidt
5772  Updated OSX installation section
5773  Added a few English tweaks here an there
5774
5775  Revision 1.86  2002/04/21 01:46:32  hal9
5776  Re-write actions section.
5777
5778  Revision 1.85  2002/04/18 21:23:23  hal9
5779  Fix ugly typo (mine).
5780
5781  Revision 1.84  2002/04/18 21:17:13  hal9
5782  Spell Redhat correctly (ie Red Hat). A few minor grammar corrections.
5783
5784  Revision 1.83  2002/04/18 18:21:12  oes
5785  Added RPM install detail
5786
5787  Revision 1.82  2002/04/18 12:04:50  oes
5788  Cosmetics
5789
5790  Revision 1.81  2002/04/18 11:50:24  oes
5791  Extended Install section - needs fixing by packagers
5792
5793  Revision 1.80  2002/04/18 10:45:19  oes
5794  Moved text to buildsource.sgml, renamed some filters, details
5795
5796  Revision 1.79  2002/04/18 03:18:06  hal9
5797  Spellcheck, and minor touchups.
5798
5799  Revision 1.78  2002/04/17 18:04:16  oes
5800  Proofreading part 2
5801
5802  Revision 1.77  2002/04/17 13:51:23  oes
5803  Proofreading, part one
5804
5805  Revision 1.76  2002/04/16 04:25:51  hal9
5806  -Added 'Note to Upgraders' and re-ordered the 'Quickstart' section.
5807  -Note about proxy may need requests to re-read config files.
5808
5809  Revision 1.75  2002/04/12 02:08:48  david__schmidt
5810  Remove OS/2 building info... it is already in the developer-manual
5811
5812  Revision 1.74  2002/04/11 00:54:38  hal9
5813  Add small section on submitting actions.
5814
5815  Revision 1.73  2002/04/10 18:45:15  swa
5816  generated
5817
5818  Revision 1.72  2002/04/10 04:06:19  hal9
5819  Added actions feedback  to Bookmarklets section
5820
5821  Revision 1.71  2002/04/08 22:59:26  hal9
5822  Version update. Spell chkconfig correctly :)
5823
5824  Revision 1.70  2002/04/08 20:53:56  swa
5825  ?
5826
5827  Revision 1.69  2002/04/06 05:07:29  hal9
5828  -Add privoxy-man-page.sgml, for man page.
5829  -Add authors.sgml for AUTHORS (and p-authors.sgml)
5830  -Reworked various aspects of various docs.
5831  -Added additional comments to sub-docs.
5832
5833  Revision 1.68  2002/04/04 18:46:47  swa
5834  consistent look. reuse of copyright, history et. al.
5835
5836  Revision 1.67  2002/04/04 17:27:57  swa
5837  more single file to be included at multiple points. make maintaining easier
5838
5839  Revision 1.66  2002/04/04 06:48:37  hal9
5840  Structural changes to allow for conditional inclusion/exclusion of content
5841  based on entity toggles, e.g. 'entity % p-not-stable  "INCLUDE"'. And
5842  definition of internal entities, e.g. 'entity p-version "2.9.13"' that will
5843  eventually be set by Makefile.
5844  More boilerplate text for use across multiple docs.
5845
5846  Revision 1.65  2002/04/03 19:52:07  swa
5847  enhance squid section due to user suggestion
5848
5849  Revision 1.64  2002/04/03 03:53:43  hal9
5850  A few minor bug fixes, and touch ups. Ready for review.
5851
5852  Revision 1.63  2002/04/01 16:24:49  hal9
5853  Define entities to include boilerplate text. See doc/source/*.
5854
5855  Revision 1.62  2002/03/30 04:15:53  hal9
5856  - Fix privoxy.org/config links.
5857  - Paste in Bookmarklets from Toggle page.
5858  - Move Quickstart nearer top, and minor rework.
5859
5860  Revision 1.61  2002/03/29 01:31:08  hal9
5861  Minor update.
5862
5863  Revision 1.60  2002/03/27 01:57:34  hal9
5864  Added more to Anatomy section.
5865
5866  Revision 1.59  2002/03/27 00:54:33  hal9
5867  Touch up intro for new name.
5868
5869  Revision 1.58  2002/03/26 22:29:55  swa
5870  we have a new homepage!
5871
5872  Revision 1.57  2002/03/24 20:33:30  hal9
5873  A few minor catch ups with name change.
5874
5875  Revision 1.56  2002/03/24 16:17:06  swa
5876  configure needs to be generated.
5877
5878  Revision 1.55  2002/03/24 16:08:08  swa
5879  we are too lazy to make a block-built
5880  privoxy logo. hence removed the option.
5881
5882  Revision 1.54  2002/03/24 15:46:20  swa
5883  name change related issue.
5884
5885  Revision 1.53  2002/03/24 11:51:00  swa
5886  name change. changed filenames.
5887
5888  Revision 1.52  2002/03/24 11:01:06  swa
5889  name change
5890
5891  Revision 1.51  2002/03/23 15:13:11  swa
5892  renamed every reference to the old name with foobar.
5893  fixed "application foobar application" tag, fixed
5894  "the foobar" with "foobar". left junkbustser in cvs
5895  comments and remarks to history untouched.
5896
5897  Revision 1.50  2002/03/23 05:06:21  hal9
5898  Touch up.
5899
5900  Revision 1.49  2002/03/21 17:01:05  hal9
5901  New section in Appendix.
5902
5903  Revision 1.48  2002/03/12 06:33:01  hal9
5904  Catching up to Andreas and re_filterfile changes.
5905
5906  Revision 1.47  2002/03/11 13:13:27  swa
5907  correct feedback channels
5908
5909  Revision 1.46  2002/03/10 00:51:08  hal9
5910  Added section on JB internal pages in Appendix.
5911
5912  Revision 1.45  2002/03/09 17:43:53  swa
5913  more distros
5914
5915  Revision 1.44  2002/03/09 17:08:48  hal9
5916  New section on Jon's actions file editor, and move some stuff around.
5917
5918  Revision 1.43  2002/03/08 00:47:32  hal9
5919  Added imageblock{pattern}.
5920
5921  Revision 1.42  2002/03/07 18:16:55  swa
5922  looks better
5923
5924  Revision 1.41  2002/03/07 16:46:43  hal9
5925  Fix a few markup problems for jade.
5926
5927  Revision 1.40  2002/03/07 16:28:39  swa
5928  provide correct feedback channels
5929
5930  Revision 1.39  2002/03/06 16:19:28  hal9
5931  Note on perceived filtering slowdown per FR.
5932
5933  Revision 1.38  2002/03/05 23:55:14  hal9
5934  Stupid I did it again. Double hyphen in comment breaks jade.
5935
5936  Revision 1.37  2002/03/05 23:53:49  hal9
5937  jade barfs on '- -' embedded in comments. - -user option broke it.
5938
5939  Revision 1.36  2002/03/05 22:53:28  hal9
5940  Add new - - user option.
5941
5942  Revision 1.35  2002/03/05 00:17:27  hal9
5943  Added section on command line options.
5944
5945  Revision 1.34  2002/03/04 19:32:07  oes
5946  Changed default port to 8118
5947
5948  Revision 1.33  2002/03/03 19:46:13  hal9
5949  Emphasis on where/how to report bugs, etc
5950
5951  Revision 1.32  2002/03/03 09:26:06  joergs
5952  AmigaOS changes, config is now loaded from PROGDIR: instead of
5953  AmiTCP:db/junkbuster/ if no configuration file is specified on the
5954  command line.
5955
5956  Revision 1.31  2002/03/02 22:45:52  david__schmidt
5957  Just tweaking
5958
5959  Revision 1.30  2002/03/02 22:00:14  hal9
5960  Updated 'New Features' list. Ran through spell-checker.
5961
5962  Revision 1.29  2002/03/02 20:34:07  david__schmidt
5963  Update OS/2 build section
5964
5965  Revision 1.28  2002/02/24 14:34:24  jongfoster
5966  Formatting changes.  Now changing the doctype to DocBook XML 4.1
5967  will work - no other changes are needed.
5968
5969  Revision 1.27  2002/01/11 14:14:32  hal9
5970  Added a very short section on Templates
5971
5972  Revision 1.26  2002/01/09 20:02:50  hal9
5973  Fix bug re: auto-detect config file changes.
5974
5975  Revision 1.25  2002/01/09 18:20:30  hal9
5976  Touch ups for *.action files.
5977
5978  Revision 1.24  2001/12/02 01:13:42  hal9
5979  Fix typo.
5980
5981  Revision 1.23  2001/12/02 00:20:41  hal9
5982  Updates for recent changes.
5983
5984  Revision 1.22  2001/11/05 23:57:51  hal9
5985  Minor update for startup now daemon mode.
5986
5987  Revision 1.21  2001/10/31 21:11:03  hal9
5988  Correct 2 minor errors
5989
5990  Revision 1.18  2001/10/24 18:45:26  hal9
5991  *** empty log message ***
5992
5993  Revision 1.17  2001/10/24 17:10:55  hal9
5994  Catching up with Jon's recent work, and a few other things.
5995
5996  Revision 1.16  2001/10/21 17:19:21  swa
5997  wrong url in documentation
5998
5999  Revision 1.15  2001/10/14 23:46:24  hal9
6000  Various minor changes. Fleshed out SEE ALSO section.
6001
6002  Revision 1.13  2001/10/10 17:28:33  hal9
6003  Very minor changes.
6004
6005  Revision 1.12  2001/09/28 02:57:04  hal9
6006  Ditto :/
6007
6008  Revision 1.11  2001/09/28 02:25:20  hal9
6009  Ditto.
6010
6011  Revision 1.9  2001/09/27 23:50:29  hal9
6012  A few changes. A short section on regular expression in appendix.
6013
6014  Revision 1.8  2001/09/25 00:34:59  hal9
6015  Some additions, and re-arranging.
6016
6017  Revision 1.7  2001/09/24 14:31:36  hal9
6018  Diddling.
6019
6020  Revision 1.6  2001/09/24 14:10:32  hal9
6021  Including David's OS/2 installation instructions.
6022
6023  Revision 1.2  2001/09/13 15:27:40  swa
6024  cosmetics
6025
6026  Revision 1.1  2001/09/12 15:36:41  swa
6027  source files for junkbuster documentation
6028
6029  Revision 1.3  2001/09/10 17:43:59  swa
6030  first proposal of a structure.
6031
6032  Revision 1.2  2001/06/13 14:28:31  swa
6033  docs should have an author.
6034
6035  Revision 1.1  2001/06/13 14:20:37  swa
6036  first import of project's documentation for the webserver.
6037
6038  -->
6039
6040 </article>