f7a2172e63690700520789c656618b3218e8c34a
[privoxy.git] / doc / webserver / user-manual / actions-file.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
2 <HTML
3 ><HEAD
4 ><TITLE
5 >Actions Files</TITLE
6 ><META
7 NAME="GENERATOR"
8 CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
9 REL="HOME"
10 TITLE="Privoxy 3.0.7 User Manual"
11 HREF="index.html"><LINK
12 REL="PREVIOUS"
13 TITLE="The Main Configuration File"
14 HREF="config.html"><LINK
15 REL="NEXT"
16 TITLE="Filter Files"
17 HREF="filter-file.html"><LINK
18 REL="STYLESHEET"
19 TYPE="text/css"
20 HREF="../p_doc.css">
21 <LINK REL="STYLESHEET" TYPE="text/css" HREF="p_doc.css">
22 </head
23 ><BODY
24 CLASS="SECT1"
25 BGCOLOR="#EEEEEE"
26 TEXT="#000000"
27 LINK="#0000FF"
28 VLINK="#840084"
29 ALINK="#0000FF"
30 ><DIV
31 CLASS="NAVHEADER"
32 ><TABLE
33 SUMMARY="Header navigation table"
34 WIDTH="100%"
35 BORDER="0"
36 CELLPADDING="0"
37 CELLSPACING="0"
38 ><TR
39 ><TH
40 COLSPAN="3"
41 ALIGN="center"
42 >Privoxy 3.0.7 User Manual</TH
43 ></TR
44 ><TR
45 ><TD
46 WIDTH="10%"
47 ALIGN="left"
48 VALIGN="bottom"
49 ><A
50 HREF="config.html"
51 ACCESSKEY="P"
52 >Prev</A
53 ></TD
54 ><TD
55 WIDTH="80%"
56 ALIGN="center"
57 VALIGN="bottom"
58 ></TD
59 ><TD
60 WIDTH="10%"
61 ALIGN="right"
62 VALIGN="bottom"
63 ><A
64 HREF="filter-file.html"
65 ACCESSKEY="N"
66 >Next</A
67 ></TD
68 ></TR
69 ></TABLE
70 ><HR
71 ALIGN="LEFT"
72 WIDTH="100%"></DIV
73 ><DIV
74 CLASS="SECT1"
75 ><H1
76 CLASS="SECT1"
77 ><A
78 NAME="ACTIONS-FILE"
79 >8. Actions Files</A
80 ></H1
81 ><P
82 > The actions files are used to define what <SPAN
83 CLASS="emphasis"
84 ><I
85 CLASS="EMPHASIS"
86 >actions</I
87 ></SPAN
88 >
89  <SPAN
90 CLASS="APPLICATION"
91 >Privoxy</SPAN
92 > takes for which URLs, and thus determines
93  how ad images, cookies and various other aspects of HTTP content and
94  transactions are handled, and on which sites (or even parts thereof). 
95  There are a number of such actions, with a wide range of functionality.
96  Each action does something a little different.
97  These actions give us a veritable arsenal of tools with which to exert 
98  our control, preferences and independence. Actions can be combined so that 
99  their effects are aggregated when applied against a given set of URLs.</P
100 ><P
101 > There 
102  are three action files included with <SPAN
103 CLASS="APPLICATION"
104 >Privoxy</SPAN
105 > with
106  differing purposes:
107  </P
108 ><P
109 >  <P
110 ></P
111 ><UL
112 ><LI
113 ><P
114 >     <TT
115 CLASS="FILENAME"
116 >default.action</TT
117 > - is the primary action file 
118      that sets the initial values for all actions. It is intended to 
119      provide a base level of functionality for
120      <SPAN
121 CLASS="APPLICATION"
122 >Privoxy's</SPAN
123 > array of features. So it is 
124      a set of broad rules that should work reasonably well as-is for most users.
125      This is the file that the developers are keeping updated, and <A
126 HREF="installation.html#INSTALLATION-KEEPUPDATED"
127 >making available to users</A
128 >.
129      The user's preferences as set in <TT
130 CLASS="FILENAME"
131 >standard.action</TT
132 >,
133      e.g. either <TT
134 CLASS="LITERAL"
135 >Cautious</TT
136 > (the default),
137      <TT
138 CLASS="LITERAL"
139 >Medium</TT
140 >, or <TT
141 CLASS="LITERAL"
142 >Advanced</TT
143 > (see
144      below).
145     </P
146 ></LI
147 ><LI
148 ><P
149 >     <TT
150 CLASS="FILENAME"
151 >user.action</TT
152 > - is intended to be for local site 
153      preferences and exceptions. As an example, if your ISP or your bank
154      has specific requirements, and need special handling, this kind of 
155      thing should go here. This file will not be upgraded.
156     </P
157 ></LI
158 ><LI
159 ><P
160 >     <TT
161 CLASS="FILENAME"
162 >standard.action</TT
163 > - is used only by the web based editor
164      at <A
165 HREF="http://config.privoxy.org/edit-actions-list?f=default"
166 TARGET="_top"
167 >     http://config.privoxy.org/edit-actions-list?f=default</A
168 >, 
169      to set various pre-defined sets of rules for the default actions section
170      in <TT
171 CLASS="FILENAME"
172 >default.action</TT
173 >. 
174      </P
175 ><P
176 >     <SPAN
177 CLASS="GUIBUTTON"
178 >Edit</SPAN
179 >  <SPAN
180 CLASS="GUIBUTTON"
181 >Set to Cautious</SPAN
182 > <SPAN
183 CLASS="GUIBUTTON"
184 >Set to Medium</SPAN
185 >  <SPAN
186 CLASS="GUIBUTTON"
187 >Set to Advanced</SPAN
188 >
189      </P
190 ><P
191 >     These have increasing levels of aggressiveness <SPAN
192 CLASS="emphasis"
193 ><I
194 CLASS="EMPHASIS"
195 >and have no
196      influence on your browsing unless you select them explicitly in the
197      editor</I
198 ></SPAN
199 >. A default installation should be pre-set to 
200      <TT
201 CLASS="LITERAL"
202 >Cautious</TT
203 > (versions prior to 3.0.5 were set to
204      <TT
205 CLASS="LITERAL"
206 >Medium</TT
207 >). New users should try this for a while before
208      adjusting the settings to more aggressive levels. The more aggressive 
209      the settings, then the more likelihood there is of problems such as sites 
210      not working as they should.
211      </P
212 ><P
213 >      The <SPAN
214 CLASS="GUIBUTTON"
215 >Edit</SPAN
216 > button allows you to turn each 
217       action on/off individually for fine-tuning. The <SPAN
218 CLASS="GUIBUTTON"
219 >Cautious</SPAN
220 >
221       button changes the actions list to low/safe settings which will activate 
222       ad blocking and a minimal set of <SPAN
223 CLASS="APPLICATION"
224 >Privoxy</SPAN
225 >'s features, and subsequently
226       there will be less of a chance for accidental problems. The
227       <SPAN
228 CLASS="GUIBUTTON"
229 >Medium</SPAN
230 > button sets the list to a medium level of
231       other features and a low level set of privacy features. The
232       <SPAN
233 CLASS="GUIBUTTON"
234 >Advanced</SPAN
235 > button sets the list to a high level of
236       ad blocking and medium level of privacy. See the chart below. The latter
237       three buttons over-ride any changes via with the
238       <SPAN
239 CLASS="GUIBUTTON"
240 >Edit</SPAN
241 > button. More fine-tuning can be done in the
242       lower sections of this internal page.
243      </P
244 ><P
245 >     It is not recommend to edit the <TT
246 CLASS="FILENAME"
247 >standard.action</TT
248 > file
249      itself.
250     </P
251 ><P
252 >     The default profiles, and their associated actions, as pre-defined in
253      <TT
254 CLASS="FILENAME"
255 >standard.action</TT
256 > are:
257     </P
258 ><P
259 >    <DIV
260 CLASS="TABLE"
261 ><A
262 NAME="AEN2145"
263 ></A
264 ><P
265 ><B
266 >Table 1. Default Configurations</B
267 ></P
268 ><TABLE
269 BORDER="1"
270 FRAME="border"
271 RULES="all"
272 CLASS="CALSTABLE"
273 ><COL
274 WIDTH="1*"
275 TITLE="C1"><COL
276 WIDTH="1*"
277 TITLE="C2"><COL
278 WIDTH="1*"
279 TITLE="C3"><COL
280 WIDTH="1*"
281 TITLE="C4"><THEAD
282 ><TR
283 ><TH
284 >Feature</TH
285 ><TH
286 >Cautious</TH
287 ><TH
288 >Medium</TH
289 ><TH
290 >Advanced</TH
291 ></TR
292 ></THEAD
293 ><TBODY
294 ><TR
295 ><TD
296 >Ad-blocking Aggressiveness</TD
297 ><TD
298 >medium</TD
299 ><TD
300 >high</TD
301 ><TD
302 >high</TD
303 ></TR
304 ><TR
305 ><TD
306 >Ad-filtering by size</TD
307 ><TD
308 >no</TD
309 ><TD
310 >yes</TD
311 ><TD
312 >yes</TD
313 ></TR
314 ><TR
315 ><TD
316 >Ad-filtering by link</TD
317 ><TD
318 >no</TD
319 ><TD
320 >no</TD
321 ><TD
322 >yes</TD
323 ></TR
324 ><TR
325 ><TD
326 >Pop-up killing</TD
327 ><TD
328 >blocks only</TD
329 ><TD
330 >blocks only</TD
331 ><TD
332 >blocks only</TD
333 ></TR
334 ><TR
335 ><TD
336 >Privacy Features</TD
337 ><TD
338 >low</TD
339 ><TD
340 >medium</TD
341 ><TD
342 >medium/high</TD
343 ></TR
344 ><TR
345 ><TD
346 >Cookie handling</TD
347 ><TD
348 >none</TD
349 ><TD
350 >session-only</TD
351 ><TD
352 >kill</TD
353 ></TR
354 ><TR
355 ><TD
356 >Referer forging</TD
357 ><TD
358 >no</TD
359 ><TD
360 >yes</TD
361 ><TD
362 >yes</TD
363 ></TR
364 ><TR
365 ><TD
366 >GIF de-animation</TD
367 ><TD
368 >no</TD
369 ><TD
370 >yes</TD
371 ><TD
372 >yes</TD
373 ></TR
374 ><TR
375 ><TD
376 >Fast redirects</TD
377 ><TD
378 >no</TD
379 ><TD
380 >no</TD
381 ><TD
382 >yes</TD
383 ></TR
384 ><TR
385 ><TD
386 >HTML taming</TD
387 ><TD
388 >no</TD
389 ><TD
390 >no</TD
391 ><TD
392 >yes</TD
393 ></TR
394 ><TR
395 ><TD
396 >JavaScript taming</TD
397 ><TD
398 >no</TD
399 ><TD
400 >no</TD
401 ><TD
402 >yes</TD
403 ></TR
404 ><TR
405 ><TD
406 >Web-bug killing</TD
407 ><TD
408 >no</TD
409 ><TD
410 >yes</TD
411 ><TD
412 >yes</TD
413 ></TR
414 ><TR
415 ><TD
416 >Image tag reordering</TD
417 ><TD
418 >no</TD
419 ><TD
420 >no</TD
421 ><TD
422 >yes</TD
423 ></TR
424 ></TBODY
425 ></TABLE
426 ></DIV
427 >
428     </P
429 ></LI
430 ></UL
431 >
432  </P
433 ><P
434 > The list of actions files to be used are defined in the main configuration 
435  file, and are processed in the order they are defined (e.g.
436  <TT
437 CLASS="FILENAME"
438 >default.action</TT
439 > is typically processed before
440  <TT
441 CLASS="FILENAME"
442 >user.action</TT
443 >). The content of these can all be viewed and
444  edited from <A
445 HREF="http://config.privoxy.org/show-status"
446 TARGET="_top"
447 >http://config.privoxy.org/show-status</A
448 >.
449  The over-riding principle when applying actions, is that the last action that
450  matches a given URL wins. The broadest, most general rules go first
451  (defined in <TT
452 CLASS="FILENAME"
453 >default.action</TT
454 >),
455  followed by any exceptions (typically also in
456  <TT
457 CLASS="FILENAME"
458 >default.action</TT
459 >), which are then followed lastly by any
460  local preferences (typically in <SPAN
461 CLASS="emphasis"
462 ><I
463 CLASS="EMPHASIS"
464 >user</I
465 ></SPAN
466 ><TT
467 CLASS="FILENAME"
468 >.action</TT
469 >). 
470  Generally, <TT
471 CLASS="FILENAME"
472 >user.action</TT
473 > has the last word.
474  </P
475 ><P
476 > An actions file typically has multiple sections. If you want to use
477  <SPAN
478 CLASS="QUOTE"
479 >"aliases"</SPAN
480 > in an actions file, you have to place the (optional)
481  <A
482 HREF="actions-file.html#ALIASES"
483 >alias section</A
484 > at the top of that file.
485  Then comes the default set of rules which will apply universally to all
486  sites and pages (be <SPAN
487 CLASS="emphasis"
488 ><I
489 CLASS="EMPHASIS"
490 >very careful</I
491 ></SPAN
492 > with using such a
493  universal set in <TT
494 CLASS="FILENAME"
495 >user.action</TT
496 > or any other actions file after 
497  <TT
498 CLASS="FILENAME"
499 >default.action</TT
500 >, because it will override the result
501  from consulting any previous file). And then below that,
502  exceptions to the defined universal policies. You can regard
503  <TT
504 CLASS="FILENAME"
505 >user.action</TT
506 > as an appendix to <TT
507 CLASS="FILENAME"
508 >default.action</TT
509 >,
510  with the advantage that it is a separate file, which makes preserving your
511  personal settings across <SPAN
512 CLASS="APPLICATION"
513 >Privoxy</SPAN
514 > upgrades easier.</P
515 ><P
516
517  Actions can be used to block anything you want, including ads, banners, or
518  just some obnoxious URL whose content you would rather not see. Cookies can be accepted
519  or rejected, or accepted only during the current browser session (i.e. not
520  written to disk), content can be modified, some JavaScripts tamed, user-tracking
521  fooled, and much more. See below for a <A
522 HREF="actions-file.html#ACTIONS"
523 >complete list
524  of actions</A
525 >.</P
526 ><DIV
527 CLASS="SECT2"
528 ><H2
529 CLASS="SECT2"
530 ><A
531 NAME="AEN2244"
532 >8.1. Finding the Right Mix</A
533 ></H2
534 ><P
535 > Note that some <A
536 HREF="actions-file.html#ACTIONS"
537 >actions</A
538 >, like cookie suppression
539  or script disabling, may render some sites unusable that rely on these
540  techniques to work properly. Finding the right mix of actions is not always easy and
541  certainly a matter of personal taste. And, things can always change, requiring 
542  refinements in the configuration. In general, it can be said that the more
543  <SPAN
544 CLASS="QUOTE"
545 >"aggressive"</SPAN
546 > your default settings (in the top section of the
547  actions file) are, the more exceptions for <SPAN
548 CLASS="QUOTE"
549 >"trusted"</SPAN
550 > sites you
551  will have to make later. If, for example, you want to crunch all cookies per
552  default, you'll have to make exceptions from that rule for sites that you
553  regularly use and that require cookies for actually useful purposes, like maybe
554  your bank, favorite shop, or newspaper.</P
555 ><P
556 > We have tried to provide you with reasonable rules to start from in the
557  distribution actions files. But there is no general rule of thumb on these
558  things. There just are too many variables, and sites are constantly changing.
559  Sooner or later you will want to change the rules (and read this chapter again :).</P
560 ></DIV
561 ><DIV
562 CLASS="SECT2"
563 ><H2
564 CLASS="SECT2"
565 ><A
566 NAME="AEN2251"
567 >8.2. How to Edit</A
568 ></H2
569 ><P
570 > The easiest way to edit the actions files is with a browser by
571  using our browser-based editor, which can be reached from <A
572 HREF="http://config.privoxy.org/show-status"
573 TARGET="_top"
574 >http://config.privoxy.org/show-status</A
575 >.
576  Note: the config file option <A
577 HREF="config.html#ENABLE-EDIT-ACTIONS"
578 >enale-edit-actions</A
579 > must be enabled for
580  this to work. The editor allows both fine-grained control over every single
581  feature on a per-URL basis, and easy choosing from wholesale sets of defaults
582  like <SPAN
583 CLASS="QUOTE"
584 >"Cautious"</SPAN
585 >, <SPAN
586 CLASS="QUOTE"
587 >"Medium"</SPAN
588 > or
589  <SPAN
590 CLASS="QUOTE"
591 >"Advanced"</SPAN
592 >. Warning: the <SPAN
593 CLASS="QUOTE"
594 >"Advanced"</SPAN
595 > setting is more
596  aggressive, and will be more likely to cause problems for some sites.
597  Experienced users only! 
598  </P
599 ><P
600 > If you prefer plain text editing to GUIs, you can of course also directly edit the
601  the actions files with your favorite text editor. Look at
602  <TT
603 CLASS="FILENAME"
604 >default.action</TT
605 > which is richly commented with many 
606  good examples.</P
607 ></DIV
608 ><DIV
609 CLASS="SECT2"
610 ><H2
611 CLASS="SECT2"
612 ><A
613 NAME="ACTIONS-APPLY"
614 >8.3. How Actions are Applied to Requests</A
615 ></H2
616 ><P
617 > Actions files are divided into sections. There are special sections,
618  like the <SPAN
619 CLASS="QUOTE"
620 >"<A
621 HREF="actions-file.html#ALIASES"
622 >alias</A
623 >"</SPAN
624 > sections which will
625  be discussed later. For now let's concentrate on regular sections: They have a
626  heading line (often split up to multiple lines for readability) which consist
627  of a list of actions, separated by whitespace and enclosed in curly braces.
628  Below that, there is a list of URL and tag patterns, each on a separate line.</P
629 ><P
630 > To determine which actions apply to a request, the URL of the request is
631  compared to all URL patterns in each <SPAN
632 CLASS="QUOTE"
633 >"action file"</SPAN
634 >.
635  Every time it matches, the list of applicable actions for the request is
636  incrementally updated, using the heading of the section in which the
637  pattern is located. The same is done again for tags and tag patterns later on.</P
638 ><P
639 > If multiple applying sections set the same action differently,
640  the last match wins. If not, the effects are aggregated.
641  E.g. a URL might match a regular section with a heading line of <TT
642 CLASS="LITERAL"
643 >{ 
644  +<A
645 HREF="actions-file.html#HANDLE-AS-IMAGE"
646 >handle-as-image</A
647 > }</TT
648 >,
649  then later another one with just <TT
650 CLASS="LITERAL"
651 >{
652  +<A
653 HREF="actions-file.html#BLOCK"
654 >block</A
655 > }</TT
656 >, resulting
657  in <SPAN
658 CLASS="emphasis"
659 ><I
660 CLASS="EMPHASIS"
661 >both</I
662 ></SPAN
663 > actions to apply. And there may well be 
664  cases where you will want to combine actions together. Such a section then 
665  might look like:</P
666 ><P
667 > <TABLE
668 BORDER="0"
669 BGCOLOR="#E0E0E0"
670 WIDTH="100%"
671 ><TR
672 ><TD
673 ><PRE
674 CLASS="SCREEN"
675 >  { +<TT
676 CLASS="LITERAL"
677 >handle-as-image</TT
678 >  +<TT
679 CLASS="LITERAL"
680 >block</TT
681 > }
682   # Block these as if they were images. Send no block page.
683    banners.example.com
684    media.example.com/.*banners
685    .example.com/images/ads/</PRE
686 ></TD
687 ></TR
688 ></TABLE
689 >
690  </P
691 ><P
692 > You can trace this process for URL patterns and any given URL by visiting <A
693 HREF="http://config.privoxy.org/show-url-info"
694 TARGET="_top"
695 >http://config.privoxy.org/show-url-info</A
696 >.</P
697 ><P
698 > Examples and more detail on this is provided in the Appendix, <A
699 HREF="appendix.html#ACTIONSANAT"
700 > Troubleshooting: Anatomy of an Action</A
701 > section.</P
702 ></DIV
703 ><DIV
704 CLASS="SECT2"
705 ><H2
706 CLASS="SECT2"
707 ><A
708 NAME="AF-PATTERNS"
709 >8.4. Patterns</A
710 ></H2
711 ><P
712
713  As mentioned, <SPAN
714 CLASS="APPLICATION"
715 >Privoxy</SPAN
716 > uses <SPAN
717 CLASS="QUOTE"
718 >"patterns"</SPAN
719 >
720  to determine what <SPAN
721 CLASS="emphasis"
722 ><I
723 CLASS="EMPHASIS"
724 >actions</I
725 ></SPAN
726 > might apply to which sites and
727  pages your browser attempts to access. These <SPAN
728 CLASS="QUOTE"
729 >"patterns"</SPAN
730 > use wild
731  card type <SPAN
732 CLASS="emphasis"
733 ><I
734 CLASS="EMPHASIS"
735 >pattern</I
736 ></SPAN
737 > matching to achieve a high degree of
738  flexibility. This allows one expression to be expanded and potentially match
739  against many similar patterns.</P
740 ><P
741 > Generally, an URL pattern has the form
742  <TT
743 CLASS="LITERAL"
744 >&#60;domain&#62;/&#60;path&#62;</TT
745 >, where both the
746  <TT
747 CLASS="LITERAL"
748 >&#60;domain&#62;</TT
749 > and <TT
750 CLASS="LITERAL"
751 >&#60;path&#62;</TT
752 > are
753  optional. (This is why the special <TT
754 CLASS="LITERAL"
755 >/</TT
756 > pattern matches all
757  URLs). Note that the protocol portion of the URL pattern (e.g.
758  <TT
759 CLASS="LITERAL"
760 >http://</TT
761 >) should <SPAN
762 CLASS="emphasis"
763 ><I
764 CLASS="EMPHASIS"
765 >not</I
766 ></SPAN
767 > be included in
768  the pattern. This is assumed already!</P
769 ><P
770 > The pattern matching syntax is different for the domain and path parts of
771  the URL. The domain part uses a simple globbing type matching technique, 
772  while the path part uses a more flexible 
773  <A
774 HREF="http://en.wikipedia.org/wiki/Regular_expressions"
775 TARGET="_top"
776 ><SPAN
777 CLASS="QUOTE"
778 >"Regular
779   Expressions (PCRE)"</SPAN
780 ></A
781 > based syntax.</P
782 ><P
783 ></P
784 ><DIV
785 CLASS="VARIABLELIST"
786 ><DL
787 ><DT
788 ><TT
789 CLASS="LITERAL"
790 >www.example.com/</TT
791 ></DT
792 ><DD
793 ><P
794 >    is a domain-only pattern and will match any request to <TT
795 CLASS="LITERAL"
796 >www.example.com</TT
797 >,
798     regardless of which document on that server is requested. So ALL pages in
799     this domain would be covered by the scope of this action. Note that a 
800     simple <TT
801 CLASS="LITERAL"
802 >example.com</TT
803 > is different and would NOT match.
804    </P
805 ></DD
806 ><DT
807 ><TT
808 CLASS="LITERAL"
809 >www.example.com</TT
810 ></DT
811 ><DD
812 ><P
813 >    means exactly the same. For domain-only patterns, the trailing <TT
814 CLASS="LITERAL"
815 >/</TT
816 > may
817     be omitted.
818    </P
819 ></DD
820 ><DT
821 ><TT
822 CLASS="LITERAL"
823 >www.example.com/index.html$</TT
824 ></DT
825 ><DD
826 ><P
827 >    matches all the documents on <TT
828 CLASS="LITERAL"
829 >www.example.com</TT
830 >
831     whose name starts with <TT
832 CLASS="LITERAL"
833 >/index.html</TT
834 >.
835    </P
836 ></DD
837 ><DT
838 ><TT
839 CLASS="LITERAL"
840 >www.example.com/index.html$</TT
841 ></DT
842 ><DD
843 ><P
844 >    matches only the single document <TT
845 CLASS="LITERAL"
846 >/index.html</TT
847 >
848     on <TT
849 CLASS="LITERAL"
850 >www.example.com</TT
851 >.
852    </P
853 ></DD
854 ><DT
855 ><TT
856 CLASS="LITERAL"
857 >/index.html$</TT
858 ></DT
859 ><DD
860 ><P
861 >    matches the document <TT
862 CLASS="LITERAL"
863 >/index.html</TT
864 >, regardless of the domain,
865     i.e. on <SPAN
866 CLASS="emphasis"
867 ><I
868 CLASS="EMPHASIS"
869 >any</I
870 ></SPAN
871 > web server anywhere.
872    </P
873 ></DD
874 ><DT
875 ><TT
876 CLASS="LITERAL"
877 >index.html</TT
878 ></DT
879 ><DD
880 ><P
881 >    matches nothing, since it would be interpreted as a domain name and
882     there is no top-level domain called <TT
883 CLASS="LITERAL"
884 >.html</TT
885 >. So its 
886     a mistake.
887    </P
888 ></DD
889 ></DL
890 ></DIV
891 ><DIV
892 CLASS="SECT3"
893 ><H3
894 CLASS="SECT3"
895 ><A
896 NAME="AEN2342"
897 >8.4.1. The Domain Pattern</A
898 ></H3
899 ><P
900 > The matching of the domain part offers some flexible options: if the
901  domain starts or ends with a dot, it becomes unanchored at that end. 
902  For example:</P
903 ><P
904 ></P
905 ><DIV
906 CLASS="VARIABLELIST"
907 ><DL
908 ><DT
909 ><TT
910 CLASS="LITERAL"
911 >.example.com</TT
912 ></DT
913 ><DD
914 ><P
915 >    matches any domain that <SPAN
916 CLASS="emphasis"
917 ><I
918 CLASS="EMPHASIS"
919 >ENDS</I
920 ></SPAN
921 > in
922     <TT
923 CLASS="LITERAL"
924 >.example.com</TT
925 >
926    </P
927 ></DD
928 ><DT
929 ><TT
930 CLASS="LITERAL"
931 >www.</TT
932 ></DT
933 ><DD
934 ><P
935 >    matches any domain that <SPAN
936 CLASS="emphasis"
937 ><I
938 CLASS="EMPHASIS"
939 >STARTS</I
940 ></SPAN
941 > with
942     <TT
943 CLASS="LITERAL"
944 >www.</TT
945 >
946    </P
947 ></DD
948 ><DT
949 ><TT
950 CLASS="LITERAL"
951 >.example.</TT
952 ></DT
953 ><DD
954 ><P
955 >    matches any domain that <SPAN
956 CLASS="emphasis"
957 ><I
958 CLASS="EMPHASIS"
959 >CONTAINS</I
960 ></SPAN
961 > <TT
962 CLASS="LITERAL"
963 >.example.</TT
964 >.
965     And, by the way, also included would be any files or documents that exist
966     within that domain since no path limitations are specified. (Correctly
967     speaking: It matches any FQDN that contains <TT
968 CLASS="LITERAL"
969 >example</TT
970 > as
971     a domain.) This might be <TT
972 CLASS="LITERAL"
973 >www.example.com</TT
974 >,
975     <TT
976 CLASS="LITERAL"
977 >news.example.de</TT
978 >, or
979     <TT
980 CLASS="LITERAL"
981 >www.example.net/cgi/testing.pl</TT
982 > for instance. All these
983     cases are matched. 
984    </P
985 ></DD
986 ></DL
987 ></DIV
988 ><P
989 > Additionally, there are wild-cards that you can use in the domain names
990  themselves. These work similarly to shell globbing type wild-cards:
991  <SPAN
992 CLASS="QUOTE"
993 >"*"</SPAN
994 > represents zero or more arbitrary characters (this is
995  equivalent to the 
996  <A
997 HREF="http://en.wikipedia.org/wiki/Regular_expressions"
998 TARGET="_top"
999 ><SPAN
1000 CLASS="QUOTE"
1001 >"Regular
1002  Expression"</SPAN
1003 ></A
1004 > based syntax of <SPAN
1005 CLASS="QUOTE"
1006 >".*"</SPAN
1007 >),
1008  <SPAN
1009 CLASS="QUOTE"
1010 >"?"</SPAN
1011 >  represents any single character (this is equivalent to the
1012  regular expression syntax of a simple <SPAN
1013 CLASS="QUOTE"
1014 >"."</SPAN
1015 >), and you can define
1016  <SPAN
1017 CLASS="QUOTE"
1018 >"character classes"</SPAN
1019 > in square brackets which is similar to 
1020  the same regular expression technique. All of this can be freely mixed:</P
1021 ><P
1022 ></P
1023 ><DIV
1024 CLASS="VARIABLELIST"
1025 ><DL
1026 ><DT
1027 ><TT
1028 CLASS="LITERAL"
1029 >ad*.example.com</TT
1030 ></DT
1031 ><DD
1032 ><P
1033 >    matches <SPAN
1034 CLASS="QUOTE"
1035 >"adserver.example.com"</SPAN
1036 >, 
1037     <SPAN
1038 CLASS="QUOTE"
1039 >"ads.example.com"</SPAN
1040 >, etc but not <SPAN
1041 CLASS="QUOTE"
1042 >"sfads.example.com"</SPAN
1043 >
1044    </P
1045 ></DD
1046 ><DT
1047 ><TT
1048 CLASS="LITERAL"
1049 >*ad*.example.com</TT
1050 ></DT
1051 ><DD
1052 ><P
1053 >    matches all of the above, and then some.
1054    </P
1055 ></DD
1056 ><DT
1057 ><TT
1058 CLASS="LITERAL"
1059 >.?pix.com</TT
1060 ></DT
1061 ><DD
1062 ><P
1063 >    matches <TT
1064 CLASS="LITERAL"
1065 >www.ipix.com</TT
1066 >,
1067     <TT
1068 CLASS="LITERAL"
1069 >pictures.epix.com</TT
1070 >, <TT
1071 CLASS="LITERAL"
1072 >a.b.c.d.e.upix.com</TT
1073 > etc. 
1074    </P
1075 ></DD
1076 ><DT
1077 ><TT
1078 CLASS="LITERAL"
1079 >www[1-9a-ez].example.c*</TT
1080 ></DT
1081 ><DD
1082 ><P
1083 >     matches <TT
1084 CLASS="LITERAL"
1085 >www1.example.com</TT
1086 >, 
1087      <TT
1088 CLASS="LITERAL"
1089 >www4.example.cc</TT
1090 >, <TT
1091 CLASS="LITERAL"
1092 >wwwd.example.cy</TT
1093 >, 
1094      <TT
1095 CLASS="LITERAL"
1096 >wwwz.example.com</TT
1097 > etc., but <SPAN
1098 CLASS="emphasis"
1099 ><I
1100 CLASS="EMPHASIS"
1101 >not</I
1102 ></SPAN
1103
1104      <TT
1105 CLASS="LITERAL"
1106 >wwww.example.com</TT
1107 >.
1108    </P
1109 ></DD
1110 ></DL
1111 ></DIV
1112 ><P
1113 > While flexible, this is not the sophistication of full regular expression based syntax.</P
1114 ></DIV
1115 ><DIV
1116 CLASS="SECT3"
1117 ><H3
1118 CLASS="SECT3"
1119 ><A
1120 NAME="AEN2413"
1121 >8.4.2. The Path Pattern</A
1122 ></H3
1123 ><P
1124 > <SPAN
1125 CLASS="APPLICATION"
1126 >Privoxy</SPAN
1127 > uses Perl compatible (PCRE)
1128   <A
1129 HREF="http://en.wikipedia.org/wiki/Regular_expressions"
1130 TARGET="_top"
1131 ><SPAN
1132 CLASS="QUOTE"
1133 >"Regular
1134   Expression"</SPAN
1135 ></A
1136 > based syntax 
1137  (through the <A
1138 HREF="http://www.pcre.org/"
1139 TARGET="_top"
1140 >PCRE</A
1141 > library) for
1142  matching the path portion (after the slash), and is thus more flexible.</P
1143 ><P
1144 > There is an <A
1145 HREF="appendix.html#REGEX"
1146 >Appendix</A
1147 > with a brief quick-start into regular
1148  expressions, and full (very technical) documentation on PCRE regex syntax is available on-line
1149  at <A
1150 HREF="http://www.pcre.org/man.txt"
1151 TARGET="_top"
1152 >http://www.pcre.org/man.txt</A
1153 >.
1154  You might also find the Perl man page on regular expressions (<TT
1155 CLASS="LITERAL"
1156 >man perlre</TT
1157 >)
1158  useful, which is available on-line at <A
1159 HREF="http://perldoc.perl.org/perlre.html"
1160 TARGET="_top"
1161 >http://perldoc.perl.org/perlre.html</A
1162 >.</P
1163 ><P
1164 > Note that the path pattern is automatically left-anchored at the <SPAN
1165 CLASS="QUOTE"
1166 >"/"</SPAN
1167 >,
1168  i.e. it matches as if it would start with a <SPAN
1169 CLASS="QUOTE"
1170 >"^"</SPAN
1171 > (regular expression speak 
1172  for the beginning of a line).</P
1173 ><P
1174 > Please also note that matching in the path is <SPAN
1175 CLASS="emphasis"
1176 ><I
1177 CLASS="EMPHASIS"
1178 >CASE INSENSITIVE</I
1179 ></SPAN
1180 >
1181  by default, but you can switch to case sensitive at any point in the pattern by using the 
1182  <SPAN
1183 CLASS="QUOTE"
1184 >"(?-i)"</SPAN
1185 > switch: <TT
1186 CLASS="LITERAL"
1187 >www.example.com/(?-i)PaTtErN.*</TT
1188 > will match
1189  only documents whose path starts with <TT
1190 CLASS="LITERAL"
1191 >PaTtErN</TT
1192 > in
1193  <SPAN
1194 CLASS="emphasis"
1195 ><I
1196 CLASS="EMPHASIS"
1197 >exactly</I
1198 ></SPAN
1199 > this capitalization.</P
1200 ><P
1201 ></P
1202 ><DIV
1203 CLASS="VARIABLELIST"
1204 ><DL
1205 ><DT
1206 ><TT
1207 CLASS="LITERAL"
1208 >.example.com/.*</TT
1209 ></DT
1210 ><DD
1211 ><P
1212 >     Is equivalent to just <SPAN
1213 CLASS="QUOTE"
1214 >".example.com"</SPAN
1215 >, since any documents 
1216      within that domain are matched with or without the <SPAN
1217 CLASS="QUOTE"
1218 >".*"</SPAN
1219 >
1220      regular expression. This is redundant
1221    </P
1222 ></DD
1223 ><DT
1224 ><TT
1225 CLASS="LITERAL"
1226 >.example.com/.*/index.html$</TT
1227 ></DT
1228 ><DD
1229 ><P
1230 >    Will match any page in the domain of <SPAN
1231 CLASS="QUOTE"
1232 >"example.com"</SPAN
1233 > that is
1234     named <SPAN
1235 CLASS="QUOTE"
1236 >"index.html"</SPAN
1237 >, and that is part of some path. For
1238     example, it matches <SPAN
1239 CLASS="QUOTE"
1240 >"www.example.com/testing/index.html"</SPAN
1241 > but
1242     NOT <SPAN
1243 CLASS="QUOTE"
1244 >"www.example.com/index.html"</SPAN
1245 > because the regular
1246     expression called for at least two <SPAN
1247 CLASS="QUOTE"
1248 >"/'s"</SPAN
1249 >, thus the path 
1250     requirement. It also would match 
1251     <SPAN
1252 CLASS="QUOTE"
1253 >"www.example.com/testing/index_html"</SPAN
1254 >, because of the 
1255     special meta-character <SPAN
1256 CLASS="QUOTE"
1257 >"."</SPAN
1258 >.
1259    </P
1260 ></DD
1261 ><DT
1262 ><TT
1263 CLASS="LITERAL"
1264 >.example.com/(.*/)?index\.html$</TT
1265 ></DT
1266 ><DD
1267 ><P
1268 >    This regular expression is conditional so it will match any page 
1269     named <SPAN
1270 CLASS="QUOTE"
1271 >"index.html"</SPAN
1272 > regardless of path which in this case can 
1273     have one or more <SPAN
1274 CLASS="QUOTE"
1275 >"/'s"</SPAN
1276 >. And this one must contain exactly 
1277     <SPAN
1278 CLASS="QUOTE"
1279 >".html"</SPAN
1280 > (but does not have to end with that!).
1281    </P
1282 ></DD
1283 ><DT
1284 ><TT
1285 CLASS="LITERAL"
1286 >.example.com/(.*/)(ads|banners?|junk)</TT
1287 ></DT
1288 ><DD
1289 ><P
1290 >    This regular expression will match any path of <SPAN
1291 CLASS="QUOTE"
1292 >"example.com"</SPAN
1293 >
1294     that contains any of the words <SPAN
1295 CLASS="QUOTE"
1296 >"ads"</SPAN
1297 >, <SPAN
1298 CLASS="QUOTE"
1299 >"banner"</SPAN
1300 >, 
1301     <SPAN
1302 CLASS="QUOTE"
1303 >"banners"</SPAN
1304 > (because of the <SPAN
1305 CLASS="QUOTE"
1306 >"?"</SPAN
1307 >) or <SPAN
1308 CLASS="QUOTE"
1309 >"junk"</SPAN
1310 >.
1311     The path does not have to end in these words, just contain them.
1312    </P
1313 ></DD
1314 ><DT
1315 ><TT
1316 CLASS="LITERAL"
1317 >.example.com/(.*/)(ads|banners?|junk)/.*\.(jpe?g|gif|png)$</TT
1318 ></DT
1319 ><DD
1320 ><P
1321 >    This is very much the same as above, except now it must end in either 
1322     <SPAN
1323 CLASS="QUOTE"
1324 >".jpg"</SPAN
1325 >, <SPAN
1326 CLASS="QUOTE"
1327 >".jpeg"</SPAN
1328 >, <SPAN
1329 CLASS="QUOTE"
1330 >".gif"</SPAN
1331 > or <SPAN
1332 CLASS="QUOTE"
1333 >".png"</SPAN
1334 >. So this 
1335     one is limited to common image formats.
1336    </P
1337 ></DD
1338 ></DL
1339 ></DIV
1340 ><P
1341 > There are many, many good examples to be found in <TT
1342 CLASS="FILENAME"
1343 >default.action</TT
1344 >, 
1345  and more tutorials below in <A
1346 HREF="appendix.html#REGEX"
1347 >Appendix on regular expressions</A
1348 >.</P
1349 ></DIV
1350 ><DIV
1351 CLASS="SECT3"
1352 ><H3
1353 CLASS="SECT3"
1354 ><A
1355 NAME="TAG-PATTERN"
1356 >8.4.3. The Tag Pattern</A
1357 ></H3
1358 ><P
1359 > Tag patterns are used to change the applying actions based on the
1360  request's tags. Tags can be created with either the
1361  <A
1362 HREF="actions-file.html#CLIENT-HEADER-TAGGER"
1363 >client-header-tagger</A
1364 >
1365  or the  <A
1366 HREF="actions-file.html#SERVER-HEADER-TAGGER"
1367 >server-header-tagger</A
1368 > action.</P
1369 ><P
1370 > Tag patterns have to start with <SPAN
1371 CLASS="QUOTE"
1372 >"TAG:"</SPAN
1373 >, so <SPAN
1374 CLASS="APPLICATION"
1375 >Privoxy</SPAN
1376 >
1377  can tell them apart from URL patterns. Everything after the colon
1378  including white space, is interpreted as a regular expression with
1379  path pattern syntax, except that tag patterns aren't left-anchored
1380  automatically (Privoxy doesn't silently add a <SPAN
1381 CLASS="QUOTE"
1382 >"^"</SPAN
1383 >,
1384  you have to do it yourself if you need it).</P
1385 ><P
1386 > To match all requests that are tagged with <SPAN
1387 CLASS="QUOTE"
1388 >"foo"</SPAN
1389 >
1390  your pattern line should be <SPAN
1391 CLASS="QUOTE"
1392 >"TAG:^foo$"</SPAN
1393 >,
1394  <SPAN
1395 CLASS="QUOTE"
1396 >"TAG:foo"</SPAN
1397 > would work as well, but it would also
1398  match requests whose tags contain <SPAN
1399 CLASS="QUOTE"
1400 >"foo"</SPAN
1401 > somewhere.
1402  <SPAN
1403 CLASS="QUOTE"
1404 >"TAG: foo"</SPAN
1405 > wouldn't work as it requires white space.</P
1406 ><P
1407 > Sections can contain URL and tag patterns at the same time,
1408  but tag patterns are checked after the URL patterns and thus
1409  always overrule them, even if they are located before the URL patterns.</P
1410 ><P
1411 > Once a new tag is added, Privoxy checks right away if it's matched by one
1412  of the tag patterns and updates the action settings accordingly. As a result
1413  tags can be used to activate other tagger actions, as long as these other
1414  taggers look for headers that haven't already be parsed.</P
1415 ><P
1416 > For example you could tag client requests which use the POST method,
1417  use this tag to activate another tagger that adds a tag if cookies
1418  are send, and then block based on the cookie tag. However if you'd
1419  reverse the position of the described taggers, and activated the method
1420  tagger based on the cookie tagger, no method tags would be created.
1421  The method tagger would look for the request line, but at the time
1422  the cookie tag is created the request line has already been parsed.</P
1423 ><P
1424 > While this is a limitation you should be aware of, this kind of
1425  indirection is seldom needed anyway and even the example doesn't
1426  make too much sense.</P
1427 ></DIV
1428 ></DIV
1429 ><DIV
1430 CLASS="SECT2"
1431 ><H2
1432 CLASS="SECT2"
1433 ><A
1434 NAME="ACTIONS"
1435 >8.5. Actions</A
1436 ></H2
1437 ><P
1438 > All actions are disabled by default, until they are explicitly enabled
1439  somewhere in an actions file. Actions are turned on if preceded with a
1440  <SPAN
1441 CLASS="QUOTE"
1442 >"+"</SPAN
1443 >, and turned off if preceded with a <SPAN
1444 CLASS="QUOTE"
1445 >"-"</SPAN
1446 >. So a
1447  <TT
1448 CLASS="LITERAL"
1449 >+action</TT
1450 > means <SPAN
1451 CLASS="QUOTE"
1452 >"do that action"</SPAN
1453 >, e.g.
1454  <TT
1455 CLASS="LITERAL"
1456 >+block</TT
1457 > means <SPAN
1458 CLASS="QUOTE"
1459 >"please block URLs that match the
1460  following patterns"</SPAN
1461 >, and <TT
1462 CLASS="LITERAL"
1463 >-block</TT
1464 > means <SPAN
1465 CLASS="QUOTE"
1466 >"don't
1467  block URLs that match the following patterns, even if <TT
1468 CLASS="LITERAL"
1469 >+block</TT
1470 >
1471  previously applied."</SPAN
1472 >&#13;</P
1473 ><P
1474
1475  Again, actions are invoked by placing them on a line, enclosed in curly braces and
1476  separated by whitespace, like in 
1477  <TT
1478 CLASS="LITERAL"
1479 >{+some-action -some-other-action{some-parameter}}</TT
1480 >,
1481  followed by a list of URL patterns, one per line, to which they apply.
1482  Together, the actions line and the following pattern lines make up a section
1483  of the actions file. </P
1484 ><P
1485
1486  Actions fall into three categories:</P
1487 ><P
1488 > <P
1489 ></P
1490 ><UL
1491 ><LI
1492 ><P
1493 >  
1494    Boolean, i.e the action can only be <SPAN
1495 CLASS="QUOTE"
1496 >"enabled"</SPAN
1497 > or
1498    <SPAN
1499 CLASS="QUOTE"
1500 >"disabled"</SPAN
1501 >. Syntax:
1502   </P
1503 ><P
1504 >   <TABLE
1505 BORDER="0"
1506 BGCOLOR="#E0E0E0"
1507 WIDTH="90%"
1508 ><TR
1509 ><TD
1510 ><PRE
1511 CLASS="SCREEN"
1512 >  +<TT
1513 CLASS="REPLACEABLE"
1514 ><I
1515 >name</I
1516 ></TT
1517 >        # enable action <TT
1518 CLASS="REPLACEABLE"
1519 ><I
1520 >name</I
1521 ></TT
1522 >
1523   -<TT
1524 CLASS="REPLACEABLE"
1525 ><I
1526 >name</I
1527 ></TT
1528 >        # disable action <TT
1529 CLASS="REPLACEABLE"
1530 ><I
1531 >name</I
1532 ></TT
1533 ></PRE
1534 ></TD
1535 ></TR
1536 ></TABLE
1537 >
1538   </P
1539 ><P
1540 >  
1541    Example: <TT
1542 CLASS="LITERAL"
1543 >+block</TT
1544 >
1545   </P
1546 ></LI
1547 ><LI
1548 ><P
1549 >  
1550    Parameterized, where some value is required in order to enable this type of action.
1551    Syntax:
1552   </P
1553 ><P
1554 >   <TABLE
1555 BORDER="0"
1556 BGCOLOR="#E0E0E0"
1557 WIDTH="90%"
1558 ><TR
1559 ><TD
1560 ><PRE
1561 CLASS="SCREEN"
1562 >  +<TT
1563 CLASS="REPLACEABLE"
1564 ><I
1565 >name</I
1566 ></TT
1567 >{<TT
1568 CLASS="REPLACEABLE"
1569 ><I
1570 >param</I
1571 ></TT
1572 >}  # enable action and set parameter to <TT
1573 CLASS="REPLACEABLE"
1574 ><I
1575 >param</I
1576 ></TT
1577 >,
1578                # overwriting parameter from previous match if necessary
1579   -<TT
1580 CLASS="REPLACEABLE"
1581 ><I
1582 >name</I
1583 ></TT
1584 >         # disable action. The parameter can be omitted</PRE
1585 ></TD
1586 ></TR
1587 ></TABLE
1588 >
1589   </P
1590 ><P
1591 >   Note that if the URL matches multiple positive forms of a parameterized action,
1592    the last match wins, i.e. the params from earlier matches are simply ignored.
1593   </P
1594 ><P
1595 >  
1596    Example: <TT
1597 CLASS="LITERAL"
1598 >+hide-user-agent{Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.8.1.4) Gecko/20070602 Firefox/2.0.0.4}</TT
1599 >
1600   </P
1601 ></LI
1602 ><LI
1603 ><P
1604 >  
1605    Multi-value. These look exactly like parameterized actions,
1606    but they behave differently: If the action applies multiple times to the
1607    same URL, but with different parameters, <SPAN
1608 CLASS="emphasis"
1609 ><I
1610 CLASS="EMPHASIS"
1611 >all</I
1612 ></SPAN
1613 > the parameters
1614    from <SPAN
1615 CLASS="emphasis"
1616 ><I
1617 CLASS="EMPHASIS"
1618 >all</I
1619 ></SPAN
1620 > matches are remembered. This is used for actions
1621    that can be executed for the same request repeatedly, like adding multiple
1622    headers, or filtering through multiple filters. Syntax:
1623   </P
1624 ><P
1625 >   <TABLE
1626 BORDER="0"
1627 BGCOLOR="#E0E0E0"
1628 WIDTH="90%"
1629 ><TR
1630 ><TD
1631 ><PRE
1632 CLASS="SCREEN"
1633 >  +<TT
1634 CLASS="REPLACEABLE"
1635 ><I
1636 >name</I
1637 ></TT
1638 >{<TT
1639 CLASS="REPLACEABLE"
1640 ><I
1641 >param</I
1642 ></TT
1643 >}   # enable action and add <TT
1644 CLASS="REPLACEABLE"
1645 ><I
1646 >param</I
1647 ></TT
1648 > to the list of parameters
1649   -<TT
1650 CLASS="REPLACEABLE"
1651 ><I
1652 >name</I
1653 ></TT
1654 >{<TT
1655 CLASS="REPLACEABLE"
1656 ><I
1657 >param</I
1658 ></TT
1659 >}   # remove the parameter <TT
1660 CLASS="REPLACEABLE"
1661 ><I
1662 >param</I
1663 ></TT
1664 > from the list of parameters
1665                 # If it was the last one left, disable the action.
1666   <TT
1667 CLASS="REPLACEABLE"
1668 ><I
1669 >-name</I
1670 ></TT
1671 >          # disable this action completely and remove all parameters from the list</PRE
1672 ></TD
1673 ></TR
1674 ></TABLE
1675 >
1676   </P
1677 ><P
1678 >  
1679    Examples: <TT
1680 CLASS="LITERAL"
1681 >+add-header{X-Fun-Header: Some text}</TT
1682 > and
1683    <TT
1684 CLASS="LITERAL"
1685 >+filter{html-annoyances}</TT
1686 >
1687   </P
1688 ></LI
1689 ></UL
1690 ></P
1691 ><P
1692 > If nothing is specified in any actions file, no <SPAN
1693 CLASS="QUOTE"
1694 >"actions"</SPAN
1695 > are
1696  taken. So in this case <SPAN
1697 CLASS="APPLICATION"
1698 >Privoxy</SPAN
1699 > would just be a
1700  normal, non-blocking, non-filtering proxy. You must specifically enable the
1701  privacy and blocking features you need (although the provided default actions
1702  files will give a good starting point).</P
1703 ><P
1704 > Later defined action sections always over-ride earlier ones of the same type.
1705  So exceptions to any rules you make, should come in the latter part of the file (or 
1706  in a file that is processed later when using multiple actions files such 
1707  as <TT
1708 CLASS="FILENAME"
1709 >user.action</TT
1710 >). For multi-valued actions, the actions
1711  are applied in the order they are specified. Actions files are processed in
1712  the order they are defined in <TT
1713 CLASS="FILENAME"
1714 >config</TT
1715 > (the default
1716  installation has three actions files). It also quite possible for any given
1717  URL to match more than one <SPAN
1718 CLASS="QUOTE"
1719 >"pattern"</SPAN
1720 > (because of wildcards and
1721  regular expressions), and thus to trigger more than one set of actions! Last
1722  match wins.</P
1723 ><P
1724 > The list of valid <SPAN
1725 CLASS="APPLICATION"
1726 >Privoxy</SPAN
1727 > actions are:</P
1728 ><DIV
1729 CLASS="SECT3"
1730 ><H4
1731 CLASS="SECT3"
1732 ><A
1733 NAME="ADD-HEADER"
1734 >8.5.1. add-header</A
1735 ></H4
1736 ><P
1737 ></P
1738 ><DIV
1739 CLASS="VARIABLELIST"
1740 ><DL
1741 ><DT
1742 >Typical use:</DT
1743 ><DD
1744 ><P
1745 >Confuse log analysis, custom applications</P
1746 ></DD
1747 ><DT
1748 >Effect:</DT
1749 ><DD
1750 ><P
1751 >    Sends a user defined HTTP header to the web server.
1752    </P
1753 ></DD
1754 ><DT
1755 >Type:</DT
1756 ><DD
1757 ><P
1758 >Multi-value.</P
1759 ></DD
1760 ><DT
1761 >Parameter:</DT
1762 ><DD
1763 ><P
1764 >    Any string value is possible. Validity of the defined HTTP headers is not checked.
1765     It is recommended that you use the <SPAN
1766 CLASS="QUOTE"
1767 >"<TT
1768 CLASS="LITERAL"
1769 >X-</TT
1770 >"</SPAN
1771 > prefix
1772     for custom headers.
1773    </P
1774 ></DD
1775 ><DT
1776 >Notes:</DT
1777 ><DD
1778 ><P
1779 >    This action may be specified multiple times, in order to define multiple 
1780     headers. This is rarely needed for the typical user. If you don't know what 
1781     <SPAN
1782 CLASS="QUOTE"
1783 >"HTTP headers"</SPAN
1784 > are, you definitely don't need to worry about this 
1785     one.
1786    </P
1787 ></DD
1788 ><DT
1789 >Example usage:</DT
1790 ><DD
1791 ><P
1792 >     <TABLE
1793 BORDER="0"
1794 BGCOLOR="#E0E0E0"
1795 WIDTH="90%"
1796 ><TR
1797 ><TD
1798 ><PRE
1799 CLASS="SCREEN"
1800 >+add-header{X-User-Tracking: sucks}</PRE
1801 ></TD
1802 ></TR
1803 ></TABLE
1804 >
1805    </P
1806 ></DD
1807 ></DL
1808 ></DIV
1809 ></DIV
1810 ><DIV
1811 CLASS="SECT3"
1812 ><H4
1813 CLASS="SECT3"
1814 ><A
1815 NAME="BLOCK"
1816 >8.5.2. block</A
1817 ></H4
1818 ><P
1819 ></P
1820 ><DIV
1821 CLASS="VARIABLELIST"
1822 ><DL
1823 ><DT
1824 >Typical use:</DT
1825 ><DD
1826 ><P
1827 >Block ads or other unwanted content</P
1828 ></DD
1829 ><DT
1830 >Effect:</DT
1831 ><DD
1832 ><P
1833 >    Requests for URLs to which this action applies are blocked, i.e. the
1834     requests are trapped by <SPAN
1835 CLASS="APPLICATION"
1836 >Privoxy</SPAN
1837 > and the requested URL is never retrieved,
1838     but is answered locally with a substitute page or image, as determined by
1839     the <TT
1840 CLASS="LITERAL"
1841 ><A
1842 HREF="actions-file.html#HANDLE-AS-IMAGE"
1843 >handle-as-image</A
1844 ></TT
1845 >,
1846     <TT
1847 CLASS="LITERAL"
1848 ><A
1849 HREF="actions-file.html#SET-IMAGE-BLOCKER"
1850 >set-image-blocker</A
1851 ></TT
1852 >, and 
1853     <TT
1854 CLASS="LITERAL"
1855 ><A
1856 HREF="actions-file.html#HANDLE-AS-EMPTY-DOCUMENT"
1857 >handle-as-empty-document</A
1858 ></TT
1859 > actions.
1860     
1861    </P
1862 ></DD
1863 ><DT
1864 >Type:</DT
1865 ><DD
1866 ><P
1867 >Boolean.</P
1868 ></DD
1869 ><DT
1870 >Parameter:</DT
1871 ><DD
1872 ><P
1873 >N/A</P
1874 ></DD
1875 ><DT
1876 >Notes:</DT
1877 ><DD
1878 ><P
1879 >    <SPAN
1880 CLASS="APPLICATION"
1881 >Privoxy</SPAN
1882 > sends a special <SPAN
1883 CLASS="QUOTE"
1884 >"BLOCKED"</SPAN
1885 > page
1886     for requests to blocked pages. This page contains links to find out why the request
1887     was blocked, and a click-through to the blocked content (the latter only if compiled with the
1888     force feature enabled). The <SPAN
1889 CLASS="QUOTE"
1890 >"BLOCKED"</SPAN
1891 > page adapts to the available
1892     screen space -- it displays full-blown if space allows, or miniaturized and text-only
1893     if loaded into a small frame or window. If you are using <SPAN
1894 CLASS="APPLICATION"
1895 >Privoxy</SPAN
1896 >
1897     right now, you can take a look at the 
1898     <A
1899 HREF="http://ads.bannerserver.example.com/nasty-ads/sponsor.html"
1900 TARGET="_top"
1901 ><SPAN
1902 CLASS="QUOTE"
1903 >"BLOCKED"</SPAN
1904 >
1905     page</A
1906 >.
1907    </P
1908 ><P
1909
1910     A very important exception occurs if <SPAN
1911 CLASS="emphasis"
1912 ><I
1913 CLASS="EMPHASIS"
1914 >both</I
1915 ></SPAN
1916
1917     <TT
1918 CLASS="LITERAL"
1919 >block</TT
1920 > and <TT
1921 CLASS="LITERAL"
1922 ><A
1923 HREF="actions-file.html#HANDLE-AS-IMAGE"
1924 >handle-as-image</A
1925 ></TT
1926 >,
1927     apply to the same request: it will then be replaced by an image. If 
1928     <TT
1929 CLASS="LITERAL"
1930 ><A
1931 HREF="actions-file.html#SET-IMAGE-BLOCKER"
1932 >set-image-blocker</A
1933 ></TT
1934 >
1935     (see below) also applies, the type of image will be determined by its parameter,
1936     if not, the standard checkerboard pattern is sent.
1937    </P
1938 ><P
1939 >    It is important to understand this process, in order 
1940     to understand how <SPAN
1941 CLASS="APPLICATION"
1942 >Privoxy</SPAN
1943 > deals with 
1944     ads and other unwanted content. Blocking is a core feature, and one 
1945     upon which various other features depend.
1946    </P
1947 ><P
1948 >    The <TT
1949 CLASS="LITERAL"
1950 ><A
1951 HREF="actions-file.html#FILTER"
1952 >filter</A
1953 ></TT
1954 >
1955     action can perform a very similar task, by <SPAN
1956 CLASS="QUOTE"
1957 >"blocking"</SPAN
1958 >
1959     banner images and other content through rewriting the relevant URLs in the
1960     document's HTML source, so they don't get requested in the first place.
1961     Note that this is a totally different technique, and it's easy to confuse the two.
1962    </P
1963 ></DD
1964 ><DT
1965 >Example usage (section):</DT
1966 ><DD
1967 ><P
1968 >     <TABLE
1969 BORDER="0"
1970 BGCOLOR="#E0E0E0"
1971 WIDTH="90%"
1972 ><TR
1973 ><TD
1974 ><PRE
1975 CLASS="SCREEN"
1976 >{+block}      
1977 # Block and replace with "blocked" page
1978  .nasty-stuff.example.com
1979
1980 {+block +handle-as-image} 
1981 # Block and replace with image
1982  .ad.doubleclick.net
1983  .ads.r.us/banners/
1984
1985 {+block +handle-as-empty-document} 
1986 # Block and then ignore
1987  adserver.exampleclick.net/.*\.js$</PRE
1988 ></TD
1989 ></TR
1990 ></TABLE
1991 >
1992     </P
1993 ></DD
1994 ></DL
1995 ></DIV
1996 ></DIV
1997 ><DIV
1998 CLASS="SECT3"
1999 ><H4
2000 CLASS="SECT3"
2001 ><A
2002 NAME="CLIENT-HEADER-FILTER"
2003 >8.5.3. client-header-filter</A
2004 ></H4
2005 ><P
2006 ></P
2007 ><DIV
2008 CLASS="VARIABLELIST"
2009 ><DL
2010 ><DT
2011 >Typical use:</DT
2012 ><DD
2013 ><P
2014 >   Rewrite or remove single client headers.
2015    </P
2016 ></DD
2017 ><DT
2018 >Effect:</DT
2019 ><DD
2020 ><P
2021 >    All client headers to which this action applies are filtered on-the-fly through
2022     the specified regular expression based substitutions.
2023    </P
2024 ></DD
2025 ><DT
2026 >Type:</DT
2027 ><DD
2028 ><P
2029 >Parameterized.</P
2030 ></DD
2031 ><DT
2032 >Parameter:</DT
2033 ><DD
2034 ><P
2035 >    The name of a client-header filter, as defined in one of the
2036     <A
2037 HREF="filter-file.html"
2038 >filter files</A
2039 >.
2040    </P
2041 ></DD
2042 ><DT
2043 >Notes:</DT
2044 ><DD
2045 ><P
2046 >    Client-header filters are applied to each header on its own, not to
2047     all at once. This makes it easier to diagnose problems, but on the downside
2048     you can't write filters that only change header x if header y's value is z.
2049     You can do that by using tags though.
2050    </P
2051 ><P
2052 >    Client-header filters are executed after the other header actions have finished
2053     and use their output as input.
2054    </P
2055 ><P
2056 >    Please refer to the <A
2057 HREF="filter-file.html"
2058 >filter file chapter</A
2059 >
2060     to learn which client-header filters are available by default, and how to
2061     create your own.
2062    </P
2063 ></DD
2064 ><DT
2065 >Example usage (section):</DT
2066 ><DD
2067 ><P
2068 >     <TABLE
2069 BORDER="0"
2070 BGCOLOR="#E0E0E0"
2071 WIDTH="90%"
2072 ><TR
2073 ><TD
2074 ><PRE
2075 CLASS="SCREEN"
2076 >{+client-header-filter{hide-tor-exit-notation}}
2077 .exit/
2078     </PRE
2079 ></TD
2080 ></TR
2081 ></TABLE
2082 >
2083     </P
2084 ></DD
2085 ></DL
2086 ></DIV
2087 ></DIV
2088 ><DIV
2089 CLASS="SECT3"
2090 ><H4
2091 CLASS="SECT3"
2092 ><A
2093 NAME="CLIENT-HEADER-TAGGER"
2094 >8.5.4. client-header-tagger</A
2095 ></H4
2096 ><P
2097 ></P
2098 ><DIV
2099 CLASS="VARIABLELIST"
2100 ><DL
2101 ><DT
2102 >Typical use:</DT
2103 ><DD
2104 ><P
2105 >   Block requests based on their headers.
2106    </P
2107 ></DD
2108 ><DT
2109 >Effect:</DT
2110 ><DD
2111 ><P
2112 >    Client headers to which this action applies are filtered on-the-fly through
2113     the specified regular expression based substitutions, the result is used as
2114     tag. 
2115    </P
2116 ></DD
2117 ><DT
2118 >Type:</DT
2119 ><DD
2120 ><P
2121 >Parameterized.</P
2122 ></DD
2123 ><DT
2124 >Parameter:</DT
2125 ><DD
2126 ><P
2127 >    The name of a client-header tagger, as defined in one of the
2128     <A
2129 HREF="filter-file.html"
2130 >filter files</A
2131 >.
2132    </P
2133 ></DD
2134 ><DT
2135 >Notes:</DT
2136 ><DD
2137 ><P
2138 >    Client-header taggers are applied to each header on its own,
2139     and as the header isn't modified, each tagger <SPAN
2140 CLASS="QUOTE"
2141 >"sees"</SPAN
2142 >
2143     the original.
2144    </P
2145 ><P
2146 >    Client-header taggers are the first actions that are executed
2147     and their tags can be used to control every other action.
2148    </P
2149 ></DD
2150 ><DT
2151 >Example usage (section):</DT
2152 ><DD
2153 ><P
2154 >     <TABLE
2155 BORDER="0"
2156 BGCOLOR="#E0E0E0"
2157 WIDTH="90%"
2158 ><TR
2159 ><TD
2160 ><PRE
2161 CLASS="SCREEN"
2162 ># Tag every request with the User-Agent header
2163 {+client-header-tagger{user-agent}}
2164 /
2165     </PRE
2166 ></TD
2167 ></TR
2168 ></TABLE
2169 >
2170     </P
2171 ></DD
2172 ></DL
2173 ></DIV
2174 ></DIV
2175 ><DIV
2176 CLASS="SECT3"
2177 ><H4
2178 CLASS="SECT3"
2179 ><A
2180 NAME="CONTENT-TYPE-OVERWRITE"
2181 >8.5.5. content-type-overwrite</A
2182 ></H4
2183 ><P
2184 ></P
2185 ><DIV
2186 CLASS="VARIABLELIST"
2187 ><DL
2188 ><DT
2189 >Typical use:</DT
2190 ><DD
2191 ><P
2192 >Stop useless download menus from popping up, or change the browser's rendering mode</P
2193 ></DD
2194 ><DT
2195 >Effect:</DT
2196 ><DD
2197 ><P
2198 >    Replaces the <SPAN
2199 CLASS="QUOTE"
2200 >"Content-Type:"</SPAN
2201 > HTTP server header.
2202    </P
2203 ></DD
2204 ><DT
2205 >Type:</DT
2206 ><DD
2207 ><P
2208 >Parameterized.</P
2209 ></DD
2210 ><DT
2211 >Parameter:</DT
2212 ><DD
2213 ><P
2214 >    Any string. 
2215    </P
2216 ></DD
2217 ><DT
2218 >Notes:</DT
2219 ><DD
2220 ><P
2221 >    The <SPAN
2222 CLASS="QUOTE"
2223 >"Content-Type:"</SPAN
2224 > HTTP server header is used by the
2225     browser to decide what to do with the document. The value of this
2226     header can cause the browser to open a download menu instead of
2227     displaying the document by itself, even if the document's format is
2228     supported by the browser. 
2229    </P
2230 ><P
2231 >    The declared content type can also affect which rendering mode
2232     the browser chooses. If XHTML is delivered as <SPAN
2233 CLASS="QUOTE"
2234 >"text/html"</SPAN
2235 >,
2236     many browsers treat it as yet another broken HTML document.
2237     If it is send as <SPAN
2238 CLASS="QUOTE"
2239 >"application/xml"</SPAN
2240 >, browsers with
2241     XHTML support will only display it, if the syntax is correct.
2242    </P
2243 ><P
2244 >    If you see a web site that proudly uses XHTML buttons, but sets
2245     <SPAN
2246 CLASS="QUOTE"
2247 >"Content-Type: text/html"</SPAN
2248 >, you can use <SPAN
2249 CLASS="APPLICATION"
2250 >Privoxy</SPAN
2251 >
2252     to overwrite it with <SPAN
2253 CLASS="QUOTE"
2254 >"application/xml"</SPAN
2255 > and validate
2256     the web master's claim inside your XHTML-supporting browser.
2257     If the syntax is incorrect, the browser will complain loudly. 
2258    </P
2259 ><P
2260 >    You can also go the opposite direction: if your browser prints
2261     error messages instead of rendering a document falsely declared
2262     as XHTML, you can overwrite the content type with
2263     <SPAN
2264 CLASS="QUOTE"
2265 >"text/html"</SPAN
2266 > and have it rendered as broken HTML document. 
2267    </P
2268 ><P
2269 >    By default <TT
2270 CLASS="LITERAL"
2271 >content-type-overwrite</TT
2272 > only replaces
2273     <SPAN
2274 CLASS="QUOTE"
2275 >"Content-Type:"</SPAN
2276 > headers that look like some kind of text.
2277     If you want to overwrite it unconditionally, you have to combine it with
2278     <TT
2279 CLASS="LITERAL"
2280 ><A
2281 HREF="actions-file.html#FORCE-TEXT-MODE"
2282 >force-text-mode</A
2283 ></TT
2284 >.
2285     This limitation exists for a reason, think twice before circumventing it.
2286    </P
2287 ><P
2288 >    Most of the time it's easier to replace this action with a custom
2289     <TT
2290 CLASS="LITERAL"
2291 ><A
2292 HREF="actions-file.html#SERVER-HEADER-FILTER"
2293 >server-header filter</A
2294 ></TT
2295 >.
2296     It allows you to activate it for every document of a certain site and it will still
2297     only replace the content types you aimed at.
2298    </P
2299 ><P
2300 >    Of course you can apply <TT
2301 CLASS="LITERAL"
2302 >content-type-overwrite</TT
2303 >
2304     to a whole site and then make URL based exceptions, but it's a lot
2305     more work to get the same precision. 
2306    </P
2307 ></DD
2308 ><DT
2309 >Example usage (sections):</DT
2310 ><DD
2311 ><P
2312 >     <TABLE
2313 BORDER="0"
2314 BGCOLOR="#E0E0E0"
2315 WIDTH="90%"
2316 ><TR
2317 ><TD
2318 ><PRE
2319 CLASS="SCREEN"
2320 ># Check if www.example.net/ really uses valid XHTML
2321 { +content-type-overwrite{application/xml} }
2322 www.example.net/
2323
2324 # but leave the content type unmodified if the URL looks like a style sheet
2325 {-content-type-overwrite}
2326 www.example.net/.*\.css$
2327 www.example.net/.*style</PRE
2328 ></TD
2329 ></TR
2330 ></TABLE
2331 >
2332    </P
2333 ></DD
2334 ></DL
2335 ></DIV
2336 ></DIV
2337 ><DIV
2338 CLASS="SECT3"
2339 ><H4
2340 CLASS="SECT3"
2341 ><A
2342 NAME="CRUNCH-CLIENT-HEADER"
2343 >8.5.6. crunch-client-header</A
2344 ></H4
2345 ><P
2346 ></P
2347 ><DIV
2348 CLASS="VARIABLELIST"
2349 ><DL
2350 ><DT
2351 >Typical use:</DT
2352 ><DD
2353 ><P
2354 >Remove a client header <SPAN
2355 CLASS="APPLICATION"
2356 >Privoxy</SPAN
2357 > has no dedicated action for.</P
2358 ></DD
2359 ><DT
2360 >Effect:</DT
2361 ><DD
2362 ><P
2363 >    Deletes every header sent by the client that contains the string the user supplied as parameter.
2364    </P
2365 ></DD
2366 ><DT
2367 >Type:</DT
2368 ><DD
2369 ><P
2370 >Parameterized.</P
2371 ></DD
2372 ><DT
2373 >Parameter:</DT
2374 ><DD
2375 ><P
2376 >    Any string.
2377    </P
2378 ></DD
2379 ><DT
2380 >Notes:</DT
2381 ><DD
2382 ><P
2383 >    This action allows you to block client headers for which no dedicated
2384     <SPAN
2385 CLASS="APPLICATION"
2386 >Privoxy</SPAN
2387 > action exists.
2388     <SPAN
2389 CLASS="APPLICATION"
2390 >Privoxy</SPAN
2391 > will remove every client header that
2392     contains the string you supplied as parameter.
2393    </P
2394 ><P
2395 >    Regular expressions are <SPAN
2396 CLASS="emphasis"
2397 ><I
2398 CLASS="EMPHASIS"
2399 >not supported</I
2400 ></SPAN
2401 > and you can't
2402     use this action to block different headers in the same request, unless
2403     they contain the same string.
2404    </P
2405 ><P
2406 >    <TT
2407 CLASS="LITERAL"
2408 >crunch-client-header</TT
2409 > is only meant for quick tests.
2410     If you have to block several different headers, or only want to modify
2411     parts of them, you should use a
2412     <TT
2413 CLASS="LITERAL"
2414 ><A
2415 HREF="actions-file.html#CLIENT-HEADER-FILTER"
2416 >client-header filter</A
2417 ></TT
2418 >.
2419    </P
2420 ><DIV
2421 CLASS="WARNING"
2422 ><P
2423 ></P
2424 ><TABLE
2425 CLASS="WARNING"
2426 BORDER="1"
2427 WIDTH="90%"
2428 ><TR
2429 ><TD
2430 ALIGN="CENTER"
2431 ><B
2432 >Warning</B
2433 ></TD
2434 ></TR
2435 ><TR
2436 ><TD
2437 ALIGN="LEFT"
2438 ><P
2439 >      Don't block any header without understanding the consequences.
2440      </P
2441 ></TD
2442 ></TR
2443 ></TABLE
2444 ></DIV
2445 ></DD
2446 ><DT
2447 >Example usage (section):</DT
2448 ><DD
2449 ><P
2450 >     <TABLE
2451 BORDER="0"
2452 BGCOLOR="#E0E0E0"
2453 WIDTH="90%"
2454 ><TR
2455 ><TD
2456 ><PRE
2457 CLASS="SCREEN"
2458 ># Block the non-existent "Privacy-Violation:" client header 
2459 { +crunch-client-header{Privacy-Violation:} }
2460 /
2461     </PRE
2462 ></TD
2463 ></TR
2464 ></TABLE
2465 >
2466    </P
2467 ></DD
2468 ></DL
2469 ></DIV
2470 ></DIV
2471 ><DIV
2472 CLASS="SECT3"
2473 ><H4
2474 CLASS="SECT3"
2475 ><A
2476 NAME="CRUNCH-IF-NONE-MATCH"
2477 >8.5.7. crunch-if-none-match</A
2478 ></H4
2479 ><P
2480 ></P
2481 ><DIV
2482 CLASS="VARIABLELIST"
2483 ><DL
2484 ><DT
2485 >Typical use:</DT
2486 ><DD
2487 ><P
2488 >Prevent yet another way to track the user's steps between sessions.</P
2489 ></DD
2490 ><DT
2491 >Effect:</DT
2492 ><DD
2493 ><P
2494 >    Deletes the <SPAN
2495 CLASS="QUOTE"
2496 >"If-None-Match:"</SPAN
2497 > HTTP client header.
2498    </P
2499 ></DD
2500 ><DT
2501 >Type:</DT
2502 ><DD
2503 ><P
2504 >Boolean.</P
2505 ></DD
2506 ><DT
2507 >Parameter:</DT
2508 ><DD
2509 ><P
2510 >    N/A
2511    </P
2512 ></DD
2513 ><DT
2514 >Notes:</DT
2515 ><DD
2516 ><P
2517 >    Removing the <SPAN
2518 CLASS="QUOTE"
2519 >"If-None-Match:"</SPAN
2520 > HTTP client header
2521     is useful for filter testing, where you want to force a real
2522     reload instead of getting status code <SPAN
2523 CLASS="QUOTE"
2524 >"304"</SPAN
2525 > which
2526     would cause the browser to use a cached copy of the page.
2527    </P
2528 ><P
2529 >    It is also useful to make sure the header isn't used as a cookie
2530     replacement (unlikely but possible).
2531    </P
2532 ><P
2533 >    Blocking the <SPAN
2534 CLASS="QUOTE"
2535 >"If-None-Match:"</SPAN
2536 > header shouldn't cause any
2537     caching problems, as long as the <SPAN
2538 CLASS="QUOTE"
2539 >"If-Modified-Since:"</SPAN
2540 > header
2541     isn't blocked or missing as well.
2542    </P
2543 ><P
2544 >    It is recommended to use this action together with
2545     <TT
2546 CLASS="LITERAL"
2547 ><A
2548 HREF="actions-file.html#HIDE-IF-MODIFIED-SINCE"
2549 >hide-if-modified-since</A
2550 ></TT
2551 >
2552     and
2553     <TT
2554 CLASS="LITERAL"
2555 ><A
2556 HREF="actions-file.html#OVERWRITE-LAST-MODIFIED"
2557 >overwrite-last-modified</A
2558 ></TT
2559 >.
2560    </P
2561 ></DD
2562 ><DT
2563 >Example usage (section):</DT
2564 ><DD
2565 ><P
2566 >     <TABLE
2567 BORDER="0"
2568 BGCOLOR="#E0E0E0"
2569 WIDTH="90%"
2570 ><TR
2571 ><TD
2572 ><PRE
2573 CLASS="SCREEN"
2574 ># Let the browser revalidate cached documents but don't
2575 # allow the server to use the revalidation headers for user tracking.
2576 {+hide-if-modified-since{-60} \
2577  +overwrite-last-modified{randomize} \
2578  +crunch-if-none-match}
2579 /   </PRE
2580 ></TD
2581 ></TR
2582 ></TABLE
2583 >
2584    </P
2585 ></DD
2586 ></DL
2587 ></DIV
2588 ></DIV
2589 ><DIV
2590 CLASS="SECT3"
2591 ><H4
2592 CLASS="SECT3"
2593 ><A
2594 NAME="CRUNCH-INCOMING-COOKIES"
2595 >8.5.8. crunch-incoming-cookies</A
2596 ></H4
2597 ><P
2598 ></P
2599 ><DIV
2600 CLASS="VARIABLELIST"
2601 ><DL
2602 ><DT
2603 >Typical use:</DT
2604 ><DD
2605 ><P
2606 >    Prevent the web server from setting HTTP cookies on your system
2607    </P
2608 ></DD
2609 ><DT
2610 >Effect:</DT
2611 ><DD
2612 ><P
2613 >    Deletes any <SPAN
2614 CLASS="QUOTE"
2615 >"Set-Cookie:"</SPAN
2616 > HTTP headers from server replies.
2617    </P
2618 ></DD
2619 ><DT
2620 >Type:</DT
2621 ><DD
2622 ><P
2623 >Boolean.</P
2624 ></DD
2625 ><DT
2626 >Parameter:</DT
2627 ><DD
2628 ><P
2629 >    N/A
2630    </P
2631 ></DD
2632 ><DT
2633 >Notes:</DT
2634 ><DD
2635 ><P
2636 >    This action is only concerned with <SPAN
2637 CLASS="emphasis"
2638 ><I
2639 CLASS="EMPHASIS"
2640 >incoming</I
2641 ></SPAN
2642 > HTTP cookies. For
2643     <SPAN
2644 CLASS="emphasis"
2645 ><I
2646 CLASS="EMPHASIS"
2647 >outgoing</I
2648 ></SPAN
2649 > HTTP cookies, use
2650     <TT
2651 CLASS="LITERAL"
2652 ><A
2653 HREF="actions-file.html#CRUNCH-OUTGOING-COOKIES"
2654 >crunch-outgoing-cookies</A
2655 ></TT
2656 >.
2657     Use <SPAN
2658 CLASS="emphasis"
2659 ><I
2660 CLASS="EMPHASIS"
2661 >both</I
2662 ></SPAN
2663 > to disable HTTP cookies completely.
2664    </P
2665 ><P
2666 >    It makes <SPAN
2667 CLASS="emphasis"
2668 ><I
2669 CLASS="EMPHASIS"
2670 >no sense at all</I
2671 ></SPAN
2672 > to use this action in conjunction
2673     with the <TT
2674 CLASS="LITERAL"
2675 ><A
2676 HREF="actions-file.html#SESSION-COOKIES-ONLY"
2677 >session-cookies-only</A
2678 ></TT
2679 > action,
2680     since it would prevent the session cookies from being set. See also 
2681     <TT
2682 CLASS="LITERAL"
2683 ><A
2684 HREF="actions-file.html#FILTER-CONTENT-COOKIES"
2685 >filter-content-cookies</A
2686 ></TT
2687 >.
2688    </P
2689 ></DD
2690 ><DT
2691 >Example usage:</DT
2692 ><DD
2693 ><P
2694 >    <TABLE
2695 BORDER="0"
2696 BGCOLOR="#E0E0E0"
2697 WIDTH="90%"
2698 ><TR
2699 ><TD
2700 ><PRE
2701 CLASS="SCREEN"
2702 >+crunch-incoming-cookies</PRE
2703 ></TD
2704 ></TR
2705 ></TABLE
2706 >
2707    </P
2708 ></DD
2709 ></DL
2710 ></DIV
2711 ></DIV
2712 ><DIV
2713 CLASS="SECT3"
2714 ><H4
2715 CLASS="SECT3"
2716 ><A
2717 NAME="CRUNCH-SERVER-HEADER"
2718 >8.5.9. crunch-server-header</A
2719 ></H4
2720 ><P
2721 ></P
2722 ><DIV
2723 CLASS="VARIABLELIST"
2724 ><DL
2725 ><DT
2726 >Typical use:</DT
2727 ><DD
2728 ><P
2729 >Remove a server header <SPAN
2730 CLASS="APPLICATION"
2731 >Privoxy</SPAN
2732 > has no dedicated action for.</P
2733 ></DD
2734 ><DT
2735 >Effect:</DT
2736 ><DD
2737 ><P
2738 >    Deletes every header sent by the server that contains the string the user supplied as parameter.
2739    </P
2740 ></DD
2741 ><DT
2742 >Type:</DT
2743 ><DD
2744 ><P
2745 >Parameterized.</P
2746 ></DD
2747 ><DT
2748 >Parameter:</DT
2749 ><DD
2750 ><P
2751 >    Any string.
2752    </P
2753 ></DD
2754 ><DT
2755 >Notes:</DT
2756 ><DD
2757 ><P
2758 >    This action allows you to block server headers for which no dedicated
2759     <SPAN
2760 CLASS="APPLICATION"
2761 >Privoxy</SPAN
2762 > action exists. <SPAN
2763 CLASS="APPLICATION"
2764 >Privoxy</SPAN
2765 >
2766     will remove every server header that contains the string you supplied as parameter.
2767    </P
2768 ><P
2769 >    Regular expressions are <SPAN
2770 CLASS="emphasis"
2771 ><I
2772 CLASS="EMPHASIS"
2773 >not supported</I
2774 ></SPAN
2775 > and you can't
2776     use this action to block different headers in the same request, unless
2777     they contain the same string.
2778    </P
2779 ><P
2780 >    <TT
2781 CLASS="LITERAL"
2782 >crunch-server-header</TT
2783 > is only meant for quick tests.
2784     If you have to block several different headers, or only want to modify
2785     parts of them, you should use a custom
2786     <TT
2787 CLASS="LITERAL"
2788 ><A
2789 HREF="actions-file.html#SERVER-HEADER-FILTER"
2790 >server-header filter</A
2791 ></TT
2792 >.
2793    </P
2794 ><DIV
2795 CLASS="WARNING"
2796 ><P
2797 ></P
2798 ><TABLE
2799 CLASS="WARNING"
2800 BORDER="1"
2801 WIDTH="90%"
2802 ><TR
2803 ><TD
2804 ALIGN="CENTER"
2805 ><B
2806 >Warning</B
2807 ></TD
2808 ></TR
2809 ><TR
2810 ><TD
2811 ALIGN="LEFT"
2812 ><P
2813 >     Don't block any header without understanding the consequences.
2814      </P
2815 ></TD
2816 ></TR
2817 ></TABLE
2818 ></DIV
2819 ></DD
2820 ><DT
2821 >Example usage (section):</DT
2822 ><DD
2823 ><P
2824 >     <TABLE
2825 BORDER="0"
2826 BGCOLOR="#E0E0E0"
2827 WIDTH="90%"
2828 ><TR
2829 ><TD
2830 ><PRE
2831 CLASS="SCREEN"
2832 ># Crunch server headers that try to prevent caching
2833 { +crunch-server-header{no-cache} }
2834 /   </PRE
2835 ></TD
2836 ></TR
2837 ></TABLE
2838 >
2839    </P
2840 ></DD
2841 ></DL
2842 ></DIV
2843 ></DIV
2844 ><DIV
2845 CLASS="SECT3"
2846 ><H4
2847 CLASS="SECT3"
2848 ><A
2849 NAME="CRUNCH-OUTGOING-COOKIES"
2850 >8.5.10. crunch-outgoing-cookies</A
2851 ></H4
2852 ><P
2853 ></P
2854 ><DIV
2855 CLASS="VARIABLELIST"
2856 ><DL
2857 ><DT
2858 >Typical use:</DT
2859 ><DD
2860 ><P
2861 >    Prevent the web server from reading any HTTP cookies from your system
2862    </P
2863 ></DD
2864 ><DT
2865 >Effect:</DT
2866 ><DD
2867 ><P
2868 >    Deletes any <SPAN
2869 CLASS="QUOTE"
2870 >"Cookie:"</SPAN
2871 > HTTP headers from client requests.
2872    </P
2873 ></DD
2874 ><DT
2875 >Type:</DT
2876 ><DD
2877 ><P
2878 >Boolean.</P
2879 ></DD
2880 ><DT
2881 >Parameter:</DT
2882 ><DD
2883 ><P
2884 >    N/A
2885    </P
2886 ></DD
2887 ><DT
2888 >Notes:</DT
2889 ><DD
2890 ><P
2891 >    This action is only concerned with <SPAN
2892 CLASS="emphasis"
2893 ><I
2894 CLASS="EMPHASIS"
2895 >outgoing</I
2896 ></SPAN
2897 > HTTP cookies. For
2898     <SPAN
2899 CLASS="emphasis"
2900 ><I
2901 CLASS="EMPHASIS"
2902 >incoming</I
2903 ></SPAN
2904 > HTTP cookies, use
2905     <TT
2906 CLASS="LITERAL"
2907 ><A
2908 HREF="actions-file.html#CRUNCH-INCOMING-COOKIES"
2909 >crunch-incoming-cookies</A
2910 ></TT
2911 >.
2912     Use <SPAN
2913 CLASS="emphasis"
2914 ><I
2915 CLASS="EMPHASIS"
2916 >both</I
2917 ></SPAN
2918 > to disable HTTP cookies completely.
2919    </P
2920 ><P
2921 >    It makes <SPAN
2922 CLASS="emphasis"
2923 ><I
2924 CLASS="EMPHASIS"
2925 >no sense at all</I
2926 ></SPAN
2927 > to use this action in conjunction
2928     with the <TT
2929 CLASS="LITERAL"
2930 ><A
2931 HREF="actions-file.html#SESSION-COOKIES-ONLY"
2932 >session-cookies-only</A
2933 ></TT
2934 > action,
2935     since it would prevent the session cookies from being read.
2936    </P
2937 ></DD
2938 ><DT
2939 >Example usage:</DT
2940 ><DD
2941 ><P
2942 >    <TABLE
2943 BORDER="0"
2944 BGCOLOR="#E0E0E0"
2945 WIDTH="90%"
2946 ><TR
2947 ><TD
2948 ><PRE
2949 CLASS="SCREEN"
2950 >+crunch-outgoing-cookies</PRE
2951 ></TD
2952 ></TR
2953 ></TABLE
2954 >
2955    </P
2956 ></DD
2957 ></DL
2958 ></DIV
2959 ></DIV
2960 ><DIV
2961 CLASS="SECT3"
2962 ><H4
2963 CLASS="SECT3"
2964 ><A
2965 NAME="DEANIMATE-GIFS"
2966 >8.5.11. deanimate-gifs</A
2967 ></H4
2968 ><P
2969 ></P
2970 ><DIV
2971 CLASS="VARIABLELIST"
2972 ><DL
2973 ><DT
2974 >Typical use:</DT
2975 ><DD
2976 ><P
2977 >Stop those annoying, distracting animated GIF images.</P
2978 ></DD
2979 ><DT
2980 >Effect:</DT
2981 ><DD
2982 ><P
2983 >    De-animate GIF animations, i.e. reduce them to their first or last image.
2984    </P
2985 ></DD
2986 ><DT
2987 >Type:</DT
2988 ><DD
2989 ><P
2990 >Parameterized.</P
2991 ></DD
2992 ><DT
2993 >Parameter:</DT
2994 ><DD
2995 ><P
2996 >    <SPAN
2997 CLASS="QUOTE"
2998 >"last"</SPAN
2999 > or <SPAN
3000 CLASS="QUOTE"
3001 >"first"</SPAN
3002 >
3003    </P
3004 ></DD
3005 ><DT
3006 >Notes:</DT
3007 ><DD
3008 ><P
3009 >    This will also shrink the images considerably (in bytes, not pixels!). If
3010     the option <SPAN
3011 CLASS="QUOTE"
3012 >"first"</SPAN
3013 > is given, the first frame of the animation
3014     is used as the replacement. If <SPAN
3015 CLASS="QUOTE"
3016 >"last"</SPAN
3017 > is given, the last
3018     frame of the animation is used instead, which probably makes more sense for
3019     most banner animations, but also has the risk of not showing the entire
3020     last frame (if it is only a delta to an earlier frame).
3021    </P
3022 ><P
3023 >    You can safely use this action with patterns that will also match non-GIF
3024     objects, because no attempt will be made at anything that doesn't look like
3025     a GIF.
3026    </P
3027 ></DD
3028 ><DT
3029 >Example usage:</DT
3030 ><DD
3031 ><P
3032 >      <TABLE
3033 BORDER="0"
3034 BGCOLOR="#E0E0E0"
3035 WIDTH="90%"
3036 ><TR
3037 ><TD
3038 ><PRE
3039 CLASS="SCREEN"
3040 >+deanimate-gifs{last}</PRE
3041 ></TD
3042 ></TR
3043 ></TABLE
3044 >
3045     </P
3046 ></DD
3047 ></DL
3048 ></DIV
3049 ></DIV
3050 ><DIV
3051 CLASS="SECT3"
3052 ><H4
3053 CLASS="SECT3"
3054 ><A
3055 NAME="DOWNGRADE-HTTP-VERSION"
3056 >8.5.12. downgrade-http-version</A
3057 ></H4
3058 ><P
3059 ></P
3060 ><DIV
3061 CLASS="VARIABLELIST"
3062 ><DL
3063 ><DT
3064 >Typical use:</DT
3065 ><DD
3066 ><P
3067 >Work around (very rare) problems with HTTP/1.1</P
3068 ></DD
3069 ><DT
3070 >Effect:</DT
3071 ><DD
3072 ><P
3073 >    Downgrades HTTP/1.1 client requests and server replies to HTTP/1.0.
3074    </P
3075 ></DD
3076 ><DT
3077 >Type:</DT
3078 ><DD
3079 ><P
3080 >Boolean.</P
3081 ></DD
3082 ><DT
3083 >Parameter:</DT
3084 ><DD
3085 ><P
3086 >    N/A
3087    </P
3088 ></DD
3089 ><DT
3090 >Notes:</DT
3091 ><DD
3092 ><P
3093 >    This is a left-over from the time when <SPAN
3094 CLASS="APPLICATION"
3095 >Privoxy</SPAN
3096 >
3097     didn't support important HTTP/1.1 features well. It is left here for the
3098     unlikely case that you experience HTTP/1.1 related problems with some server
3099     out there. Not all HTTP/1.1 features and requirements are supported yet,
3100     so there is a chance you might need this action.
3101    </P
3102 ></DD
3103 ><DT
3104 >Example usage (section):</DT
3105 ><DD
3106 ><P
3107 >     <TABLE
3108 BORDER="0"
3109 BGCOLOR="#E0E0E0"
3110 WIDTH="90%"
3111 ><TR
3112 ><TD
3113 ><PRE
3114 CLASS="SCREEN"
3115 >{+downgrade-http-version}
3116 problem-host.example.com</PRE
3117 ></TD
3118 ></TR
3119 ></TABLE
3120 >
3121     </P
3122 ></DD
3123 ></DL
3124 ></DIV
3125 ></DIV
3126 ><DIV
3127 CLASS="SECT3"
3128 ><H4
3129 CLASS="SECT3"
3130 ><A
3131 NAME="FAST-REDIRECTS"
3132 >8.5.13. fast-redirects</A
3133 ></H4
3134 ><P
3135 ></P
3136 ><DIV
3137 CLASS="VARIABLELIST"
3138 ><DL
3139 ><DT
3140 >Typical use:</DT
3141 ><DD
3142 ><P
3143 >Fool some click-tracking scripts and speed up indirect links.</P
3144 ></DD
3145 ><DT
3146 >Effect:</DT
3147 ><DD
3148 ><P
3149 >    Detects redirection URLs and redirects the browser without contacting
3150     the redirection server first.
3151    </P
3152 ></DD
3153 ><DT
3154 >Type:</DT
3155 ><DD
3156 ><P
3157 >Parameterized.</P
3158 ></DD
3159 ><DT
3160 >Parameter:</DT
3161 ><DD
3162 ><P
3163 ></P
3164 ><UL
3165 ><LI
3166 ><P
3167 >      <SPAN
3168 CLASS="QUOTE"
3169 >"simple-check"</SPAN
3170 > to just search for the string <SPAN
3171 CLASS="QUOTE"
3172 >"http://"</SPAN
3173 >
3174       to detect redirection URLs.
3175      </P
3176 ></LI
3177 ><LI
3178 ><P
3179 >      <SPAN
3180 CLASS="QUOTE"
3181 >"check-decoded-url"</SPAN
3182 > to decode URLs (if necessary) before searching
3183       for redirection URLs.
3184      </P
3185 ></LI
3186 ></UL
3187 ></DD
3188 ><DT
3189 >Notes:</DT
3190 ><DD
3191 ><P
3192 >  
3193     Many sites, like yahoo.com, don't just link to other sites. Instead, they
3194     will link to some script on their own servers, giving the destination as a
3195     parameter, which will then redirect you to the final target. URLs
3196     resulting from this scheme typically look like:
3197     <SPAN
3198 CLASS="QUOTE"
3199 >"http://www.example.org/click-tracker.cgi?target=http%3a//www.example.net/"</SPAN
3200 >.
3201   </P
3202 ><P
3203 >    Sometimes, there are even multiple consecutive redirects encoded in the
3204     URL. These redirections via scripts make your web browsing more traceable,
3205     since the server from which you follow such a link can see where you go
3206     to. Apart from that, valuable bandwidth and time is wasted, while your
3207     browser asks the server for one redirect after the other. Plus, it feeds
3208     the advertisers.
3209    </P
3210 ><P
3211 >    This feature is currently not very smart and is scheduled for improvement.
3212     If it is enabled by default, you will have to create some exceptions to
3213     this action. It can lead to failures in several ways: 
3214    </P
3215 ><P
3216 >    Not every URLs with other URLs as parameters is evil.
3217     Some sites offer a real service that requires this information to work.
3218     For example a validation service needs to know, which document to validate.
3219     <TT
3220 CLASS="LITERAL"
3221 >fast-redirects</TT
3222 > assumes that every URL parameter that
3223     looks like another URL is a redirection target, and will always redirect to
3224     the last one. Most of the time the assumption is correct, but if it isn't,
3225     the user gets redirected anyway.
3226    </P
3227 ><P
3228 >    Another failure occurs if the URL contains other parameters after the URL parameter.
3229     The URL:
3230     <SPAN
3231 CLASS="QUOTE"
3232 >"http://www.example.org/?redirect=http%3a//www.example.net/&#38;foo=bar"</SPAN
3233 >.
3234     contains the redirection URL <SPAN
3235 CLASS="QUOTE"
3236 >"http://www.example.net/"</SPAN
3237 >,
3238     followed by another parameter. <TT
3239 CLASS="LITERAL"
3240 >fast-redirects</TT
3241 > doesn't know that
3242     and will cause a redirect to <SPAN
3243 CLASS="QUOTE"
3244 >"http://www.example.net/&#38;foo=bar"</SPAN
3245 >.
3246     Depending on the target server configuration, the parameter will be silently ignored
3247     or lead to a <SPAN
3248 CLASS="QUOTE"
3249 >"page not found"</SPAN
3250 > error. You can prevent this problem by
3251     first using the <TT
3252 CLASS="LITERAL"
3253 ><A
3254 HREF="actions-file.html#REDIRECT"
3255 >redirect</A
3256 ></TT
3257 > action
3258     to remove the last part of the URL, but it requires a little effort.
3259    </P
3260 ><P
3261 >    To detect a redirection URL, <TT
3262 CLASS="LITERAL"
3263 >fast-redirects</TT
3264 > only
3265     looks for the string <SPAN
3266 CLASS="QUOTE"
3267 >"http://"</SPAN
3268 >, either in plain text
3269     (invalid but often used) or encoded as <SPAN
3270 CLASS="QUOTE"
3271 >"http%3a//"</SPAN
3272 >.
3273     Some sites use their own URL encoding scheme, encrypt the address
3274     of the target server or replace it with a database id. In theses cases
3275     <TT
3276 CLASS="LITERAL"
3277 >fast-redirects</TT
3278 > is fooled and the request reaches the
3279     redirection server where it probably gets logged.
3280    </P
3281 ></DD
3282 ><DT
3283 >Example usage:</DT
3284 ><DD
3285 ><P
3286 >     <TABLE
3287 BORDER="0"
3288 BGCOLOR="#E0E0E0"
3289 WIDTH="90%"
3290 ><TR
3291 ><TD
3292 ><PRE
3293 CLASS="SCREEN"
3294 > { +fast-redirects{simple-check} }
3295    one.example.com 
3296
3297  { +fast-redirects{check-decoded-url} }
3298    another.example.com/testing</PRE
3299 ></TD
3300 ></TR
3301 ></TABLE
3302 >
3303     </P
3304 ></DD
3305 ></DL
3306 ></DIV
3307 ></DIV
3308 ><DIV
3309 CLASS="SECT3"
3310 ><H4
3311 CLASS="SECT3"
3312 ><A
3313 NAME="FILTER"
3314 >8.5.14. filter</A
3315 ></H4
3316 ><P
3317 ></P
3318 ><DIV
3319 CLASS="VARIABLELIST"
3320 ><DL
3321 ><DT
3322 >Typical use:</DT
3323 ><DD
3324 ><P
3325 >Get rid of HTML and JavaScript annoyances, banner advertisements (by size), 
3326          do fun text replacements, add personalized effects, etc.</P
3327 ></DD
3328 ><DT
3329 >Effect:</DT
3330 ><DD
3331 ><P
3332 >    All instances of text-based type, most notably HTML and JavaScript, to which
3333     this action applies, can be filtered on-the-fly through the specified regular
3334     expression based substitutions. (Note: as of version 3.0.3 plain text documents
3335     are exempted from filtering, because web servers often use the
3336    <TT
3337 CLASS="LITERAL"
3338 >text/plain</TT
3339 > MIME type for all files whose type they don't know.)
3340    </P
3341 ></DD
3342 ><DT
3343 >Type:</DT
3344 ><DD
3345 ><P
3346 >Parameterized.</P
3347 ></DD
3348 ><DT
3349 >Parameter:</DT
3350 ><DD
3351 ><P
3352 >    The name of a content filter, as defined in the <A
3353 HREF="filter-file.html"
3354 >filter file</A
3355 >.
3356     Filters can be defined in one or more  files as defined by the 
3357     <TT
3358 CLASS="LITERAL"
3359 ><A
3360 HREF="config.html#FILTERFILE"
3361 >filterfile</A
3362 ></TT
3363 >
3364     option in the <A
3365 HREF="config.html"
3366 >config file</A
3367 >. 
3368     <TT
3369 CLASS="FILENAME"
3370 >default.filter</TT
3371 > is the collection of filters 
3372     supplied by the developers. Locally defined filters should go 
3373     in their own file, such as <TT
3374 CLASS="FILENAME"
3375 >user.filter</TT
3376 >.
3377    </P
3378 ><P
3379 >     When used in its negative form,
3380      and without parameters, <SPAN
3381 CLASS="emphasis"
3382 ><I
3383 CLASS="EMPHASIS"
3384 >all</I
3385 ></SPAN
3386 > filtering is completely disabled.
3387   </P
3388 ></DD
3389 ><DT
3390 >Notes:</DT
3391 ><DD
3392 ><P
3393 >    For your convenience, there are a number of pre-defined filters available 
3394     in the distribution filter file that you can use. See the examples below for
3395     a list.
3396    </P
3397 ><P
3398 >    Filtering requires buffering the page content, which may appear to
3399     slow down page rendering since nothing is displayed until all content has
3400     passed the filters. (It does not really take longer, but seems that way
3401     since the page is not incrementally displayed.) This effect will be more
3402     noticeable on slower connections.
3403    </P
3404 ><P
3405 >   <SPAN
3406 CLASS="QUOTE"
3407 >"Rolling your own"</SPAN
3408 >
3409     filters requires a knowledge of 
3410      <A
3411 HREF="http://en.wikipedia.org/wiki/Regular_expressions"
3412 TARGET="_top"
3413 ><SPAN
3414 CLASS="QUOTE"
3415 >"Regular
3416      Expressions"</SPAN
3417 ></A
3418 > and 
3419       <A
3420 HREF="http://en.wikipedia.org/wiki/Html"
3421 TARGET="_top"
3422 ><SPAN
3423 CLASS="QUOTE"
3424 >"HTML"</SPAN
3425 ></A
3426 >.
3427     This is very powerful feature, and potentially very intrusive. 
3428     Filters should be used with caution, and where an equivalent
3429     <SPAN
3430 CLASS="QUOTE"
3431 >"action"</SPAN
3432 > is not available.
3433    </P
3434 ><P
3435 >    The amount of data that can be filtered is limited to the 
3436     <TT
3437 CLASS="LITERAL"
3438 ><A
3439 HREF="config.html#BUFFER-LIMIT"
3440 >buffer-limit</A
3441 ></TT
3442 >
3443     option in the main <A
3444 HREF="config.html"
3445 >config file</A
3446 >. The 
3447     default is 4096 KB (4 Megs). Once this limit is exceeded, the buffered
3448     data, and all pending data, is passed through unfiltered. 
3449    </P
3450 ><P
3451 >    Inappropriate MIME types, such as zipped files, are not filtered at all.
3452     (Again, only text-based types except plain text). Encrypted SSL data
3453     (from HTTPS servers) cannot be filtered either, since this would violate
3454     the integrity of the secure transaction. In some situations it might
3455     be necessary to protect certain text, like source code, from filtering
3456     by defining appropriate <TT
3457 CLASS="LITERAL"
3458 >-filter</TT
3459 > exceptions.
3460    </P
3461 ><P
3462 >    Compressed content can't be filtered either, unless <SPAN
3463 CLASS="APPLICATION"
3464 >Privoxy</SPAN
3465 >
3466     is compiled with zlib support (requires at least <SPAN
3467 CLASS="APPLICATION"
3468 >Privoxy</SPAN
3469 > 3.0.7),
3470     in which case <SPAN
3471 CLASS="APPLICATION"
3472 >Privoxy</SPAN
3473 > will decompress the content before filtering
3474     it.
3475    </P
3476 ><P
3477 >    If you use a <SPAN
3478 CLASS="APPLICATION"
3479 >Privoxy</SPAN
3480 > version without zlib support, but want filtering to work on
3481     as much documents as possible, even those that would normally be sent compressed,
3482     you must use the <TT
3483 CLASS="LITERAL"
3484 ><A
3485 HREF="actions-file.html#PREVENT-COMPRESSION"
3486 >prevent-compression</A
3487 ></TT
3488 >
3489     action in conjunction with <TT
3490 CLASS="LITERAL"
3491 >filter</TT
3492 >.
3493    </P
3494 ><P
3495 >    Content filtering can achieve some of the same effects as the 
3496     <TT
3497 CLASS="LITERAL"
3498 ><A
3499 HREF="actions-file.html#BLOCK"
3500 >block</A
3501 ></TT
3502 >
3503     action, i.e. it can be used to block ads and banners. But the mechanism 
3504     works quite differently. One effective use, is to block ad banners 
3505     based on their size (see below), since many of these seem to be somewhat 
3506     standardized.
3507    </P
3508 ><P
3509 >    <A
3510 HREF="contact.html"
3511 >Feedback</A
3512 > with suggestions for new or
3513     improved filters is particularly welcome!
3514    </P
3515 ><P
3516 >    The below list has only the names and a one-line description of each
3517     predefined filter. There are <A
3518 HREF="filter-file.html#PREDEFINED-FILTERS"
3519 >more
3520     verbose explanations</A
3521 > of what these filters do in the <A
3522 HREF="filter-file.html"
3523 >filter file chapter</A
3524 >.
3525    </P
3526 ></DD
3527 ><DT
3528 >Example usage (with filters from the distribution <TT
3529 CLASS="FILENAME"
3530 >default.filter</TT
3531 > file).
3532   See <A
3533 HREF="filter-file.html#PREDEFINED-FILTERS"
3534 >the Predefined Filters section</A
3535 > for 
3536   more explanation on each:</DT
3537 ><DD
3538 ><P
3539 >    <A
3540 NAME="FILTER-JS-ANNOYANCES"
3541 ></A
3542 >
3543     <TABLE
3544 BORDER="0"
3545 BGCOLOR="#E0E0E0"
3546 WIDTH="90%"
3547 ><TR
3548 ><TD
3549 ><PRE
3550 CLASS="SCREEN"
3551 >+filter{js-annoyances}       # Get rid of particularly annoying JavaScript abuse</PRE
3552 ></TD
3553 ></TR
3554 ></TABLE
3555 >
3556    </P
3557 ><P
3558 >    <A
3559 NAME="FILTER-JS-EVENTS"
3560 ></A
3561 >
3562     <TABLE
3563 BORDER="0"
3564 BGCOLOR="#E0E0E0"
3565 WIDTH="90%"
3566 ><TR
3567 ><TD
3568 ><PRE
3569 CLASS="SCREEN"
3570 >+filter{js-events}           # Kill all JS event bindings (Radically destructive! Only for extra nasty sites)</PRE
3571 ></TD
3572 ></TR
3573 ></TABLE
3574 >
3575    </P
3576 ><P
3577 >    <A
3578 NAME="FILTER-HTML-ANNOYANCES"
3579 ></A
3580 >
3581     <TABLE
3582 BORDER="0"
3583 BGCOLOR="#E0E0E0"
3584 WIDTH="90%"
3585 ><TR
3586 ><TD
3587 ><PRE
3588 CLASS="SCREEN"
3589 >+filter{html-annoyances}     # Get rid of particularly annoying HTML abuse</PRE
3590 ></TD
3591 ></TR
3592 ></TABLE
3593 >
3594    </P
3595 ><P
3596 >    <A
3597 NAME="FILTER-CONTENT-COOKIES"
3598 ></A
3599 >
3600     <TABLE
3601 BORDER="0"
3602 BGCOLOR="#E0E0E0"
3603 WIDTH="90%"
3604 ><TR
3605 ><TD
3606 ><PRE
3607 CLASS="SCREEN"
3608 >+filter{content-cookies}     # Kill cookies that come in the HTML or JS content</PRE
3609 ></TD
3610 ></TR
3611 ></TABLE
3612 >
3613    </P
3614 ><P
3615 >    <A
3616 NAME="FILTER-REFRESH-TAGS"
3617 ></A
3618 >
3619     <TABLE
3620 BORDER="0"
3621 BGCOLOR="#E0E0E0"
3622 WIDTH="90%"
3623 ><TR
3624 ><TD
3625 ><PRE
3626 CLASS="SCREEN"
3627 >+filter{refresh-tags}        # Kill automatic refresh tags (for dial-on-demand setups)</PRE
3628 ></TD
3629 ></TR
3630 ></TABLE
3631 >
3632    </P
3633 ><P
3634 >    <A
3635 NAME="FILTER-UNSOLICITED-POPUPS"
3636 ></A
3637 >
3638     <TABLE
3639 BORDER="0"
3640 BGCOLOR="#E0E0E0"
3641 WIDTH="90%"
3642 ><TR
3643 ><TD
3644 ><PRE
3645 CLASS="SCREEN"
3646 >+filter{unsolicited-popups}  # Disable only unsolicited pop-up windows. Useful if your browser lacks this ability.</PRE
3647 ></TD
3648 ></TR
3649 ></TABLE
3650 >
3651    </P
3652 ><P
3653 >    <A
3654 NAME="FILTER-ALL-POPUPS"
3655 ></A
3656 >
3657     <TABLE
3658 BORDER="0"
3659 BGCOLOR="#E0E0E0"
3660 WIDTH="90%"
3661 ><TR
3662 ><TD
3663 ><PRE
3664 CLASS="SCREEN"
3665 >+filter{all-popups}          # Kill all popups in JavaScript and HTML. Useful if your browser lacks this ability.</PRE
3666 ></TD
3667 ></TR
3668 ></TABLE
3669 >
3670    </P
3671 ><P
3672 >    <A
3673 NAME="FILTER-IMG-REORDER"
3674 ></A
3675 >
3676     <TABLE
3677 BORDER="0"
3678 BGCOLOR="#E0E0E0"
3679 WIDTH="90%"
3680 ><TR
3681 ><TD
3682 ><PRE
3683 CLASS="SCREEN"
3684 >+filter{img-reorder}         # Reorder attributes in &#60;img&#62; tags to make the banners-by-* filters more effective</PRE
3685 ></TD
3686 ></TR
3687 ></TABLE
3688 >
3689    </P
3690 ><P
3691 >    <A
3692 NAME="FILTER-BANNERS-BY-SIZE"
3693 ></A
3694 >
3695     <TABLE
3696 BORDER="0"
3697 BGCOLOR="#E0E0E0"
3698 WIDTH="90%"
3699 ><TR
3700 ><TD
3701 ><PRE
3702 CLASS="SCREEN"
3703 >+filter{banners-by-size}     # Kill banners by size</PRE
3704 ></TD
3705 ></TR
3706 ></TABLE
3707 >
3708    </P
3709 ><P
3710 >    <A
3711 NAME="FILTER-BANNERS-BY-LINK"
3712 ></A
3713 >
3714     <TABLE
3715 BORDER="0"
3716 BGCOLOR="#E0E0E0"
3717 WIDTH="90%"
3718 ><TR
3719 ><TD
3720 ><PRE
3721 CLASS="SCREEN"
3722 >+filter{banners-by-link}     # Kill banners by their links to known clicktrackers</PRE
3723 ></TD
3724 ></TR
3725 ></TABLE
3726 >
3727    </P
3728 ><P
3729 >    <A
3730 NAME="FILTER-WEBBUGS"
3731 ></A
3732 >
3733     <TABLE
3734 BORDER="0"
3735 BGCOLOR="#E0E0E0"
3736 WIDTH="90%"
3737 ><TR
3738 ><TD
3739 ><PRE
3740 CLASS="SCREEN"
3741 >+filter{webbugs}             # Squish WebBugs (1x1 invisible GIFs used for user tracking)</PRE
3742 ></TD
3743 ></TR
3744 ></TABLE
3745 >
3746    </P
3747 ><P
3748 >    <A
3749 NAME="FILTER-TINY-TEXTFORMS"
3750 ></A
3751 >
3752     <TABLE
3753 BORDER="0"
3754 BGCOLOR="#E0E0E0"
3755 WIDTH="90%"
3756 ><TR
3757 ><TD
3758 ><PRE
3759 CLASS="SCREEN"
3760 >+filter{tiny-textforms}      # Extend those tiny textareas up to 40x80 and kill the hard wrap</PRE
3761 ></TD
3762 ></TR
3763 ></TABLE
3764 >
3765    </P
3766 ><P
3767 >    <A
3768 NAME="FILTER-JUMPING-WINDOWS"
3769 ></A
3770 >
3771     <TABLE
3772 BORDER="0"
3773 BGCOLOR="#E0E0E0"
3774 WIDTH="90%"
3775 ><TR
3776 ><TD
3777 ><PRE
3778 CLASS="SCREEN"
3779 >+filter{jumping-windows}     # Prevent windows from resizing and moving themselves</PRE
3780 ></TD
3781 ></TR
3782 ></TABLE
3783 >
3784    </P
3785 ><P
3786 >    <A
3787 NAME="FILTER-FRAMESET-BORDERS"
3788 ></A
3789 >
3790     <TABLE
3791 BORDER="0"
3792 BGCOLOR="#E0E0E0"
3793 WIDTH="90%"
3794 ><TR
3795 ><TD
3796 ><PRE
3797 CLASS="SCREEN"
3798 >+filter{frameset-borders}    # Give frames a border and make them resizeable</PRE
3799 ></TD
3800 ></TR
3801 ></TABLE
3802 >
3803    </P
3804 ><P
3805 >    <A
3806 NAME="FILTER-DEMORONIZER"
3807 ></A
3808 >
3809     <TABLE
3810 BORDER="0"
3811 BGCOLOR="#E0E0E0"
3812 WIDTH="90%"
3813 ><TR
3814 ><TD
3815 ><PRE
3816 CLASS="SCREEN"
3817 >+filter{demoronizer}         # Fix MS's non-standard use of standard charsets</PRE
3818 ></TD
3819 ></TR
3820 ></TABLE
3821 >
3822    </P
3823 ><P
3824 >    <A
3825 NAME="FILTER-SHOCKWAVE-FLASH"
3826 ></A
3827 >
3828     <TABLE
3829 BORDER="0"
3830 BGCOLOR="#E0E0E0"
3831 WIDTH="90%"
3832 ><TR
3833 ><TD
3834 ><PRE
3835 CLASS="SCREEN"
3836 >+filter{shockwave-flash}     # Kill embedded Shockwave Flash objects</PRE
3837 ></TD
3838 ></TR
3839 ></TABLE
3840 >
3841    </P
3842 ><P
3843 >    <A
3844 NAME="FILTER-QUICKTIME-KIOSKMODE"
3845 ></A
3846 >
3847     <TABLE
3848 BORDER="0"
3849 BGCOLOR="#E0E0E0"
3850 WIDTH="90%"
3851 ><TR
3852 ><TD
3853 ><PRE
3854 CLASS="SCREEN"
3855 >+filter{quicktime-kioskmode} # Make Quicktime movies savable</PRE
3856 ></TD
3857 ></TR
3858 ></TABLE
3859 >
3860    </P
3861 ><P
3862 >    <A
3863 NAME="FILTER-FUN"
3864 ></A
3865 >
3866     <TABLE
3867 BORDER="0"
3868 BGCOLOR="#E0E0E0"
3869 WIDTH="90%"
3870 ><TR
3871 ><TD
3872 ><PRE
3873 CLASS="SCREEN"
3874 >+filter{fun}                 # Text replacements for subversive browsing fun!</PRE
3875 ></TD
3876 ></TR
3877 ></TABLE
3878 >
3879    </P
3880 ><P
3881 >    <A
3882 NAME="FILTER-CRUDE-PARENTAL"
3883 ></A
3884 >
3885     <TABLE
3886 BORDER="0"
3887 BGCOLOR="#E0E0E0"
3888 WIDTH="90%"
3889 ><TR
3890 ><TD
3891 ><PRE
3892 CLASS="SCREEN"
3893 >+filter{crude-parental}      # Crude parental filtering (demo only)</PRE
3894 ></TD
3895 ></TR
3896 ></TABLE
3897 >
3898    </P
3899 ><P
3900 >    <A
3901 NAME="FILTER-IE-EXPLOITS"
3902 ></A
3903 >
3904     <TABLE
3905 BORDER="0"
3906 BGCOLOR="#E0E0E0"
3907 WIDTH="90%"
3908 ><TR
3909 ><TD
3910 ><PRE
3911 CLASS="SCREEN"
3912 >+filter{ie-exploits}         # Disable a known Internet Explorer bug exploits</PRE
3913 ></TD
3914 ></TR
3915 ></TABLE
3916 >
3917    </P
3918 ><P
3919 >    <A
3920 NAME="FILTER-SITE-SPECIFICS"
3921 ></A
3922 >
3923     <TABLE
3924 BORDER="0"
3925 BGCOLOR="#E0E0E0"
3926 WIDTH="90%"
3927 ><TR
3928 ><TD
3929 ><PRE
3930 CLASS="SCREEN"
3931 >+filter{site-specifics}      # Custom filters for specific site related problems</PRE
3932 ></TD
3933 ></TR
3934 ></TABLE
3935 >
3936    </P
3937 ><P
3938 >    <A
3939 NAME="FILTER-GOOGLE"
3940 ></A
3941 >
3942     <TABLE
3943 BORDER="0"
3944 BGCOLOR="#E0E0E0"
3945 WIDTH="90%"
3946 ><TR
3947 ><TD
3948 ><PRE
3949 CLASS="SCREEN"
3950 >+filter{google}              # Removes text ads and other Google specific improvements</PRE
3951 ></TD
3952 ></TR
3953 ></TABLE
3954 >
3955    </P
3956 ><P
3957 >    <A
3958 NAME="FILTER-YAHOO"
3959 ></A
3960 >
3961     <TABLE
3962 BORDER="0"
3963 BGCOLOR="#E0E0E0"
3964 WIDTH="90%"
3965 ><TR
3966 ><TD
3967 ><PRE
3968 CLASS="SCREEN"
3969 >+filter{yahoo}               # Removes text ads and other Yahoo specific improvements</PRE
3970 ></TD
3971 ></TR
3972 ></TABLE
3973 >
3974    </P
3975 ><P
3976 >    <A
3977 NAME="FILTER-MSN"
3978 ></A
3979 >
3980     <TABLE
3981 BORDER="0"
3982 BGCOLOR="#E0E0E0"
3983 WIDTH="90%"
3984 ><TR
3985 ><TD
3986 ><PRE
3987 CLASS="SCREEN"
3988 >+filter{msn}                 # Removes text ads and other MSN specific improvements</PRE
3989 ></TD
3990 ></TR
3991 ></TABLE
3992 >
3993    </P
3994 ><P
3995 >    <A
3996 NAME="FILTER-BLOGSPOT"
3997 ></A
3998 >
3999     <TABLE
4000 BORDER="0"
4001 BGCOLOR="#E0E0E0"
4002 WIDTH="90%"
4003 ><TR
4004 ><TD
4005 ><PRE
4006 CLASS="SCREEN"
4007 >+filter{blogspot}            # Cleans up Blogspot blogs</PRE
4008 ></TD
4009 ></TR
4010 ></TABLE
4011 >
4012    </P
4013 ><P
4014 >    <A
4015 NAME="FILTER-NO-PING"
4016 ></A
4017 >
4018     <TABLE
4019 BORDER="0"
4020 BGCOLOR="#E0E0E0"
4021 WIDTH="90%"
4022 ><TR
4023 ><TD
4024 ><PRE
4025 CLASS="SCREEN"
4026 >+filter{no-ping}             # Removes non-standard ping attributes from anchor and area tags</PRE
4027 ></TD
4028 ></TR
4029 ></TABLE
4030 >
4031    </P
4032 ></DD
4033 ></DL
4034 ></DIV
4035 ></DIV
4036 ><DIV
4037 CLASS="SECT3"
4038 ><H4
4039 CLASS="SECT3"
4040 ><A
4041 NAME="FORCE-TEXT-MODE"
4042 >8.5.15. force-text-mode</A
4043 ></H4
4044 ><P
4045 ></P
4046 ><DIV
4047 CLASS="VARIABLELIST"
4048 ><DL
4049 ><DT
4050 >Typical use:</DT
4051 ><DD
4052 ><P
4053 >Force <SPAN
4054 CLASS="APPLICATION"
4055 >Privoxy</SPAN
4056 > to treat a document as if it was in some kind of <SPAN
4057 CLASS="emphasis"
4058 ><I
4059 CLASS="EMPHASIS"
4060 >text</I
4061 ></SPAN
4062 > format.   </P
4063 ></DD
4064 ><DT
4065 >Effect:</DT
4066 ><DD
4067 ><P
4068 >    Declares a document as text, even if the <SPAN
4069 CLASS="QUOTE"
4070 >"Content-Type:"</SPAN
4071 > isn't detected as such.
4072    </P
4073 ></DD
4074 ><DT
4075 >Type:</DT
4076 ><DD
4077 ><P
4078 >Boolean.</P
4079 ></DD
4080 ><DT
4081 >Parameter:</DT
4082 ><DD
4083 ><P
4084 >    N/A
4085    </P
4086 ></DD
4087 ><DT
4088 >Notes:</DT
4089 ><DD
4090 ><P
4091 >    As explained <TT
4092 CLASS="LITERAL"
4093 ><A
4094 HREF="actions-file.html#FILTER"
4095 >above</A
4096 ></TT
4097 >,
4098     <SPAN
4099 CLASS="APPLICATION"
4100 >Privoxy</SPAN
4101 > tries to only filter files that are
4102     in some kind of text format. The same restrictions apply to
4103     <TT
4104 CLASS="LITERAL"
4105 ><A
4106 HREF="actions-file.html#CONTENT-TYPE-OVERWRITE"
4107 >content-type-overwrite</A
4108 ></TT
4109 >.
4110     <TT
4111 CLASS="LITERAL"
4112 >force-text-mode</TT
4113 > declares a document as text,
4114     without looking at the <SPAN
4115 CLASS="QUOTE"
4116 >"Content-Type:"</SPAN
4117 > first.
4118    </P
4119 ><DIV
4120 CLASS="WARNING"
4121 ><P
4122 ></P
4123 ><TABLE
4124 CLASS="WARNING"
4125 BORDER="1"
4126 WIDTH="90%"
4127 ><TR
4128 ><TD
4129 ALIGN="CENTER"
4130 ><B
4131 >Warning</B
4132 ></TD
4133 ></TR
4134 ><TR
4135 ><TD
4136 ALIGN="LEFT"
4137 ><P
4138 >     Think twice before activating this action. Filtering binary data
4139      with regular expressions can cause file damage.
4140     </P
4141 ></TD
4142 ></TR
4143 ></TABLE
4144 ></DIV
4145 ></DD
4146 ><DT
4147 >Example usage:</DT
4148 ><DD
4149 ><P
4150 >     <TABLE
4151 BORDER="0"
4152 BGCOLOR="#E0E0E0"
4153 WIDTH="90%"
4154 ><TR
4155 ><TD
4156 ><PRE
4157 CLASS="SCREEN"
4158 >+force-text-mode
4159      </PRE
4160 ></TD
4161 ></TR
4162 ></TABLE
4163 >
4164    </P
4165 ></DD
4166 ></DL
4167 ></DIV
4168 ></DIV
4169 ><DIV
4170 CLASS="SECT3"
4171 ><H4
4172 CLASS="SECT3"
4173 ><A
4174 NAME="FORWARD-OVERRIDE"
4175 >8.5.16. forward-override</A
4176 ></H4
4177 ><P
4178 ></P
4179 ><DIV
4180 CLASS="VARIABLELIST"
4181 ><DL
4182 ><DT
4183 >Typical use:</DT
4184 ><DD
4185 ><P
4186 >Change the forwarding settings based on User-Agent or request origin</P
4187 ></DD
4188 ><DT
4189 >Effect:</DT
4190 ><DD
4191 ><P
4192 >    Overrules the forward directives in the configuration file.
4193    </P
4194 ></DD
4195 ><DT
4196 >Type:</DT
4197 ><DD
4198 ><P
4199 >Multi-value.</P
4200 ></DD
4201 ><DT
4202 >Parameter:</DT
4203 ><DD
4204 ><P
4205 ></P
4206 ><UL
4207 ><LI
4208 ><P
4209 ><SPAN
4210 CLASS="QUOTE"
4211 >"forward ."</SPAN
4212 > to use a direct connection without any additional proxies.</P
4213 ></LI
4214 ><LI
4215 ><P
4216 >      <SPAN
4217 CLASS="QUOTE"
4218 >"forward 127.0.0.1:8123"</SPAN
4219 > to use the HTTP proxy listening at 127.0.0.1 port 8123.
4220      </P
4221 ></LI
4222 ><LI
4223 ><P
4224 >      <SPAN
4225 CLASS="QUOTE"
4226 >"forward-socks4a 127.0.0.1:9050 ."</SPAN
4227 > to use the socks4a proxy listening at
4228       127.0.0.1 port 9050. Replace <SPAN
4229 CLASS="QUOTE"
4230 >"forward-socks4a"</SPAN
4231 > with <SPAN
4232 CLASS="QUOTE"
4233 >"forward-socks4"</SPAN
4234 >
4235       to use a socks4 connection  (with local DNS resolution) instead.
4236      </P
4237 ></LI
4238 ><LI
4239 ><P
4240 >      <SPAN
4241 CLASS="QUOTE"
4242 >"forward-socks4a 127.0.0.1:9050 proxy.example.org:8000"</SPAN
4243 > to use the socks4a proxy
4244       listening at 127.0.0.1 port 9050 to reach the HTTP proxy listening at proxy.example.org port 8000.
4245       Replace <SPAN
4246 CLASS="QUOTE"
4247 >"forward-socks4a"</SPAN
4248 > with <SPAN
4249 CLASS="QUOTE"
4250 >"forward-socks4"</SPAN
4251 > to use a socks4 connection
4252       (with local DNS resolution) instead.
4253      </P
4254 ></LI
4255 ></UL
4256 ></DD
4257 ><DT
4258 >Notes:</DT
4259 ><DD
4260 ><P
4261 >    This action takes parameters similar to the 
4262     <A
4263 HREF="config.html#FORWARDING"
4264 >forward</A
4265 > directives in the configuration
4266     file, but without the URL pattern. It can be used as replacement, but normally it's only
4267     used in cases where matching based on the request URL isn't sufficient.
4268    </P
4269 ><DIV
4270 CLASS="WARNING"
4271 ><P
4272 ></P
4273 ><TABLE
4274 CLASS="WARNING"
4275 BORDER="1"
4276 WIDTH="90%"
4277 ><TR
4278 ><TD
4279 ALIGN="CENTER"
4280 ><B
4281 >Warning</B
4282 ></TD
4283 ></TR
4284 ><TR
4285 ><TD
4286 ALIGN="LEFT"
4287 ><P
4288 >     Please read the description for the <A
4289 HREF="config.html#FORWARDING"
4290 >forward</A
4291 > directives before
4292      using this action. Forwarding to the wrong people will reduce your privacy and increase the
4293      chances of man-in-the-middle attacks.
4294     </P
4295 ><P
4296 >     If the ports are missing or invalid, default values will be used. This might change
4297      in the future and you shouldn't rely on it. Otherwise incorrect syntax causes Privoxy
4298      to exit.
4299     </P
4300 ><P
4301 >     Use the <A
4302 HREF="http://config.privoxy.org/show-url-info"
4303 TARGET="_top"
4304 >show-url-info CGI page</A
4305 >
4306      to verify that your forward settings do what you thought the do.
4307     </P
4308 ></TD
4309 ></TR
4310 ></TABLE
4311 ></DIV
4312 ></DD
4313 ><DT
4314 >Example usage:</DT
4315 ><DD
4316 ><P
4317 >     <TABLE
4318 BORDER="0"
4319 BGCOLOR="#E0E0E0"
4320 WIDTH="90%"
4321 ><TR
4322 ><TD
4323 ><PRE
4324 CLASS="SCREEN"
4325 ># Always use direct connections for requests previously tagged as
4326 # <SPAN
4327 CLASS="QUOTE"
4328 >"User-Agent: fetch libfetch/2.0"</SPAN
4329 > and make sure
4330 # resuming downloads continues to work.
4331 # This way you can continue to use Tor for your normal browsing,
4332 # without overloading the Tor network with your FreeBSD ports updates
4333 # or downloads of bigger files like ISOs.
4334 {+forward-override{forward .} \
4335  -hide-if-modified-since      \
4336  -overwrite-last-modified     \
4337 }
4338 TAG:^User-Agent: fetch libfetch/2\.0$
4339      </PRE
4340 ></TD
4341 ></TR
4342 ></TABLE
4343 >
4344    </P
4345 ></DD
4346 ></DL
4347 ></DIV
4348 ></DIV
4349 ><DIV
4350 CLASS="SECT3"
4351 ><H4
4352 CLASS="SECT3"
4353 ><A
4354 NAME="HANDLE-AS-EMPTY-DOCUMENT"
4355 >8.5.17. handle-as-empty-document</A
4356 ></H4
4357 ><P
4358 ></P
4359 ><DIV
4360 CLASS="VARIABLELIST"
4361 ><DL
4362 ><DT
4363 >Typical use:</DT
4364 ><DD
4365 ><P
4366 >Mark URLs that should be replaced by empty documents <SPAN
4367 CLASS="emphasis"
4368 ><I
4369 CLASS="EMPHASIS"
4370 >if they get blocked</I
4371 ></SPAN
4372 ></P
4373 ></DD
4374 ><DT
4375 >Effect:</DT
4376 ><DD
4377 ><P
4378 >    This action alone doesn't do anything noticeable. It just marks URLs.
4379     If the <TT
4380 CLASS="LITERAL"
4381 ><A
4382 HREF="actions-file.html#BLOCK"
4383 >block</A
4384 ></TT
4385 > action <SPAN
4386 CLASS="emphasis"
4387 ><I
4388 CLASS="EMPHASIS"
4389 >also applies</I
4390 ></SPAN
4391 >,
4392     the presence or absence of this mark decides whether an HTML <SPAN
4393 CLASS="QUOTE"
4394 >"BLOCKED"</SPAN
4395 >
4396     page, or an empty document will be sent to the client as a substitute for the blocked content.
4397     The <SPAN
4398 CLASS="emphasis"
4399 ><I
4400 CLASS="EMPHASIS"
4401 >empty</I
4402 ></SPAN
4403 > document isn't literally empty, but actually contains a single space.
4404    </P
4405 ></DD
4406 ><DT
4407 >Type:</DT
4408 ><DD
4409 ><P
4410 >Boolean.</P
4411 ></DD
4412 ><DT
4413 >Parameter:</DT
4414 ><DD
4415 ><P
4416 >    N/A
4417    </P
4418 ></DD
4419 ><DT
4420 >Notes:</DT
4421 ><DD
4422 ><P
4423 >    Some browsers complain about syntax errors if JavaScript documents
4424     are blocked with <SPAN
4425 CLASS="APPLICATION"
4426 >Privoxy's</SPAN
4427 >
4428     default HTML page; this option can be used to silence them.
4429     And of course this action can also be used to eliminate the <SPAN
4430 CLASS="APPLICATION"
4431 >Privoxy</SPAN
4432 >
4433     BLOCKED message in frames.
4434    </P
4435 ><P
4436 >    The content type for the empty document can be specified with
4437     <TT
4438 CLASS="LITERAL"
4439 ><A
4440 HREF="actions-file.html#CONTENT-TYPE-OVERWRITE"
4441 >content-type-overwrite{}</A
4442 ></TT
4443 >,
4444     but usually this isn't necessary.
4445    </P
4446 ></DD
4447 ><DT
4448 >Example usage:</DT
4449 ><DD
4450 ><P
4451 >     <TABLE
4452 BORDER="0"
4453 BGCOLOR="#E0E0E0"
4454 WIDTH="90%"
4455 ><TR
4456 ><TD
4457 ><PRE
4458 CLASS="SCREEN"
4459 ># Block all documents on example.org that end with ".js",
4460 # but send an empty document instead of the usual HTML message. 
4461 {+block +handle-as-empty-document}
4462 example.org/.*\.js$
4463      </PRE
4464 ></TD
4465 ></TR
4466 ></TABLE
4467 >
4468    </P
4469 ></DD
4470 ></DL
4471 ></DIV
4472 ></DIV
4473 ><DIV
4474 CLASS="SECT3"
4475 ><H4
4476 CLASS="SECT3"
4477 ><A
4478 NAME="HANDLE-AS-IMAGE"
4479 >8.5.18. handle-as-image</A
4480 ></H4
4481 ><P
4482 ></P
4483 ><DIV
4484 CLASS="VARIABLELIST"
4485 ><DL
4486 ><DT
4487 >Typical use:</DT
4488 ><DD
4489 ><P
4490 >Mark URLs as belonging to images (so they'll be replaced by images <SPAN
4491 CLASS="emphasis"
4492 ><I
4493 CLASS="EMPHASIS"
4494 >if they do get blocked</I
4495 ></SPAN
4496 >, rather than HTML pages)</P
4497 ></DD
4498 ><DT
4499 >Effect:</DT
4500 ><DD
4501 ><P
4502 >    This action alone doesn't do anything noticeable. It just marks URLs as images.
4503     If the <TT
4504 CLASS="LITERAL"
4505 ><A
4506 HREF="actions-file.html#BLOCK"
4507 >block</A
4508 ></TT
4509 > action <SPAN
4510 CLASS="emphasis"
4511 ><I
4512 CLASS="EMPHASIS"
4513 >also applies</I
4514 ></SPAN
4515 >,
4516     the presence or absence of this mark decides whether an HTML <SPAN
4517 CLASS="QUOTE"
4518 >"blocked"</SPAN
4519 >
4520     page, or a replacement image (as determined by the <TT
4521 CLASS="LITERAL"
4522 ><A
4523 HREF="actions-file.html#SET-IMAGE-BLOCKER"
4524 >set-image-blocker</A
4525 ></TT
4526 > action) will be sent to the
4527     client as a substitute for the blocked content.
4528    </P
4529 ></DD
4530 ><DT
4531 >Type:</DT
4532 ><DD
4533 ><P
4534 >Boolean.</P
4535 ></DD
4536 ><DT
4537 >Parameter:</DT
4538 ><DD
4539 ><P
4540 >    N/A
4541    </P
4542 ></DD
4543 ><DT
4544 >Notes:</DT
4545 ><DD
4546 ><P
4547 >    The below generic example section is actually part of <TT
4548 CLASS="FILENAME"
4549 >default.action</TT
4550 >.
4551     It marks all URLs with well-known image file name extensions as images and should
4552     be left intact. 
4553    </P
4554 ><P
4555 >    Users will probably only want to use the handle-as-image action in conjunction with
4556     <TT
4557 CLASS="LITERAL"
4558 ><A
4559 HREF="actions-file.html#BLOCK"
4560 >block</A
4561 ></TT
4562 >, to block sources of banners, whose URLs don't
4563     reflect the file type, like in the second example section.
4564    </P
4565 ><P
4566 >    Note that you cannot treat HTML pages as images in most cases. For instance, (in-line) ad
4567     frames require an HTML page to be sent, or they won't display properly.
4568     Forcing <TT
4569 CLASS="LITERAL"
4570 >handle-as-image</TT
4571 > in this situation will not replace the
4572     ad frame with an image, but lead to error messages.
4573    </P
4574 ></DD
4575 ><DT
4576 >Example usage (sections):</DT
4577 ><DD
4578 ><P
4579 >     <TABLE
4580 BORDER="0"
4581 BGCOLOR="#E0E0E0"
4582 WIDTH="90%"
4583 ><TR
4584 ><TD
4585 ><PRE
4586 CLASS="SCREEN"
4587 ># Generic image extensions:
4588 #
4589 {+handle-as-image}
4590 /.*\.(gif|jpg|jpeg|png|bmp|ico)$
4591
4592 # These don't look like images, but they're banners and should be
4593 # blocked as images:
4594 #
4595 {+block +handle-as-image}
4596 some.nasty-banner-server.com/junk.cgi\?output=trash
4597
4598 # Banner source! Who cares if they also have non-image content?
4599 ad.doubleclick.net </PRE
4600 ></TD
4601 ></TR
4602 ></TABLE
4603 >
4604    </P
4605 ></DD
4606 ></DL
4607 ></DIV
4608 ></DIV
4609 ><DIV
4610 CLASS="SECT3"
4611 ><H4
4612 CLASS="SECT3"
4613 ><A
4614 NAME="HIDE-ACCEPT-LANGUAGE"
4615 >8.5.19. hide-accept-language</A
4616 ></H4
4617 ><P
4618 ></P
4619