Log de erros em APIs HTTP

Este artigo descreve os recursos de registro em log de erros das APIs (interfaces de programação de aplicativo HTTP) do HyperText Transfer Protocol.

Versão original do produto: 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

Resumo

Alguns erros que ocorrem em um aplicativo baseado em HTTP são tratados automaticamente pela API HTTP em vez de serem passados de volta para um aplicativo para tratamento. Esse comportamento ocorre porque a frequência desses erros pode inundar um log de eventos ou um manipulador de aplicativos.

Os tópicos a seguir descrevem os diferentes aspectos do log de erros da API HTTP.

  • Configurar o log de erros da API HTTP
    As configurações do registro controlam os erros de logs da API HTTP, o tamanho máximo permitido dos arquivos de log e a localização dos arquivos de log.

  • Formato dos logs de erros da API HTTP
    A API HTTP cria arquivos de log que seguem as convenções de arquivo de log do World Wide Web Consortium (W3C). Você pode usar ferramentas padrão para analisar esses arquivos de log. No entanto, ao contrário dos arquivos de log W3C, os arquivos de log da API HTTP não contêm os nomes das colunas.

  • Tipos de erros que a API HTTP registra
    A API HTTP registra muitos erros comuns.

Os métodos a seguir descrevem a resolução do log de erros da API HTTP.

Configurar o log de erros da API HTTP

Três valores de registro em uma chave HTTP \Parameters controlam o log de erros da API HTTP. Essas chaves estão localizadas na chave do registro: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters.

Observação

O local e a forma dos valores de configuração podem ser alterados em versões posteriores do sistema operacional Windows.

Você deve ter credenciais de Administrador/Sistema Local para alterar os valores do registro e exibir ou alterar os arquivos de log e a pasta que os contém.

As informações de configuração nos valores do registro são lidas quando o driver da API HTTP é iniciado. Portanto, se você alterar as configurações, deve parar e reiniciar o driver para ler os novos valores. Para fazer isso, digite os seguintes comandos de console:

net stop http
net start http

A seguinte convenção de nomenclatura é usada para nomear os arquivos de log:
httperr + número de sequência + .log
Exemplo: httperr4.log

Os arquivos de log são ciclo quando atingem o tamanho máximo que o valor do registro ErrorLogFileTruncateSize especifica. Esse valor não pode ser menor que 1 megabyte (MB).

Se a configuração do registro em log de erros não for válida ou se ocorrer algum tipo de falha enquanto a API HTTP estiver gravando nos arquivos de log, a API HTTP usará o registro em log de eventos para notificar os administradores de que o log de erros não está ocorrendo.

A tabela a seguir descreve os valores de configuração do registro.

Valor do Registro Descrição
EnableErrorLogging Um DWORD que você pode definir como TRUE para habilitar o registro em log de erros ou false para desabilitar. O valor padrão é TRUE.
ErrorLogFileTruncateSize Um DWORD que especifica o tamanho máximo de um arquivo de log de erro, em bytes. O valor padrão é de 1 MB (0x100000).

O valor especificado não pode ser menor que o valor padrão.
ErrorLoggingDir Uma Cadeia de Caracteres que especifica a pasta em que a API HTTP coloca seus arquivos de log.

A API HTTP cria uma subpasta HTTPERR na pasta especificada e armazena os arquivos de log na subpasta. Essa subpasta e os arquivos de log recebem as mesmas configurações de permissão. As Contas do Administrador e do Sistema Local têm acesso completo. Outros usuários não têm acesso.

O exemplo a seguir é a pasta padrão quando a pasta não é especificada no registro:
%SystemRoot%\System32\LogFiles

O valor da cadeia de caracteres ErrorLoggingDir deve ser um caminho local totalmente qualificado. No entanto, ele pode conter %SystemRoot%. Não é possível usar uma unidade de rede ou compartilhamento de rede.

Formato dos logs de erros da API HTTP

Geralmente, os arquivos de log de erro da API HTTP têm o mesmo formato que os logs de erro W3C, exceto que os arquivos de log de erro da API HTTP não contêm títulos de coluna. Cada linha de um log de erros da API HTTP registra um erro. Os campos aparecem em uma ordem específica. Um único caractere de espaço (0x0020) separa cada campo do campo anterior. Em cada campo, mais sinais (0x002B) substituem caracteres de espaço, guias e caracteres de controle não imprimíveis.

A tabela a seguir identifica os campos e a ordem dos campos em um registro de log de erros.

