1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.es.xsl"?>
<!-- English Revision: 1673945 -->
<!-- Translated by Luis Gil de Bernabé Pfeiffer lgilbernabe[AT]apache.org -->
<!-- Reviewed by Sergio Ramos-->
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<manualpage metafile="handler.xml.meta">
<title>Uso de los Handlers en Apache</title>
<summary>
<p>Este documento describe el uso de los Handlers en Apache.</p>
</summary>
<section id="definition">
<title>¿Qué es un Handler?</title>
<related>
<modulelist>
<module>mod_actions</module>
<module>mod_asis</module>
<module>mod_cgi</module>
<module>mod_imagemap</module>
<module>mod_info</module>
<module>mod_mime</module>
<module>mod_negotiation</module>
<module>mod_status</module>
</modulelist>
<directivelist>
<directive module="mod_actions">Action</directive>
<directive module="mod_mime">AddHandler</directive>
<directive module="mod_mime">RemoveHandler</directive>
<directive module="core">SetHandler</directive>
</directivelist>
</related>
<p>Un "handler" es una representación interna de Apache de
una acción que se va a ejecutar cuando hay una llamada a un
fichero. Generalmente, los ficheros tienen handlers
implícitos, basados en el tipo de fichero de que se
trata. Normalmente, todos los ficheros son simplemente servidos
por el servidor, pero algunos tipos de ficheros se tratan de forma
diferente.</p>
<p>Handlers pueden ser usados de manera explicita,
basándose en la extensión del fichero o en
la ubicación en la que esté, se pueden especificar handlers
sin tener en cuenta el tipo de fichero que se trate. Esto es
una ventaja por dos razones. Primero, es una solución
más elegante. Segundo, porque a un fichero se le pueden
asignar tanto un tipo <strong>como</strong> un handler. (Consulte
también la sección <a
href="mod/mod_mime.html#multipleext">Ficheros y extensiones
múltiples</a>.)</p>
<p>Los Handlers pueden tanto ser compilados con el servidor
como incluidos en un módulo, o añadidos con la
directiva <directive module="mod_actions">Action</directive>. Los
handlers que vienen incluidos en el core con el servidor de la distribución
estándar de Apache son:</p>
<ul>
<li><strong>default-handler</strong>: Envía el fichero
usando el <code>default_handler()</code>, que es el handler
usado por defecto para tratar contenido
estático. (core)</li>
<li><strong>send-as-is</strong>: Envía el fichero con
cabeceras HTTP tal y como es. (<module>mod_asis</module>)</li>
<li><strong>cgi-script</strong>: Trata el fichero como un sript
CGI. (<module>mod_cgi</module>)</li>
<li><strong>imap-file</strong>: Trata el fichero como un mapa de
imágenes. (<module>mod_imagemap</module>)</li>
<li><strong>server-info</strong>: Extrae la información de
configuración del
servidor. (<module>mod_info</module>)</li>
<li><strong>server-status</strong>: Extrae el informe del estado
del servidor. (<module>mod_status</module>)</li>
<li><strong>type-map</strong>: Trata el fichero como una
correspondencia de tipos para la negociación de contenidos.
(<module>mod_negotiation</module>)</li>
</ul>
</section>
<section id="examples">
<title>Ejemplos</title>
<section id="example1">
<title>Modificar contenido estático usando un script
CGI</title>
<p>Las siguientes directivas hacen que cuando haya una
petición de ficheros con la extensión
<code>html</code> se lance el script CGI
<code>footer.pl</code>.</p>
<example>
Action add-footer /cgi-bin/footer.pl<br/>
AddHandler add-footer .html
</example>
<p>En este caso, el script CGI es el responsable de enviar el
documento originalmente solicitado (contenido en la variable de
entorno <code>PATH_TRANSLATED</code>) y de hacer cualquier
modificación o añadido deseado.</p>
</section>
<section id="example2">
<title>Archivos con cabeceras HTTP</title>
<p>Las siguientes directivas activan el handler
<code>send-as-is</code>, que se usa para ficheros que contienen
sus propias cabeceras HTTP. Todos los archivos en el directorio
<code>/web/htdocs/asis/</code> serán procesados por el
handler <code>send-as-is</code>, sin tener en cuenta su
extension.</p>
<highlight language="config">
<Directory "/web/htdocs/asis">
SetHandler send-as-is
</Directory>
</highlight>
</section>
</section>
<section id="programmer">
<title>Nota para programadores</title>
<p>Para implementar las funcionalidades de los handlers, se ha
hecho un añadido a la <a href="developer/API.html">API de
Apache</a> que puede que quiera usar. Para ser más
específicos, se ha añadido un nuevo registro a la
estructura <code>request_rec</code>:</p>
<highlight language="c">
char *handler
</highlight>
<p>Si quiere que su módulo llame a un handler , solo tiene
que añadir <code>r->handler</code> al nombre del handler
en cualquier momento antes de la fase <code>invoke_handler</code>
de la petición. Los handlers se implementan siempre como se
hacía antes, aunque usando el nombre del handler en vez de un
tipo de contenido. Aunque no es de obligado cumplimiento, la
convención de nombres para los handlers es que se usen
palabras separadas por guiones, sin barras, de manera que no se
invada el media type name-space.</p>
</section>
</manualpage>
|