Registro de errores en API HTTP
En este artículo se describen las capacidades de registro de errores de las interfaces de programación de aplicaciones (API) del Protocolo de transferencia de hipertexto (HTTP).
Versión del producto original: Windows Server 2008 R2, Windows Server 2008, Windows Server 2012 R2, Windows Server 2012, Windows 10, Windows 8.1
Número KB original: 820729
Resumen
Algunos errores que se producen en una aplicación basada en HTTP se controlan automáticamente mediante la API HTTP en lugar de pasarse de nuevo 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 aplicaciones.
En los temas siguientes se describen los diferentes aspectos del registro de errores de la API HTTP.
Configurar el registro de errores de la API HTTP
La configuración del Registro controla los errores de los 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 la 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 siguientes métodos describen la resolución del registro de errores de la API HTTP.
Configurar el registro de errores de la API HTTP
Tres valores del Registro bajo 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 Windows sistema operativo.
Debe tener credenciales de administrador/sistema local para cambiar los valores del Registro y para ver o cambiar los archivos de registro y la carpeta que los contiene.
La información de configuración en los valores del Registro se lee cuando se inicia el controlador de la API HTTP. Por lo tanto, si cambia la configuración, debe detenerse y, a continuación, 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 | Un 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 | Una 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 total. Otros usuarios no tienen acceso. El siguiente ejemplo es la carpeta predeterminada cuando no se especifica la carpeta en el Registro: %SystemRoot%\System32\LogFilesEl 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, excepto 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 de un registro de errores.
| Field | 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 YYYY-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, 5:30 PM (UTC) se expresa como 17:30:00. |
| Dirección de protocolo de Internet de cliente (IP) | La 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 | La versión del protocolo que se está utilizando. Si la conexión no se ha analizado lo suficiente para determinar la versión del protocolo, se usa un guión (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 que se analiza es mayor o igual que 10, la versión se registra como HTTP/?.?. |
| Verbo | El verbo indica la última solicitud que se analiza. Se incluyen verbos desconocidos, pero cualquier verbo con más de 255 bytes se trunca a esta longitud. Si un verbo no está disponible, se usa un guión (0x002D) como marcador de posición para el campo vacío. |
| CookedURL + Query | La dirección URL y cualquier consulta asociada se registran como un campo separado por un signo de interrogación (0x3F). Este campo se trunca con su límite de longitud de 4.096 bytes. Si esta dirección URL se analiza ("cocinó"), se registra con la conversión de página de código local y se trata como un campo Unicode. Si esta dirección URL no se ha analizado ("cocinó") 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 guión (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 guión (0x002D) como marcador de posición para el campo vacío. |
| SiteId | No se usa en esta versión de la API HTTP. Un guión de marcador de posición (0x002D) siempre aparece 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 son 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 descartadas que se controlan incorrectamente.
En la siguiente lista 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. Después de que la API HTTP envíe la respuesta de error, cierra la conexión.Tiempos de espera de conexión
La API HTTP tiene el tiempo de espera de una conexión. Si una solicitud está pendiente cuando se produce 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 de modo de usuario se detiene inesperadamente mientras aún hay solicitudes en cola que se enruten a ese proceso. La API HTTP registra las solicitudes huérfanas en el registro de errores. Los tipos de error específicos se denominan por 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 | Se produjo un error de servicio no disponible (un error HTTP 503). El servicio no está disponible porque los errores de la aplicación provocaron que la aplicación se desconectara. |
| AppPoolTimer | Se produjo un error de servicio no disponible (un error HTTP 503). El servicio no está disponible porque el proceso del grupo de aplicaciones está demasiado ocupado para controlar la solicitud. |
| AppShutdown | Se produjo un error de servicio no disponible (un error HTTP 503). El servicio no está disponible porque la aplicación se apaga automáticamente en respuesta a la directiva de administrador. |
| BadRequest | Se produjo un 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 ha dejado inesperadamente o huérfana una solicitud pendiente cerrando su identificador. |
| Connection_Abandoned_By_ReqQueue | Un proceso de trabajo del grupo de aplicaciones ha dejado inesperadamente o huérfana una solicitud pendiente cerrando su identificador. Específico para Windows Vista y versiones posteriores y para 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 descartadas entre los clientes y el servidor está llena. Específico para Windows Vista y versiones posteriores y para Windows Server 2008 y versiones posteriores. |
| ConnLimit | Se produjo un error de servicio no disponible (un 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 |
| Deshabilitado | Se produjo un error de servicio no disponible (un 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 encontró un elemento o secuencia prohibidos durante el análisis. |
| Encabezado | Se produjo un error de análisis en un encabezado. |
| Nombre de host | Se produjo un error de análisis al procesar un nombre de host. |
| Interno | Se produjo un error de servidor interno (un error HTTP 500). |
| Invalid_CR/LF | Se produjo una devolución de carro o una fuente de línea no es así. |
| LengthRequired | Faltaba un valor de longitud necesario. |
| N/D | Se produjo un error de servicio no disponible (un 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 | Se produjo un error no implementado (un error HTTP 501) o se produjo un error de servicio no disponible (un error HTTP 503) debido a una codificación de transferencia desconocida. |
| Número | Se produjo un error de análisis al procesar un número. |
| Condición previa | Faltaba una condición previa necesaria. |
| QueueFull | Se produjo un error de servicio no disponible (un 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 esperaba demasiado tiempo en una cola del grupo de aplicaciones para que una aplicación de servidor desa colas 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 Timer_EntityBody usuario. Al principio, 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 de 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 fue más lenta que la predeterminada de 240 bytes/s. Que se puede controlar con la propiedad de metabase MinFileBytesPerSec. |
| Timer_ReqQueue | La conexión expiró porque una solicitud esperaba demasiado tiempo en una cola del grupo de aplicaciones para que una aplicación de servidor se desa colase. Esta duración de tiempo de espera es ConnectionTimeout. De forma predeterminada, este valor se establece en dos minutos. Específico para Windows Vista y versiones posteriores y para Windows Server 2008 y versiones posteriores. |
| Timer_Response | Reservado. Actualmente no se usa. |
| Timer_SslRenegotiation |
La conexión expiró porque la renegociación de la capa de sockets seguros (SSL) entre el cliente y el servidor tardó más tiempo que el tiempo de espera predeterminado de dos minutos. |
| URL | Se produjo un error de análisis al procesar una dirección URL. |
| URL_Length | Una dirección URL superó el tamaño máximo permitido. |
| Verbo | Se produjo un error de análisis al procesar un verbo. |
| Version_N/S | Se produjo un error de versión no compatible (un error HTTP 505). |