Registro de errores en las API HTTP

En este artículo se describen las funcionalidades de registro de errores de las interfaces de programación de aplicaciones (API) del Protocolo de transferencia de hipertexto (HTTP).

Versión original del producto: Windows Server 2008 R2, Windows Server 2008, Windows Server 2012 R2, Windows Server 2012, Windows 10, Windows 8.1
Número de KB original: 820729

Resumen

La API HTTP controla automáticamente algunos errores que se producen en una aplicación basada en HTTP en lugar de pasarse a una aplicación para su control. Este comportamiento se produce porque la frecuencia de estos errores podría inundar un registro de eventos o un controlador de aplicación.

En los temas siguientes se describen los distintos aspectos del registro de errores de la API HTTP.

Los métodos siguientes describen la resolución del registro de errores de la API HTTP.

Configuración del registro de errores de la API HTTP

Tres valores del Registro en una clave HTTP \Parameters controlan el registro de errores de la API HTTP. Estas claves se encuentran en la clave del Registro: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters.

Nota:

La ubicación y la forma de los valores de configuración pueden cambiar en versiones posteriores del sistema operativo Windows.

Debe tener credenciales de administrador o sistema local para cambiar los valores del Registro y ver o cambiar los archivos de registro y la carpeta que los contiene.

La información de configuración de los valores del Registro se lee cuando se inicia el controlador de API HTTP. Por lo tanto, si cambia la configuración, debe detener y reiniciar el controlador para leer los nuevos valores. Para ello, escriba los siguientes comandos de consola:

net stop http
net start http

La siguiente convención de nomenclatura se usa para asignar un nombre a los archivos de registro:
httperr + número de secuencia + .log
Ejemplo: httperr4.log

Los archivos de registro se ciclos cuando alcanzan el tamaño máximo que especifica el valor del Registro ErrorLogFileTruncateSize. Este valor no puede ser inferior a 1 megabyte (MB).

Si la configuración del registro de errores no es válida o si se produce algún tipo de error mientras la API HTTP escribe en los archivos de registro, la API HTTP usa el registro de eventos para notificar a los administradores que no se está produciendo el registro de errores.

En la tabla siguiente se describen los valores de configuración del Registro.

Valor del Registro Descripción
EnableErrorLogging DWORD que puede establecer en TRUE para habilitar el registro de errores o en FALSE para deshabilitarlo. El valor predeterminado es TRUE.
ErrorLogFileTruncateSize DWORD que especifica el tamaño máximo de un archivo de registro de errores, en bytes. El valor predeterminado es 1 MB (0x100000).

El valor especificado no puede ser menor que el valor predeterminado.
ErrorLoggingDir Cadena que especifica la carpeta donde la API HTTP coloca sus archivos de registro.

La API HTTP crea una subcarpeta HTTPERR en la carpeta especificada y, a continuación, almacena los archivos de registro en la subcarpeta . Esta subcarpeta y los archivos de registro reciben la misma configuración de permisos. Las cuentas de administrador y de sistema local tienen acceso completo. Otros usuarios no tienen acceso.

El ejemplo siguiente es la carpeta predeterminada cuando la carpeta no se especifica en el Registro:
%SystemRoot%\System32\LogFiles

El valor de cadena ErrorLoggingDir debe ser una ruta de acceso local completa. Sin embargo, puede contener %SystemRoot%. No se puede usar una unidad de red o un recurso compartido de red.

Formato de los registros de errores de la API HTTP

Por lo general, los archivos de registro de errores de la API HTTP tienen el mismo formato que los registros de errores de W3C, salvo que los archivos de registro de errores de la API HTTP no contienen encabezados de columna. Cada línea de un registro de errores de la API HTTP registra un error. Los campos aparecen en un orden específico. Un solo carácter de espacio (0x0020) separa cada campo del campo anterior. En cada campo, los signos más (0x002B) reemplazan los caracteres de espacio, las pestañas y los caracteres de control no imprimibles.

En la tabla siguiente se identifican los campos y el orden de los campos en un registro de errores.

Campo Descripción
Fecha El campo Fecha sigue el formato W3C. Este campo se basa en la hora universal coordinada (UTC). El campo Fecha siempre tiene 10 caracteres en forma de AAAA-MM-DD. Por ejemplo, el 1 de mayo de 2003 se expresa como 2003-05-01.
Hora El campo Hora sigue el formato W3C. Este campo se basa en UTC. El campo de hora siempre tiene ocho caracteres en forma de MM:HH:SS. Por ejemplo, las 5:30 p. m. (UTC) se expresan como 17:30:00.
Dirección del protocolo de Internet de cliente (IP) Dirección IP del cliente afectado. El valor de este campo puede ser una dirección IPv4 o una dirección IPv6. Si la dirección IP del cliente es una dirección IPv6, el campo ScopeId también se incluye en la dirección.
Puerto de cliente Número de puerto del cliente afectado.
Dirección IP del servidor Dirección IP del servidor afectado. El valor de este campo puede ser una dirección IPv4 o una dirección IPv6. Si la dirección IP del servidor es una dirección IPv6, el campo ScopeId también se incluye en la dirección.
Puerto de servidor Número de puerto del servidor afectado.
Versión del protocolo Versión del protocolo que se usa.