Campo Descrição
Date O campo Date segue o formato W3C. Esse campo é baseado em UTC (Tempo Universal Coordenado). O campo Date é sempre 10 caracteres na forma de YYYY-MM-DD. Por exemplo, 1º de maio de 2003 é expresso como 2003-05-01.
Horário O campo Tempo segue o formato W3C. Esse campo é baseado em UTC. O campo de tempo é sempre oito caracteres na forma de MM:HH:SS. Por exemplo, as 17h30 (UTC) são expressas como 17:30:00.
Endereço IP (Protocolo de Internet do Cliente) O endereço IP do cliente afetado. O valor neste campo pode ser um endereço IPv4 ou um endereço IPv6. Se o endereço IP do cliente for um endereço IPv6, o campo ScopeId também será incluído no endereço.
Porta do Cliente O número da porta do cliente afetado.
Endereço IP do servidor O endereço IP do servidor afetado. O valor neste campo pode ser um endereço IPv4 ou um endereço IPv6. Se o endereço IP do servidor for um endereço IPv6, o campo ScopeId também será incluído no endereço.
Porta do Servidor O número da porta do servidor afetado.
Versão do protocolo A versão do protocolo que está sendo usado.

Se a conexão não tiver sido analisada o suficiente para determinar a versão do protocolo, um hifen (0x002D) será usado como espaço reservado para o campo vazio.

Se o número da versão principal ou o número de versão menor analisado for maior ou igual a 10, a versão será registrada como HTTP/?.?.
Verbo O verbo afirma que a última solicitação analisada passa. Verbos desconhecidos estão incluídos, mas qualquer verbo que seja mais de 255 bytes é truncado para esse comprimento. Se um verbo não estiver disponível, um hifen (0x002D) será usado como espaço reservado para o campo vazio.
CookedURL + Consulta A URL e qualquer consulta associada a ela são registradas como um campo separado por um ponto de interrogação (0x3F). Esse campo é truncado no limite de comprimento de 4.096 bytes.

Se essa URL foi analisada ("cozida"), ela será registrada com conversão de página de código local e será tratada como um campo Unicode.

Se essa URL não tiver sido analisada ("cozido") no momento do registro em log, ela será copiada exatamente, sem nenhuma conversão Unicode.

Se a API HTTP não puder analisar essa URL, um hifen (0x002D) será usado como espaço reservado para o campo vazio.
Status do Protocolo O protocolo status não pode ser maior que 999.

Se o protocolo status da resposta a uma solicitação estiver disponível, ele será registrado neste campo.

Se o protocolo status não estiver disponível, um hífen (0x002D) será usado como espaço reservado para o campo vazio.
SiteId Não é usado nesta versão da API HTTP. Um hífen de espaço reservado (0x002D) sempre aparece neste campo.
Frase da razão Esse campo contém uma cadeia de caracteres que identifica o tipo de erro que está sendo registrado. Este campo nunca é deixado vazio.
Nome da fila É o nome da fila de solicitação.

As seguintes linhas de exemplo são de um log de erros da 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 erros que a API HTTP registra

A API HTTP registra respostas de erro a clientes, tempo limite de conexão, solicitações órfãs e conexões descartadas que são tratadas incorretamente.

A lista a seguir identifica os tipos de erros que a API HTTP registra:

  • Respostas aos clientes
    A API HTTP envia uma resposta de erro a um cliente, por exemplo, um erro de 400 causado por um erro de análise na última solicitação recebida. Depois que a API HTTP envia a resposta de erro, ela fecha a conexão.

  • Tempo limite de conexão
    A API HTTP acaba com uma conexão. Se uma solicitação estiver pendente quando a conexão acabar, a solicitação será usada para fornecer mais informações sobre a conexão no log de erros.

  • Solicitações órfãs
    Um processo de modo de usuário é interrompido inesperadamente enquanto ainda há solicitações enfileiradas que são roteadas para esse processo. A API HTTP registra as solicitações órfãs no log de erros. Tipos de erro específicos são nomeados por cadeias de caracteres Frase de Razão que sempre aparecem como o último campo de cada linha de erro. A tabela a seguir identifica as frases motivo da API HTTP.

