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.
Configuración del registro de errores de la API HTTP
La configuración del Registro controla los errores de registros de la API HTTP, el tamaño máximo permitido de los archivos de registro y la ubicación de los archivos de registro.Formato de los registros de errores de la API HTTP
La API HTTP crea archivos de registro que siguen las convenciones de archivos de registro de World Wide Web Consortium (W3C). Puede usar herramientas estándar para analizar estos archivos de registro. Sin embargo, a diferencia de los archivos de registro W3C, los archivos de registro de API HTTP no contienen los nombres de las columnas.Tipos de errores que registra la API HTTP
La API HTTP registra muchos errores comunes.
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). |
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de