Si la conexión no se ha analizado lo suficiente para determinar la versión del protocolo, se usa un guion (0x002D) como marcador de posición para el campo vacío.

Si el número de versión principal o el número de versión secundaria analizado es mayor o igual que 10, la versión se registra como HTTP/?.?.
Verbo El verbo indica la última solicitud que se analiza pasa. Se incluyen verbos desconocidos, pero cualquier verbo que tenga más de 255 bytes se trunca a esta longitud. Si un verbo no está disponible, se usa un guion (0x002D) como marcador de posición para el campo vacío.
CookedURL + Query La dirección URL y cualquier consulta asociada a ella se registran como un campo separado por un signo de interrogación (0x3F). Este campo se trunca en su límite de longitud de 4096 bytes.

Si esta dirección URL se ha analizado ("cocinada"), se registra con la conversión de página de códigos local y se trata como un campo Unicode.

Si esta dirección URL no se ha analizado ("cocinada") en el momento del registro, se copia exactamente, sin ninguna conversión Unicode.

Si la API HTTP no puede analizar esta dirección URL, se usa un guion (0x002D) como marcador de posición para el campo vacío.
Estado del protocolo El estado del protocolo no puede ser mayor que 999.

Si el estado del protocolo de la respuesta a una solicitud está disponible, se registra en este campo.

Si el estado del protocolo no está disponible, se usa un guion (0x002D) como marcador de posición para el campo vacío.
SiteId No se usa en esta versión de la API HTTP. Siempre aparece un guion de marcador de posición (0x002D) en este campo.
Frase de motivo Este campo contiene una cadena que identifica el tipo de error que se está registrando. Este campo nunca se deja vacío.
Nombre de cola Es el nombre de la cola de solicitudes.

Las siguientes líneas de ejemplo proceden de un registro de errores de la API HTTP:

2002-07-05 18:45:09 172.31.77.6 2094 172.31.77.6 80 HTTP/1.1 GET /qos/1kbfile.txt 503 - ConnLimit  
2002-07-05 19:51:59 127.0.0.1 2780 127.0.0.1 80 HTTP/1.1 GET /ThisIsMyUrl.htm 400 - Hostname  
2002-07-05 19:53:00 127.0.0.1 2894 127.0.0.1 80 HTTP/2.0 GET / 505 - Version_N/S  
2002-07-05 20:06:01 172.31.77.6 64388 127.0.0.1 80 - - - - - Timer_MinBytesPerSecond

Tipos de errores que registra la API HTTP

La API HTTP registra respuestas de error a clientes, tiempos de espera de conexión, solicitudes huérfanas y conexiones eliminadas que se controlan incorrectamente.

En la lista siguiente se identifican los tipos de errores que registra la API HTTP:

  • Respuestas a clientes
    La API HTTP envía una respuesta de error a un cliente, por ejemplo, un error 400 causado por un error de análisis en la última solicitud recibida. Una vez que la API HTTP envía la respuesta de error, cierra la conexión.

  • Tiempos de espera de conexión
    La API HTTP agota el tiempo de espera de una conexión. Si una solicitud está pendiente cuando se agota el tiempo de espera de la conexión, la solicitud se usa para proporcionar más información sobre la conexión en el registro de errores.

  • Solicitudes huérfanas
    Un proceso en modo de usuario se detiene inesperadamente mientras todavía hay solicitudes en cola que se enrutan a ese proceso. La API HTTP registra las solicitudes huérfanas en el registro de errores. Los tipos de error específicos se denominan mediante cadenas de frase de motivo que siempre aparecen como el último campo de cada línea de error. En la tabla siguiente se identifican las frases de motivo de la API HTTP.

