Prólogo
Introducción
Lectores
Organización y contenido
Fuera del alcance del libro
Fuentes
1. Desarrollo de aplicaciones con Apache
1.1. Breve historia sobre el servidor Web Apache
1.1.1. Apache 1
1.1.2. Apache 2
1.2. Apache Software Foundation
1.2.1. Meritocracia
1.2.2. Puestos
Usuario
Desarrollador
Asignado
Miembro del PMC
Miembro del ASF
1.2.3. Filosofía
1.3. El proceso de desarrollo de Apache
1.3.1. El código base de Apache
1.3.1.1. Subversión
1.3.1.2. Bifurcaciones: enlace, desarrollo y estabilidad
1.3.1.3. Revisión y consenso
1.3.1.4. Backport
1.3.1.5. Publicación
1.3.2. Foros de desarrollo
1.3.3. Desarrolladores
1.3.4. Participación
1.4. Apache y la propiedad intelectual
1.4.1. La Licencia Apache
Libertad de expresión, no cerveza gratis
Dominio no público
No shareware, nagware o adware
No GPL
Patentes y cláusula de antipiratería
1.4.2. Propiedad intelectual de terceros
Responsabilidad
Auditoría
1.5. Lecturas complementarias
1.5.1. Foros interactivos online
Listas de correo públicas
Usenet
Chat online
1.5.2. Conferencias
1.5.3. Sitios Web
Sitios Web oficiales y semioficiales
Extensiones de terceros
Documentación sobre desarrollo
Otros tutoriales, noticias y artículos
Resumen
2. Plataforma y arquitectura de Apache
2.1. Visión general
2.2. Operación en dos fases
2.2.1. Fase de puesta en marcha
2.2.1.1. Configuración
2.2.2. Fase operativa
2.2.3. Cierre
2.3. Módulos de Multi-Procesamiento
2.3.1. El porqué de los MPM
2.3.2. MPM de la familia UNIX
2.3.3. Trabajar con MPM y sistemas operativos
2.4. Conceptos y estructuras básicos
2.4.1. request_rec
2.4.2. server_rec
2.4.3. conn_rec
2.4.4. process_rec
2.5. Otros componentes clave de la API
2.6. Bases para la configuración de Apache
2.7. Proceso de petición con Apache
2.7.1. Generación de contenidos
2.7.2. Fases del proceso de peticiones
2.7.2.1. Proceso de petición no estándar
2.7.3. Proceso de hooks
2.7.4. Eje de datos y filtros
2.7.4.1 ¿Manejador o filtros?
2.7.4.2. Ejemplos de generadores de contenido
2.7.4.3. Ejemplos de filtros
2.7.5. Orden de proceso
2.7.6. Proceso de hooks
2.8. Resumen
3. Tiempo de ejecución portátil de Apache
3.1. APR
3.2. APR-UTIL
3.3. Convenciones básicas
3.3.1. Manual de referencia: documentación API y Doxygen
3.3.2. Espacio de nombres
3.3.3. Macros de declaración
3.3.4. apr_status_t y valores devueltos
3.3.5. Compilación condicional
3.4. Gestión de recursos: pools APR
3.4.1. El problema de la gestión de recursos
Modelo constructor/destructor
Modelo recuperación de espacio inutilizado
3.4.2. Pools APR
Gestión básica de memoria
Gestión generalizada de memoria
Limpieza explícita e implícita
3.4.3. Duración de los recursos
Pools Apache
Uso de pools en Apache: proceso de una petición
Uso de pools con Apache: inicialización y configuración
Uso de pools con Apache: otros casos
3.4.4. Limitaciones de los pools
3.5. Temas APR seleccionados
3.5.1. Cadenas de literales y formatos
3.5.2. Internacionalización
3.5.3. Tiempo y fechas
3.5.4 Estructura de datos
3.5.4.1. Matrices
3.5.4.2. Tablas
3.5.4.3. Tablas hash
3.5.4.4. Listas
3.5.4.5. Bucles
3.5.5. Buckets y brigades
3.5.6. Sistema de archivos
3.5.7. Redes
3.5.8. Codificación y criptografía
3.5.9 Tratamiento URI
3.5.10. Procesos y threads
3.5.11. Recurso pooling
3.5.12. Extensiones API
3.6. Bases de datos en APR y Apache
3.6.1. DBM y apr_dmb
Ejemplo
3.6.2. Bases de datos SQL y apr_dbd
Driver de MySQL
Uso
3.7. Resumen
4. Técnicas de programación y advertencias
4.1. Convenciones de codificación con Apache
4.1.1. Líneas
4.1.2. Funciones
4.1.3. Bloques
4.1.4. Control de flujo
4.1.5. Declaraciones
4.1.6. Comentarios
4.2. Gestión de los datos de un módulo
4.2.1. Vectores de configuración
4.2.2. Duración de los ámbitos
4.2.2.1. Datos de configuración
4.2.2.2. Datos de petición
4.2.2.3. Datos de conexión
4.2.2.4. Datos persistentes
4.3. Comunicación entre módulos
4.4. Asuntos relativos a la programación thread-safe
4.5. La gestión de datos persistentes
4.5.1. Seguridad thread
4.5.2. Gestión de recursos/memoria
Recuperación de espacio inutilizado
Uso de subpools
Reutilización de los recursos
Uso de reslist
4.6. Programación de plataformas cruzadas
4.6.1. Ejemplo: creación de un archivo temporal
4.7. Programación de MPM cruzados
4.7.1. Bloqueos globales y procesos
4.7.2. Memoria compartida
4.8. Programación segura
Advertencia
4.8.1. Un principio de prevención: no confíe en nada
Validar entradas proactivamente
Uso seguro de entradas
¡No corte las esquinas!
¡No tenga miedo a los errores!
4.8.2. Denegación de servicio: limite el daño
4.8.3. Ayude al sistema operativo a ayudarle
Privilegios
Interconexión
Sistema de archivos
Escribir y ejecutar
chroot
4.9. Dependencias externas y bibliotecas
4.9.1. Bibliotecas de terceros
4.9.2. Prácticas aconsejables para las bibliotecas
Seguridad thread
Iniciación y finalización
¡Precaución!
Cambios de estado de las bibliotecas
4.9.3. Construcción de módulos con bibliotecas
Flexibilidad
Efectos secundarios (bibliotecas indetectables)
Versionado
4.10. Módulos escritos y compilados en otras lenguajes
Macros expandidas
Stubs de C
4.11. Resumen
5. Escribir un generador de contenido
5.1. Módulo HelloWorld
5.1.1 El esqueleto del módulo
5.1.2. Devolver valores
5.1.3. Campo de manejador
5.1.4 El módulo completo
5.1.5. Uso del objeto request_rec
5.2. La petición, la respuesta y el entorno
5.2.1. Módulo E/S
5.2.1.1. Salida
5.2.1.2. Entrada
5.2.1.3. Errores E/S
5.2.2. Lectura de datos tipo
Análisis de datos tipo
5.3. Handler por defecto
5.4. Resumen
6. Ciclo de proceso de petición y manejadores de metadatos
6.1. HTTP
6.1.1. Protocolo HTTP
Sobre, nota de cobertura, cartas y anexos
Metadatos versus datos
Petición y respuesta
6.1.2. Anatomía de una petición HTTP
6.2. Proceso de petición en Apache
6.2.1. Trazado hasta el sistema de archivos
6.2.2. Negociación de contenido
6.2.3. Seguridad
6.2.4. Cacheo
6.2.5. Metadatos privados
6.2.6. Registro
6.3. Desvío de una petición: redireccionamiento interno
6.3.1. Documentos de error
6.3.2. Gestión de peticiones mal formuladas y mal intencionadas
6.4. Recogida de información: subpetición
6.4.1. Ejemplo
6.5. Desarrollo de un módulo
6.5.1. Seleccionar diferentes variantes de un documento
6.5.2. Tratamiento de errores y reutilización
6.6. Resumen
7. AAA: Acceso, Autentificación y Autorización
7.1. Seguridad
7.1.1. Autentificación: niveles de seguridad
7.1.1.1. Basic
7.1.1.2. Digest
7.1.1.3. Diálogo de autentificación
7.1.2. Login en la Web
7.2. Visión general de AAA
7.3. AAA en Apache 1.x y 2.0
7.4. AAA en Apache 2.1/2.2
7.4.1. Control de acceso basado en el ordenador principal
7.4.2. Autentificación: check_user_id
7.4.3. Búsqueda de contraseña
7.4.4. Autorización
7.5. Lógica AAA
7.5.1. Autentificación y requisito
7.5.2. Denegación de acceso
7.5.3. Métodos de autentificación
7.6. Escribir módulos AAA
7.6.1. Proveedor de autentificación basic
7.6.2. Función de autorización
7.6.3. Configuración
7.6.4. Proveedores de autentificación basic y digest
7.7. Ejecución de un esquema login a medida
7.7.1. Gestión de sesión con SQL
7.7.2. Trabajando sin diálogos de autentificación del navegador
7.8. Resumen
8. Módulos de filtro
8.1. Filtros de entrada y salida
8.2. Filtros de contenido, protocolo y conexión
Protocolo
Cabeceros y entidades
Bucket metadatos
8.3. Anatomía de un filtro
8.3.1. Función de rellamada
8.3.2. Canalización
8.4. API de filtros y objetos
8.4.1. Filtros de salida
8.4.2. Filtros de entrada
8.5. Objetos de filtro
8.6. Filtros E/S
8.7. Filtrado inteligente en Apache 2.2
8.7.1. Preproceso y postproceso
8.7.2. mod_filter
8.7.3. Autoconfiguración de filtros
Hook insert_filter
Configuración usando variables de entorno y notas
8.7.4. Manejo de protocolo
8.8. Ejemplo: filtrado de texto mediante la manipulación directade los buckets
8.8.1. Funciones del bucket
8.8.2. El filtro
8.9. Parseo complejo
8.10. Filtrado a través de un parseador existente
8.11. Filtro E/S a modo stdio
Advertencia
8.12. Filtros de entrada y API de solicitud
8.12.1. Mode
8.12.2. Block
8.12.3. readbytes
8.12.4. Ejemplo de filtro de entrada
8.13. Resumen
9. Configuración para módulos
9.1. Fundamentos de configuración
Configuración principal
Host virtual
Directorio
htaccess
9.2. Estructuras de datos de configuración
9.3. Configuración de un módulo
9.3.1. Configuración de módulos
9.3.2. Configuración de servidor y de directorio
¡Precaución!
9.4. Ejecución de directrices de configuración
9.4.1. Funciones de configuración
9.4.2. Ejemplo
9.4.3. Datos de usuario en las funciones de configuración
9.4.4. Funciones de configuración preempaquetadas
9.4.5. Ámbito de la configuración
9.4.6. Configuración de tipos de funciones
AP_INIT_FLAG
AP_INIT_ITERATE
AP_INIT_ITERATE2
AP_INIT_RAW_ARGS
9.5. La jerarquía de configuración
9.6. El contexto en las funciones de configuración
9.6.1. Comprobación de contexto
9.7. Contenedores de configuración a medida
9.8. Métodos de configuración alternativos
9.9. Resumen
10. Ampliación de la API
10.1. Implementación de nuevas funciones en Apache
10.1.1. Funciones de exportación
10.1.2. Funciones opcionales
Implementar las funciones
Uso de las funciones
10.2. Hooks, y hooks opcionales
10.2.1. Una visión más detallada de los hooks
10.2.2. Orden de ejecución
10.2.3. Ejemplo de hook opcional: mod_authz_dbd
Exportar un hook opcional
10.3. Proveedor API
10.3.1. Implementación
10.3.2. Implementación de un proveedor
10.4. Suministrar un servicio
10.4.1. Ejemplo: mod_dbd
Precaución
10.4.2 Implementación de reslist
10.5. Constructores API de plataforma cruzada
10.5.1. Uso de directrices de preprocesador
10.5.2. Declaración del módulo API
10.6. Resumen
11. Espacio de trabajo de la base de datos de Apache
11.1. La necesidad de un nuevo espacio de trabajo
11.1.1. Apache 1.x/2.0 versus Apache 2.2
11.1.2. Connection pooling
11.1.2.1. Modelo CGI sencillo
11.1.2.2. Módelo LAMP clásico
11.1.2.3. Ventajas de Apache 2
11.2 Arquitectura DBD
11.3. API apr_dbd
11.3.1. Operaciones con bases de datos
11.3.1.1. Sentencias SQL, sucesión de formatos, tipos de datosy etiquetas
11.3.1.2. Conjunto de resultados (cursores)
11.3.1.3. Transacciones
11.3.2. Funciones API
11.4. API ap_dbd
11.5. Un ejemplo de módulo de aplicación: mod_authn_dbd
11.6. Desarrollo de un nuevo driver DBD
11.6.1. Archivo de cabecera apr_dbd_internal.h
11.6.2. Exportar un driver
11.6.3. Las funciones del driver
11.7. Resumen
12. Depuración de módulos
12.1. Registro para la depuración
12.1.1. El registro de errores
12.1.2. Depuración
Asistencia de depuracíon para los administradores de sistemas
12.2. Ejecución de Apache bajo un programa de depuración
12.2.1. Puesta en marcha del servidor y depuración
12.2.2. Depuración y MPM
12.2.3. Localización de un fallo
12.2.4. Depuración de Core Dump
12.3. Hooks y módulos de finalidad especial
12.3.1. Módulos estándar
12.3.1.1. mod_info
12.3.1.2. mod_status
12.3.1.3. Marcador
12.3.2. Módulo de excepción fatal
12.3.2.1. mod_backtrace
12.3.2.2. mod_whatkilledus
12.3.3. Módulos para tratar un funcionamiento anómalo
12.3.3.1. mod_backdoor
12.3.3.2. Monitor de hook
12.4. Depuración de filtros
12.4.1. mod_diagnostics
12.4.1.1. Ejemplo: intervalos extraños y conexiones rotasen algunos navegadores
12.4.1.2. Ejemplo: error poco claro en una biblioteca a terceros
12.5 Resumen
Apéndice A. Licencia Apache
Estipulaciones para el uso, reproducción y distribución
Apéndice: Cómo aplicar la licencia Apache a su trabajo
Apéndice B. Acuerdos de licencia de contribución
CLA Individual
CLA Corporativo
Apéndice C. Protocolo de transferencia de hipertextos: HTTP/1.1
Estatus de este memorando
Aviso de Copyright
Resumen
1. Introducción
1.1. Finalidad
1.2. Requisitos
1.3. Terminología
1.4. Operación global
2. Convenciones de notación y gramática genérica
2.1. Razonamiento BNF
2.2. Normas básicas
3. Parámetros de protocolo
3.1. Versión HTTP
3.2. Identificadores uniformes de recursos
3.2.1. Sintaxis general
3.2.2. http URL
3.2.3. Comparación de URI
3.3. Formatos fecha/tiempo
3.3.1. Fecha completa
3.3.2. Segundos delta
3.4. Conjunto de caracteres
3.4.1. Missing charset
3.5. Codificación de contenido
3.6. Codificación de transferencia
3.6.1. Codificación de transferencia fragmentada
3.7. Tipos de medios
3.7.1. Canonicalización y textos por defecto
3.7.2. Tipos multiparte
3.8. Símbolos de producción
3.9. Valores de calidad
3.10. Etiquetas de idioma
3.11. Etiquetas de entidad
3.12. Unidades de campo
4. Mensaje HTTP
4.1. Tipos de mensajes
4.2. Cabeceras del mensaje
4.3. Cuerpo del mensaje
4.4. Longitud del mensaje
4.5. Campos de cabecera generales
5. Petición
5.1. Línea de petición
5.1.2. URI de petición
5.2. El recurso identificado por una petición
5.3. Campos de cabecera de petición
6. Respuesta
6.1. Línea de estatus
6.1.1. Código de estatus y frase explicativa
6.2. Campos de cabecera de la respuesta
7. Entidad
7.1. Campos de cabecera de la entidad
7.2. Cuerpo de la entidad
7.2.1. Tipo
7.2.2. Extensión de la entidad
8. Conexiones
8.1. Conexiones persistentes
8.1.1. Finalidad
8.1.2. Operación global
8.1.3. Servidores proxy
8.1.4. Consideraciones prácticas
8.2. Requisitos para la transmisión de un mensaje
8.2.1. Conexiones persistentes y control de flujo
8.2.2. Conexiones de monitorización para los mensajesde estatus de error
8.2.3. Uso de un estatus 100 (Continuar)
8.2.4. Comportamiento del cliente si un servidor cierrauna conexión prematuramente
9. Definiciones de método
9.1. Métodos seguros e idempotent
9.1.1. Métodos seguros
9.1.2. Métodos idempotentes
9.2. Options
9.3. Get
9.4. Head
9.5. POST
9.6. PUT
9.7. DELETE
9.8. TRACE
9.9. CONNECT
10. Definiciones del código de estatus
10.1. Informativos 1xx
10.1.1. 100 Continuar
10.1.2. 101 Cambio de protocolos
10.2. Éxito 2xx
10.2.1. 200 OK
10.2.2. 201 Creado
10.2.3. 202 Aceptado
10.2.4. 203 Información no autorizada
10.2.5. 204 Sin contenido
10.2.6. 205 Reestablecimiento del contenido
10.2.7. 206 Contenido Parcial
10.3. Redireccionamiento 3xx
10.3.1. 300 Elecciones múltiples
10.3.2. 301 Movido permanentemente
10.3.3. 302 Encontrado
10.3.4. 303 Véanse otros
10.3.5. 304 Sin modificar
10.3.6. 305 Use proxy
10.3.7. 306 No utilizado
10.3.8. 307 Redireccionamiento temporal
10.4. Error de cliente 4xx
10.4.1. 400 Respuesta errónea
10.4.2. 401 Sin autorización
10.4.3. 402 Requerimiento de pago
10.4.4. 403 Prohibido
10.4.5. 404 No encontrado
10.4.6. 405 Método no permitido
10.4.7. 406 No aceptable
10.4.8. 407 Autentificación de proxy requerida
10.4.9. 408 Tiempo de espera de la petición
10.4.10. 409 Conflicto
10.4.11. 410 Ido
10.4.12. 411 Longitud requerida
10.4.13. 412 Fallo de condición previa
10.4.14. 413 Entidad de petición demasiado larga
10.4.15. 414 URI de petición demasiado largo
10.4.16. 415 Tipo de medio no aceptado
10.4.17. 416 Campo solicitado no satisficible
10.4.18. 417 Fallo de expectativa
10.5. Error de servidor 5xx
10.5.1. 500 Error interno del servidor
10.5.2. 501 No implementado
10.5.3. 502 Pasarela errónea
10.5.4. 503 Servicio no disponible
10.5.5. 504 Tiempo de espera de la pasarela
10.5.6. 505 Versión HTTP no aceptada
11. Autentificación de acceso
12. Negociación de contenido
12.1. Negociación server-driven
12.2. Negociación agent-driven
12.3. Negociación transparente
13. Cacheo en HTTP
13.1.1. Corrección de caché
13.1.2. Advertencias
13.1.3. Mecanismos de control de caché
13.1.4. Advertencias de agente de usuario explícitas
13.1.5. Excepciones a las normas y advertencias
13.1.6. Comportamiento controlado por el cliente
13.2 .Modelo de vencimiento
13.2.1. Vencimiento especificado por el servidor
13.2.2. Vencimiento heurítico
13.2.3. Cálculo de edad
13.2.4. Cálculos de vencimiento
13.2.5. Eliminar ambigüedad a los valores de vencimiento
13.2.6. Eliminar ambigüedad de las respuestas múltiples
13.3. Modelo de validación
13.3.1. Fechas modificadas por última vez
13.3.2. Validadores de caché de etiqueta de entrada
13.3.3. Validadores débiles y fuertes
13.3.4. Normas sobre cuándo usar las etiquetas de entidady las fechas de Última-Modificación
13.3.5. Condicionales sin validar
13.4. Cacheabilidad de la respuesta
13.5. Construcción de respuestas desde los cachés
13.5.1. Cabeceras end-to-end y hop-by-hop
13.5.2. Cabeceras no modificables
13.5.3. Combinación de cabeceras
13.5.4. Combinación de campos de bytes
13.6. Cacheo de respuestas negociadas
13.7. Cachés compartidos y sin compartir
13.8. Errores o caché de respuestas incompleto
13.9. Efectos secundarios de GET y HEAD
13.10. Invalidación tras las actualizaciones o las eliminaciones
13.11. Obligación write-through
13.12. Sustitución de caché
13.13. Historiales
14. Definiciones del campo de cabecera
14.1. Aceptar
14.2. Aceptar-Charset
14.3. Aceptar-Codificación
14.4. Aceptar-Lenguage
14.5. Aceptar-Campos
14.6. Edad
14.7. Permitir
14.8. Autorización
14.9. Caché-Control
14.9.1. Qué es cacheable
14.9.2. Qué deben almacenar los cachés
14.9.3. Modificaciones del mecanismo de vencimiento básico
14.9.4. Revalidación de caché y controles de recarga
14.9.5. Directriz no-transform
14.9.6. Extensiones de control de caché
14.10. Conexión
14.11. Contenido-Codificación
14.12. Contenido-Lenguaje
14.13. Contenido-Longitud
14.14 Contenido-Localización
14.15. Entidad-MD5
14.16. Contenido-Campo
14.17. Contenido-Tipo
14.18. Fecha
14.18.1. Operación de servidor origen sin reloj
14.19. ETag
14.20 Expectativa
14.21. Vencimiento
14.22. Desde
14.23. Host
14.24. Si-Ajusta
14.25. If-Modified-Since
14.26. Si-No-Ajusta
14.27. Si-Campo
14.28. Si-Sin-Modificar-Desde
14.29. Última-Modificación
14.30. Localización
14.31. Max-Forwards
14.32. Pragma
14.33. Proxy-Autentificación
14.34. Proxy-Autorización
14.35. Campo
14.35.1. Campo de bytes
14.35.2. Peticiones de recuperación de campo
14.36. Referer
14.37. Reintentar-Después
14.38. Servidor
14.39. TE
14.40. Trailer
14.41. Transfer-Encoding
14.42. Actualización
14.43. Usuario-Agente
14.44. Variar
14.45. Via
14.46. Advertencia
14.47. WWW-Autentificación
15. Cuestiones de seguridad
15.1. Información personal
15.1.1. Abuso de la información de registro del servidor
15.1.2. Transferencia de información confidencial
15.1.3. Codificación de información confidencial en los URI
15.1.4. Asuntos de privacidad relacionados con las cabecerasAceptar
15.2. Ataques basados en los nombres de archivo y de ruta
15.3. DNS spoofing
15.4. Cabeceras Localización y spoofing
15.5. Cuestiones de Contenido-Disposición
15.6. Credenciales de autentificación y clientes holgazanes
15.7. Proxies y cacheo
15.7.1. Denegación de ataques de servicio en los proxies
16. Agradecimientos
17. Apéndices
17.1. Tipos de medios de Internet mensaje/http y aplicación/http
17.2. Tipos de medio de Internet multiparte/campo de bytes
17.3. Aplicaciones tolerantes
17.4. Diferencias entre las entidades HTTP y las entidades RFC 2045
17.4.1. Versión MIME
17.4.2. Conversión a una forma canónica
17.4.3. Conversión de formatos de fecha
17.4.4. Introducción de Contenido-Codificación
17.4.5. No Contenido-Transferencia-Codificación
17.4.6. Introducción de Transferencia-Codificación
17.4.7. MHTML y limitaciones en la longitud de línea
17.5. Características adicionales
17.5.1. Contenido-Disposición
17.6. Compatibilidad con versiones anteriores
17.6.1. Cambios desde HTTP/1.0
17.6.2. Compatibilidad con las conexiones HTTP/1.0 persistentes
17.6.3. Cambios desde RFC 2068
18. Índice
19. Declaración completa de copyright
Reconocimiento
Índice alfabético
El servidor Web Apache es, según numerosos estudios, el principal servidor de la Web desde hace diez años. Respaldado por una comunidad de desarrollo brillante, se sustenta en un amplio número de personas y organizaciones, desde gigantes de la talla de IBM hasta consultores particulares.
Transparencia y diversidad son las principales características de Apache. El código fuente es totalmente abierto. Su arquitectura modular, construida sobre un pequeño núcleo, se adapta a las necesidades específicas de cada usuario. El principal propósito de esta obra, organizada en doce capítulos y tres exhaustivos apéndices, es servir de guía a los desarrolladores que trabajen con Apache. Los comentarios y los ejemplos que presentan el manual están relacionados con el desarrollo de C, aunque la arquitectura y la API son compartidas por importantes entornos de script como mod_perl y mod_python.
© 2001-2024 Fundación Dialnet · Todos los derechos reservados