Este artigo descreve as capacidades de registo de erros de APIs HTTP (Hypertext Transfer Protocol).
Alguns erros que ocorrem numa aplicação baseada em HTTP são automaticamente processados pela API HTTP, em vez de voltarem a ser transferidos para uma aplicação para processamento. Este comportamento ocorre porque a frequência desses erros poderá inundar o registo de eventos ou o processador de uma aplicação.
Os tópicos seguintes descrevem os diferentes aspetos do registo de erros de API HTTP:
- Configurar o registo de erros de API HTTP
As definições de registo controlam os erros de registo de API HTTP, o tamanho máximo permitido dos ficheiros de registo e a localização dos ficheiros de registo. - Formato dos registos de erros de API HTTP
A API HTTP cria ficheiros de registo em conformidade com as convenções de ficheiros de registo do W3C (World Wide Web Consortium). Poderá utilizar ferramentas padrão para analisar estes ficheiros de registo. No entanto, ao contrário dos ficheiros de registo do W3C, os ficheiros de registo de API HTTP não contêm os nomes das colunas. - Tipos de erros registados pela API HTTP
A API HTTP regista vários erros comuns.
Configurar registo de erros na API HTTP
Para nos solicitar a configuração do registo de erros da API HTTP, consulte a secção "
Corrigir por mim". Se preferir configurar o registo de erros de API HTTP sozinho, aceda a "
Deixar-me corrigir o problema".
Corrigir por mim
Para corrigir este problema automaticamente, clique no botão ou hiperligação
Corrigir. Na caixa de diálogo
Transferência de Ficheiros, clique em
Executar e, em seguida, siga os passos indicados no assistente de correção.
Notas:- Este assistente pode estar apenas em inglês. Contudo, a correção automática também funciona para versões do Windows noutros idiomas.
- Se não estiver a trabalhar no computador que tem o problema, pode guardar as soluções de correção numa unidade flash ou num CD e, depois, executá-las no computador que tem o problema.
Deixar-me corrigir o problema
Três valores de registo numa chave
HTTP \Parameters controlam o registo de erros de API HTTP. Estas chaves encontram-se na seguinte chave de registo:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
Nota: a localização e o formato dos valores de configuração poderão variar em versões posteriores do sistema operativo Microsoft Windows.
É necessário possuir credenciais de Administrador/Sistema Local para alterar os valores de registo e visualizar ou modificar os ficheiros de registo e a pasta que os contém.
As informações de configuração nos valores de registo são lidas quando o controlador de API HTTP é iniciado. Sendo assim, se alterar as definições, é necessário parar e reiniciar o controlador para que os novos valores sejam lidos. Para o fazer, introduza os seguintes comandos da consola:
net stop http
net start http
A seguinte convenção de nomenclatura é utilizada para atribuir nomes aos ficheiros de registo:
httperr + sequência numérica + .log
Exemplo: httperr4.log
Os ficheiros de registo são repetidos quando atingem o tamanho máximo especificado pelo valor de registo
ErrorLogFileTruncateSize. Este valor não pode ser inferior a um megabyte (MB).
Se a configuração do registo de erros não for válida ou se ocorrer algum tipo de falha na gravação nos ficheiros de registo pela API HTTP, a API HTTP utiliza o registo de eventos para notificar os administradores de que o registo de erros não está a ocorrer.
A tabela seguinte descreve os valores de configuração de registo.
Reduzir esta tabelaExpandir esta tabela
| Valor de registo | Descrição |
| EnableErrorLogging | Um valor DWORD que poderá definir como TRUE para ativar o registo de erros ou como FALSE para o desativar. O valor predefinido é TRUE. |
| ErrorLogFileTruncateSize | Um valor DWORD que especifica o tamanho máximo de um ficheiro de registo de erros, em bytes. O valor predefinido é um MB (0x100000).
Nota: o valor especificado não pode ser inferior ao valor predefinido. |
| ErrorLoggingDir | Um valor String que especifica a pasta onde a API HTTP coloca os respetivos ficheiros de registo.
A API HTTP cria a subpasta HTTPERR na pasta especificada e armazena os ficheiros de registo na subpasta. São atribuídas as mesmas definições de permissão a esta subpasta e aos ficheiros de registo. O Administrador e as Contas do Sistema Local possuem acesso total. Outros utilizadores não possuem acesso.
Segue-se a pasta predefinida quando a pasta não é especificada no registo: %SystemRoot%\System32\LogFiles
Nota O valor da cadeia ErrorLoggingDir tem de ser um caminho local totalmente qualificado. No entanto, poderá conter %SystemRoot%. Não pode ser utilizada uma unidade de rede nem uma partilha de rede. |
Formato dos registos de erro da API HTTP
Geralmente, os ficheiros de registo de erro da API HTTP têm o mesmo formato que os registos de erro W3C, excepto no sentido de que os ficheiros de registo de erro da API HTTP não contêm cabeçalhos de coluna. Cada linha de um registo de erros de API HTTP regista um erro. Os campos são apresentados segundo uma ordem específica. Um caráter de espaço único (0x0020) separa cada campo do anterior. Em cada campo, sinais de adição (0x002B) substituem carateres de espaço, separadores e carateres de controlo não imprimíveis.
A tabela seguinte identifica os campos e a ordem dos campos num registo de erros.
Reduzir esta tabelaExpandir esta tabela
| Campo | Descrição |
| Data | O campo Data segue o formato W3C. Este campo é baseado na Hora Universal Coordenada (UTC). O campo Data possui sempre dez carateres no formato AAAA-MM-DD. Por exemplo, 1 de maio de 2003 é apresentado como 2003-05-01. |
| Hora | O campo Hora segue o formato W3C. Este campo é baseado na UTC. O campo Hora possui sempre oito carateres no formato HH:MM:SS. Por exemplo, 17:30 (UTC) é apresentado como 17:30:00. |
| Endereço IP do Cliente | O endereço IP do cliente afetado. O valor neste campo poderá 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 está também 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 poderá 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 está também 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 utilizado.
Se a ligação não tiver sido suficientemente analisada para determinar a versão do protocolo, é utilizado um hífen (0x002D) como marcador de posição para o campo vazio.
Se o número da versão principal ou o número da versão secundária analisados forem iguais ou superiores a 10, a versão é registada como HTTP/?.?. |
| Verbo | O estado de verbo que o último pedido analisado transfere. Os verbos desconhecidos são incluídos, mas qualquer verbo superior a 255 bytes é truncado até este valor. Se o verbo não estiver disponível, é utilizado um hífen (0x002D) como marcador de posição para o campo vazio. |
| CookedURL + Consulta | O URL e qualquer consulta associada ao mesmo são registados como um campo separado por um ponto de interrogação (0x3F). O campo é truncado para o valor limite de 4096 bytes.
Se este URL tiver sido analisado ("cozinhado"), é registado com uma conversão de página de código local e tratado como um campo Unicode.
Se este URL não tiver sido analisado ("cozinhado") na altura do registo, é copiado tal como está sem qualquer conversão Unicode.
Se a API HTTP não conseguir analisar este URL, é utilizado um hífen (0x002D) como marcador de posição para o campo vazio. |
| Estado de Protocolo | O estado de protocolo não pode ser superior a 999.
Se o estado de protocolo da resposta a um pedido estiver disponível, é registado neste campo.
Se o estado do protocolo não estiver disponível, é utilizado um hífen (0x002D) como marcador de posição para o campo vazio. |
| SiteId | Não utilizado nesta versão da API HTTP. É sempre apresentado um hífen de marcador de posição (0x002D) neste campo. |
| Frase de Motivo | Este campo contém uma cadeia que identifica o tipo de erro que está a ser registado. Este campo nunca é deixado vazio. |
| Nome da Fila | Este é o nome da fila do pedido.
|
As seguintes linhas de exemplo fazem parte de um registo de erros de 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 regista
A API HTTP regista respostas de erros a clientes, tempos-limite de ligação, pedidos órfãos e ligações interrompidas que são incorrectamente processadas.
A lista seguinte identifica os tipos de erros registados pela API HTTP:
- Respostas para clientes A API HTTP envia uma resposta de erro para um cliente, por exemplo, um erro 400 causado por um erro de análise no último pedido recebido. Após o envio da resposta de erro pela API HTTP, a ligação é terminada.
- Tempos limite de ligações A API HTTP esgota o tempo limite de uma ligação. Se um pedido estiver pendente quando o tempo limite da ligação é excedido, o pedido é utilizado para fornecer mais informações sobre a ligação no registo de erros.
- Pedidos órfãos Um processo no modo de utilizador é fechado de forma inesperada, continuando a existir ainda pedidos na fila encaminhados para esse processo. A API HTTP regista os pedidos órfãos no registo de erros.
Os tipos de erros específicos são designados por cadeias da
Frase de Motivo sempre apresentadas no último campo de cada linha de erro. A tabela seguinte identifica as Frases de Motivo da API HTTP.
Reduzir esta tabelaExpandir esta tabela
| Frase de Motivo | Descrição
|
| AppOffline | Ocorreu um erro de serviço indisponível (um erro HTTP 503). O serviço não está disponível porque os erros da aplicação fizeram com que a aplicação fosse colocada 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 conjunto aplicacional está demasiado ocupado para processar o pedido. |
| AppShutdown | Ocorreu um erro de serviço indisponível (um erro HTTP 503). O serviço não está disponível porque a aplicação foi encerrada automaticamente em resposta à política de administrador. |
| BadRequest | Ocorreu um erro de análise ao processar o pedido. |
| Client_Reset | A ligação entre o cliente e o servidor foi terminada antes de o pedido ser atribuído a um processo de trabalho. A causa mais comum deste comportamento consiste no facto de o cliente terminar prematuramente a ligação ao servidor. |
| Connection_Abandoned_By_AppPool | Um processo de trabalho do conjunto aplicacional foi terminado de forma inesperada ou deixou órfão um pedido pendente ao fechar o respetivo identificador. |
| Connection_Abandoned_By_ReqQueue | Um processo de trabalho do conjunto aplicacional foi terminado de forma inesperada ou deixou órfão um pedido pendente ao fechar o respetivo identificador. Específico do Windows Vista e Windows Server 2008. |
| Connection_Dropped | A ligação entre o cliente e o servidor foi terminada antes de o servidor enviar o respetivo pacote de resposta final. A causa mais comum deste comportamento consiste no facto de o cliente terminar prematuramente a ligação ao servidor. |
| Connection_Dropped_List_Full | A lista de ligações ignoradas entre os clientes e o servidor está cheia. Específico do Windows Vista e 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 ligações ao nível do site foi atingido ou excedido. |
| Connections_Refused | A memória kernel NonPagedPool foi ignorada abaixo dos 20 MB e http.sys deixou de receber novas ligações |
| Desativado | Ocorreu um erro de serviço indisponível (um erro HTTP 503). O serviço não está disponível porque um administrador colocou a aplicação offline. |
| EntityTooLarge | Uma entidade excedeu o tamanho máximo permitido. |
| FieldLength | O limite do tamanho do campo foi excedido. |
| Proibido | Uma sequência ou elemento proibidos foram detetados durante a análise. |
| Cabeçalho | Ocorreu um erro de análise num cabeçalho. |
| Nome do anfitrião | Ocorreu um erro de análise ao processar o pedido. |
| Interno | Ocorreu um erro de servidor interno (um erro HTTP 500). |
| Invalid_CR/LF | Ocorreu um símbolo de retorno ou mudança de linha ilegais. |
| LengthRequired | Está em falta 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 atribuição de memória). |
| N/I | Ocorreu um erro de não implementação (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 ao processar um número. |
| Precondition | Está em falta 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 pedidos da aplicação está cheia. |
| RequestLength | O limite do tamanho do pedido foi excedido. |
| Timer_AppPool | A ligação expirou porque um pedido aguardou demasiado tempo numa fila do conjunto aplicacional pela remoção da fila e processamento por parte de uma aplicação do servidor. Esta duração de tempo limite é ConnectionTimeout. Por predefinição, este valor está definido para dois minutos. |
| Timer_ConnectionIdle | A ligação expirou e permanece inativa. A duração predefinida de ConnectionTimeout é de dois minutos. |
| Timer_EntityBody | A ligação expirou antes da chegada do corpo de entidade do pedido. Quando é evidente que um pedido possui um corpo de entidade, a API HTTP ativa o temporizador Timer_EntityBody. Inicialmente, o limite deste temporizador é definido para o valor de ConnectionTimeout (normalmente, 2 minutos). Sempre que outra indicação de dados é recebida neste pedido, a API HTTP repõe o temporizador para fornecer à ligação mais dois minutos (ou outro valor especificado em ConnectionTimeout). |
| Timer_HeaderWait | A ligação expirou porque a análise do cabeçalho para um pedido demorou mais tempo do que o limite predefinido de dois minutos. |
| Timer_MinBytesPerSecond | A ligação expirou porque o cliente não recebeu uma resposta a uma velocidade razoável. A velocidade de envio da resposta foi mais lenta do que os 240 bytes/seg. predefinidos. Isto pode ser controlado com a propriedade da metabase MinFileBytesPerSec. |
| Timer_ReqQueue | A ligação expirou porque um pedido aguardou demasiado tempo numa fila do conjunto aplicacional pela remoção da fila por parte de uma aplicação do servidor. Esta duração de tempo limite é ConnectionTimeout. Por predefinição, este valor está definido para dois minutos. Específico do Windows Vista e Windows Server 2008. |
| Timer_Response | Reservado. Não utilizado atualmente. |
| URL | Ocorreu um erro de análise ao processar um URL. |
| URL_Length | Um URL excedeu o tamanho máximo permitido. |
| Verbo | Ocorreu um erro de análise ao processar o verbo. |
| Version_N/S | Ocorreu um erro de versão não suportada (um erro HTTP 505). |
Para obter mais informações sobre a adição de campos de registo adicionais para registo de erros HTTP do IIS, clique no seguinte número de artigo para visualizar o artigo na Base de Dados de Conhecimento Microsoft:
832975
(http://support.microsoft.com/kb/832975/pt/
)
Estão agora disponíveis propriedades adicionais para registo no ficheiro Httperr#.log no IIS 6.0 e IIS 7.0