Frase de motivo Descripción
AppOffline Error de servicio no disponible (error HTTP 503). El servicio no está disponible porque los errores de la aplicación provocaron que la aplicación se desconectara.
AppPoolTimer Error de servicio no disponible (error HTTP 503). El servicio no está disponible porque el proceso del grupo de aplicaciones está demasiado ocupado para controlar la solicitud.
AppShutdown Error de servicio no disponible (error HTTP 503). El servicio no está disponible porque la aplicación se cierra automáticamente en respuesta a la directiva de administrador.
BadRequest Error de análisis al procesar una solicitud.
Client_Reset La conexión entre el cliente y el servidor se cerró antes de que se pudiera asignar la solicitud a un proceso de trabajo. La causa más común de este comportamiento es que el cliente cierra prematuramente su conexión con el servidor.
Connection_Abandoned_By_AppPool Un proceso de trabajo del grupo de aplicaciones se ha cerrado inesperadamente o ha huérfano una solicitud pendiente cerrando su identificador.
Connection_Abandoned_By_ReqQueue Un proceso de trabajo del grupo de aplicaciones se ha cerrado inesperadamente o ha huérfano una solicitud pendiente cerrando su identificador. Específico de Windows Vista y versiones posteriores y de Windows Server 2008 y versiones posteriores.
Connection_Dropped La conexión entre el cliente y el servidor se cerró antes de que el servidor pudiera enviar su paquete de respuesta final. La causa más común de este comportamiento es que el cliente cierra prematuramente su conexión con el servidor.
Connection_Dropped_List_Full La lista de conexiones eliminadas entre los clientes y el servidor está completa. Específico de Windows Vista y versiones posteriores y de Windows Server 2008 y versiones posteriores.
ConnLimit Error de servicio no disponible (error HTTP 503). El servicio no está disponible porque se ha alcanzado o superado el límite de conexión de nivel de sitio.
Connections_Refused La memoria NonPagedPool del kernel ha caído por debajo de 20 MB y http.sys ha dejado de recibir nuevas conexiones.
Deshabilitada Error de servicio no disponible (error HTTP 503). El servicio no está disponible porque un administrador ha desconectado la aplicación.
EntityTooLarge Una entidad superó el tamaño máximo permitido.
FieldLength Se superó un límite de longitud de campo.
Prohibido (Forbidden) Se cumplió un elemento o secuencia prohibidos durante el análisis.
Encabezado Error de análisis en un encabezado.
Nombre de host Error de análisis al procesar un nombre de host.
Interno Error interno del servidor (error HTTP 500).
Invalid_CR/LF Se produjo un retorno de carro o avance de línea ilegal.
LengthRequired Faltaba un valor de longitud necesario.
N/D Error de servicio no disponible (error HTTP 503). El servicio no está disponible porque se produjo un error interno (como un error de asignación de memoria o un conflicto de lista de reserva de direcciones URL).
N/I Error no implementado (error HTTP 501) o error de servicio no disponible (error HTTP 503) debido a una codificación de transferencia desconocida.
Número Error de análisis al procesar un número.
Condición previa Faltaba una condición previa necesaria.
QueueFull Error de servicio no disponible (error HTTP 503). El servicio no está disponible porque la cola de solicitudes de aplicación está llena.
RequestLength Se superó un límite de longitud de solicitud.
Timer_AppPool La conexión expiró porque una solicitud esperó demasiado tiempo en una cola de grupo de aplicaciones para que una aplicación de servidor la desafiera y la procesara. Esta duración de tiempo de espera es ConnectionTimeout. De forma predeterminada, este valor se establece en dos minutos.
Timer_ConnectionIdle La conexión expiró y permanece inactiva. La duración predeterminada de ConnectionTimeout es de dos minutos.
Timer_EntityBody La conexión expiró antes de que llegara el cuerpo de la entidad de solicitud. Cuando una solicitud tiene claramente un cuerpo de entidad, la API HTTP activa el temporizador de Timer_EntityBody. En primer lugar, el límite de este temporizador se establece en el valor ConnectionTimeout (normalmente, dos minutos). Cada vez que se recibe otra indicación de datos en esta solicitud, la API HTTP restablece el temporizador para dar a la conexión dos minutos más (o lo que se especifique en ConnectionTimeout).
Timer_HeaderWait La conexión expiró porque el análisis del encabezado de una solicitud tardó más tiempo que el límite predeterminado de dos minutos.
Timer_MinBytesPerSecond La conexión expiró porque el cliente no estaba recibiendo una respuesta a una velocidad razonable. La velocidad de envío de respuesta era más lenta que el valor predeterminado de 240 bytes por segundo. Que se puede controlar con la propiedad metabase MinFileBytesPerSec.
Timer_ReqQueue La conexión expiró porque una solicitud esperó demasiado tiempo en una cola de grupo de aplicaciones para que una aplicación de servidor se desaplase. Esta duración de tiempo de espera es ConnectionTimeout. De forma predeterminada, este valor se establece en dos minutos. Específico de Windows Vista y versiones posteriores y de Windows Server 2008 y versiones posteriores.
Timer_Response Reservado. Actualmente no se usa.
Timer_SslRenegotiation
La conexión expiró porque la renegociación de capa de sockets seguros (SSL) entre el cliente y el servidor tardó más de dos minutos en agotar el tiempo de espera predeterminado.
URL Error de análisis al procesar una dirección URL.
URL_Length Una dirección URL superó el tamaño máximo permitido.
Verbo Error de análisis al procesar un verbo.
Version_N/S Error no compatible con la versión (error HTTP 505).