Frase da razão Descrição
AppOffline Ocorreu um erro de serviço indisponível (um erro HTTP 503). O serviço não está disponível porque erros de aplicativo fizeram com que o aplicativo fosse retirado offline.
AppPoolTimer Ocorreu um erro de serviço indisponível (um erro HTTP 503). O serviço não está disponível porque o processo do pool de aplicativos está muito ocupado para lidar com a solicitação.
AppShutdown Ocorreu um erro de serviço indisponível (um erro HTTP 503). O serviço não está disponível porque o aplicativo é desligado automaticamente em resposta à política de administrador.
BadRequest Ocorreu um erro de análise durante o processamento de uma solicitação.
Client_Reset A conexão entre o cliente e o servidor foi fechada antes que a solicitação pudesse ser atribuída a um processo de trabalho. A causa mais comum desse comportamento é que o cliente fecha prematuramente sua conexão com o servidor.
Connection_Abandoned_By_AppPool Um processo de trabalho do pool de aplicativos desistiu inesperadamente ou órfão de uma solicitação pendente fechando seu identificador.
Connection_Abandoned_By_ReqQueue Um processo de trabalho do pool de aplicativos desistiu inesperadamente ou órfão de uma solicitação pendente fechando seu identificador. Específico para o Windows Vista e versões posteriores e para versões posteriores e do Windows Server 2008.
Connection_Dropped A conexão entre o cliente e o servidor foi fechada antes que o servidor pudesse enviar seu pacote de resposta final. A causa mais comum desse comportamento é que o cliente fecha prematuramente sua conexão com o servidor.
Connection_Dropped_List_Full A lista de conexões descartadas entre clientes e o servidor está completa. Específico para o Windows Vista e versões posteriores e para versões posteriores e do Windows Server 2008.
ConnLimit Ocorreu um erro de serviço indisponível (um erro HTTP 503). O serviço não está disponível porque o limite de conexão no nível do site foi atingido ou excedido.
Connections_Refused A memória do kernel NonPagedPool caiu abaixo de 20 MB e http.sys parou de receber novas conexões
Desabilitado Ocorreu um erro de serviço indisponível (um erro HTTP 503). O serviço não está disponível porque um administrador tirou o aplicativo offline.
EntityTooLarge Uma entidade excedeu o tamanho máximo permitido.
FieldLength Um limite de comprimento de campo foi excedido.
Proibido Um elemento ou sequência proibido foi atendido durante a análise.
Cabeçalho Um erro de análise ocorreu em um cabeçalho.
Nome do host Ocorreu um erro de análise durante o processamento de um nome de host.
Interno Ocorreu um erro interno do servidor (um erro HTTP 500).
Invalid_CR/LF Ocorreu um retorno de transporte ilegal ou alimentação de linha.
LengthRequired Faltava um valor de comprimento necessário.
N/D Ocorreu um erro de serviço indisponível (um erro HTTP 503). O serviço não está disponível porque ocorreu um erro interno (como uma falha de alocação de memória ou conflito da Lista de Reservas de URL).
N/I Ocorreu um erro não implementado (um erro HTTP 501) ou um erro de serviço indisponível (um erro HTTP 503) devido a uma codificação de transferência desconhecida.
Número Ocorreu um erro de análise durante o processamento de um número.
Condição prévia Faltava uma pré-condição necessária.
QueueFull Ocorreu um erro de serviço indisponível (um erro HTTP 503). O serviço não está disponível porque a fila de solicitação de aplicativo está cheia.
RequestLength Um limite de comprimento de solicitação foi excedido.
Timer_AppPool A conexão expirou porque uma solicitação esperou muito tempo em uma fila de pool de aplicativos para um aplicativo de servidor desativar a fila e processá-la. Essa duração de tempo limite é ConnectionTimeout. Por padrão, esse valor é definido como dois minutos.
Timer_ConnectionIdle A conexão expirou e permanece ociosa. A duração padrão do ConnectionTimeout é de dois minutos.
Timer_EntityBody A conexão expirou antes da chegada do corpo da entidade de solicitação. Quando uma solicitação claramente tem um corpo de entidade, a API HTTP ativa o temporizador Timer_EntityBody. No início, o limite desse temporizador é definido como o valor ConnectionTimeout (normalmente, dois minutos). Sempre que outra indicação de dados é recebida nesta solicitação, a API HTTP redefine o temporizador para dar à conexão mais dois minutos (ou o que for especificado no ConnectionTimeout).
Timer_HeaderWait A conexão expirou porque a análise de cabeçalho de uma solicitação levou mais tempo do que o limite padrão de dois minutos.
Timer_MinBytesPerSecond A conexão expirou porque o cliente não estava recebendo uma resposta a uma velocidade razoável. A taxa de envio de resposta foi mais lenta que o padrão de 240 bytes/s. Que pode ser controlada com a propriedade metabase MinFileBytesPerSec.
Timer_ReqQueue A conexão expirou porque uma solicitação esperou muito tempo em uma fila de pool de aplicativos para um aplicativo de servidor desativar a fila. Essa duração de tempo limite é ConnectionTimeout. Por padrão, esse valor é definido como dois minutos. Específico para o Windows Vista e versões posteriores e para versões posteriores e do Windows Server 2008.
Timer_Response Reservado. Atualmente não é usado.
Timer_SslRenegotiation
A conexão expirou porque a renegociação da SSL (Secure Sockets Layer) entre o cliente e o servidor demorou mais do que o tempo limite padrão de dois minutos.
URL Ocorreu um erro de análise durante o processamento de uma URL.
URL_Length Uma URL excedeu o tamanho máximo permitido.
Verbo Ocorreu um erro de análise durante o processamento de um verbo.
Version_N/S Ocorreu um erro de versão sem suporte (um erro HTTP 505).