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