Błąd rejestrowania API protokołu HTTP

Streszczenie

W tym artykule opisano możliwości rejestrowania błędów w interfejsach API protokołu HTTP.

Niektóre błędy występujące w aplikacji opartych na protokole HTTP są automatycznie obsługiwane przez interfejs API HTTP nie są przekazywane z powrotem do aplikacji w celu przetworzenia. To zachowanie występuje, ponieważ częstotliwość takich błędów może doprowadzić do przeciążenia dziennika zdarzeń lub program obsługi aplikacji.

W następujących tematach opisano różne aspekty rejestrowanie błędów HTTP API.

Rozwiązanie

Konfigurowanie rejestrowania błędów HTTP API

Trzy wartości rejestru w kluczu HTTP \Parameters kontrolować, rejestrowania błędów HTTP API. Klucze te znajdują się w następującym kluczu rejestru:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
Uwaga W nowszych wersjach systemu operacyjnego Windows może zmienić lokalizację i rodzaj wartości konfiguracyjnych.

Musi mieć poświadczenia administratora lub System lokalny na zmianę wartości rejestru oraz aby wyświetlić lub zmienić pliki dziennika i folder, który je zawiera.

Informacje o konfiguracji w wartości rejestru jest odczytywana podczas uruchamiania sterownik interfejsu API protokołu HTTP. W związku z tym jeśli zmienisz ustawienia, należy zatrzymać, a następnie uruchomić sterownik, aby odczytać nowe wartości. Aby to zrobić, wpisz następujące polecenia konsoli:
polecenie net stop http
polecenie net start http
Pliki dziennika jest używany następującej konwencji nazewnictwa:
+ httperr + numer sekwencyjny .log
Przykład: httperr4.log
Pliki dziennika są przełączane, gdy osiągnie maksymalny rozmiar, który określa wartość rejestru ErrorLogFileTruncateSize . Ta wartość nie może być mniejsza niż jeden megabajt (MB).

Jeśli Konfiguracja rejestrowania błędów jest nieprawidłowa lub wszelkiego rodzaju błąd występuje, gdy interfejs API HTTP zapisuje pliki dziennika, interfejs API HTTP używa rejestrowania zdarzeń do powiadamiania administratorów nie występuje błąd rejestrowania.

Poniższa tabela zawiera opis wartości konfiguracji rejestru.
Wartość rejestruOpis
EnableErrorLoggingDWORD że można ustawić na wartość TRUE Aby włączyć rejestrowanie błędów lub FALSE go wyłączyć. Wartością domyślną jest TRUE.
ErrorLogFileTruncateSizeDWORD zawierająca wyrażony w bajtach maksymalny rozmiar pliku dziennika błędów. Wartością domyślną jest 1 MB (0x100000).

Uwaga Określona wartość nie może być mniejsza niż wartość domyślna.
ErrorLoggingDirCiąg , który określa folder, w którym interfejs API HTTP umieszcza swoje pliki rejestrowania.

Interfejs API HTTP tworzy podfolder HTTPERR w określonym folderze, a następnie przechowuje pliki dziennika w podfolderze. Ten podfolder i pliki dziennika otrzymują te same ustawienia uprawnień. Administrator i lokalne konta systemowe mają pełny dostęp. Inni użytkownicy nie mają dostępu.

Poniżej znajduje domyślnego folderu, gdy folder nie jest określony w rejestrze:
%SystemRoot%\System32\LogFiles


Uwaga Wartość ciągu ErrorLoggingDir musi być w pełni kwalifikowaną ścieżkę lokalną. Może jednak zawierać % SystemRoot %. Nie można używać dysku sieciowym lub w udziale sieciowym.

Powrót do początku

Format dzienników błędów HTTP API

Ogólnie rzecz biorąc pliki dziennika błędów HTTP API mają taki sam format jak dzienniki błędów W3C, z tą różnicą, że pliki dziennika błędów HTTP API nie zawierają nagłówki kolumn. Każdy wiersz dziennik błędów HTTP API rejestruje jeden błąd. Pola są wyświetlane w określonej kolejności. Pojedynczy znak (0x0020) oddziela poszczególne pola poprzedniego pola. W każdym polu plusa (0x002b), Zamień spacje, tabulatory i znaki kontrolne.

W poniższej tabeli przedstawiono pola i kolejność pól w rekordzie dziennika błędów.
PoleOpis
DataPole daty jest zgodny z formatem W3C. To pole jest oparte na skoordynowanego czasu uniwersalnego (UTC). Pole daty jest zawsze dziesięciu znaków w postaci RRRR-MM-DD. Na przykład 1 maja 2003 r. jest wyrażony jako 2003-05-01.
GodzinaWartość pola Czas jest zgodny z formatem W3C. To pole jest oparte na UTC. Wartość pola Czas jest zawsze ośmiu znaków w formie MM:HH:SS. Na przykład 5:30 PM (UTC) jest wyrażony jako 17:30:00.
Adres IP klientaAdres IP klienta usterce. Wartość w tym polu może być adres IPv4 lub adres IPv6. Jeśli adres IP klienta jest adres IPv6, pole IDzakresu jest również zawarte w adresie.
Port klientaNumer portu dla dotkniętych klienta.
Adres IP serweraAdres IP serwera, którego dotyczy luka. Wartość w tym polu może być adres IPv4 lub adres IPv6. Jeśli adres IP serwera jest adres IPv6, pole IDzakresu jest również zawarte w adresie.
Port serweraNumer portu serwera, którego dotyczy luka.
Wersja protokołuWersja protokołu, który jest używany.


Jeśli połączenie nie zostało dostatecznie analizowany określić wersję protokołu, łącznik (0x002D) służy jako symbol zastępczy pustego pola.

Jeśli numer wersji głównej lub pomocniczy numer wersji, który jest analizowany jest większa niż lub równa 10, wersja jest rejestrowane jako HTTP /?.?.
ZlecenieStan zlecenia, który ostatniego żądania, czyli przeanalizować przebiegów. Nieznany zleceń są uwzględniane, ale wszelkie zlecenie, który jest większy niż 255 bajtów jest obcinana do tej długości. Jeśli zlecenia nie jest dostępny, łącznik (0x002D) służy jako symbol zastępczy pustego pola.
CookedURL + kwerendyAdres URL i dowolny typ kwerendy, który jest skojarzony z nim są rejestrowane jako jedno pole, które jest oddzielone znakiem zapytania (0x3F). To pole jest obcinana w jego limit długości o rozmiarze 4096 bajtów.

Jeśli ten adres URL był analizowany ("gotowane"), jest rejestrowany z konwersja stron kodowych lokalnym i jest traktowane jak pole Unicode.

Jeśli ten adres URL ma nie był analizowany ("gotowane") w chwili rejestrowania, jest ona kopiowana dokładnie, bez żadnej konwersji Unicode.

Jeśli interfejs API HTTP nie może przeanalizować tego adresu URL, łącznik (0x002D) służy jako symbol zastępczy pustego pola.
Stan protokołuStan protokołu nie może być większa niż 999.


Jeśli stan protokołu odpowiedzi na żądanie jest dostępna, jest rejestrowany w tej dziedzinie.

Jeśli stan protokołu nie jest dostępny, łącznik (0x002D) służy jako symbol zastępczy pustego pola.
Identyfikator witrynyNie używany w tej wersji interfejsu API protokołu HTTP. Łącznik symbolu zastępczego (0x002D) jest zawsze wyświetlany w tym polu.
Fraza przyczynyTo pole zawiera ciąg, który identyfikuje rodzaj błędu, które są rejestrowane. To pole nie jest puste.
Nazwa kolejkiTa nazwa kolejki żądania.
Poniżej przedstawiono przykładowe wiersze są z dziennik błędów HTTP API:
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 — nazwa hosta 2002-07-05 19:53:00 127.0.0.1 2894 127.0.0.1 80 HTTP/2.0 GET / 505 - 05-07-2002 Version_N/S 20:06:01 172.31.77.6 Timer_MinBytesPerSecond 80-----64388 127.0.0.1
Powrót do początku

Rodzaje błędów, które rejestruje API protokołu HTTP

Interfejs API HTTP rejestruje błąd odpowiedzi do klientów, limity czasu połączenia, oddzielonych żądań i przerywaniem połączeń, które są nieprawidłowo obsługiwane.

Poniższa lista opisuje rodzaje błędów, które rejestruje API protokołu HTTP:
  • Odpowiedzi do klientów Interfejs API HTTP wysyła odpowiedź o błędzie do klienta, na przykład 400 błąd powodowany przez błąd analizy w ostatnim żądaniu odebrane. Po interfejsie API HTTP wysyła odpowiedź na błąd, zamyka połączenie.
  • Limity czasu połączenia Interfejs API HTTP kończą połączenia. Jeśli żądanie jest do czasu kiedy limit czasu połączenia, żądanie służy do zawierają dodatkowe informacje o połączeniu w dzienniku błędów.
  • Żądania orphaned Procesów trybu użytkownika nieoczekiwanego zatrzymania chociaż istnieje nadal kolejce żądań, które są kierowane do tego procesu. Interfejs API HTTP rejestruje osieroconych żądań w dzienniku błędów.
Specyficzne typy błędów są wyznaczone przez ciągi Fraza przyczyny , które są zawsze wyświetlane jako ostatniego pola każdego wiersza błędu. W poniższej tabeli przedstawiono zwroty przyczyny API protokołu HTTP.
Fraza przyczynyOpis

AppOfflineUsługa niedostępna błąd wystąpił (błąd HTTP 503). Usługa nie jest dostępna, ponieważ przyczyną błędów aplikacji aplikacji przełączony w tryb offline.
AppPoolTimerUsługa niedostępna błąd wystąpił (błąd HTTP 503). Usługa nie jest dostępna, ponieważ proces puli aplikacji jest zbyt zajęta, aby obsłużyć żądania.
AppShutdownUsługa niedostępna błąd wystąpił (błąd HTTP 503). Usługa nie jest dostępna, ponieważ aplikacja automatycznie zamknięty w odpowiedzi na zasad administratora.
NiezrozumiałePodczas przetwarzania żądania wystąpił błąd analizy.
Client_ResetPołączenia między klientem a serwerem zostało zamknięte przed wniosek można przypisać do procesu roboczego. Najczęstszą przyczyną tego zachowania jest to, że klient przedwcześnie zamyka połączenie z serwerem.
Connection_Abandoned_By_AppPoolProces roboczy z puli aplikacji został nieoczekiwanie zakończyć pracę lub porzucone żądania oczekującego zamykając jej uchwyt.
Connection_Abandoned_By_ReqQueueProces roboczy z puli aplikacji został nieoczekiwanie zakończyć pracę lub porzucone żądania oczekującego zamykając jej uchwyt. Do systemu Windows Vista i nowszych wersjach oraz systemu Windows Server 2008 i jego nowszych wersjach.
Connection_DroppedPołączenie między klientem a serwerem zostało zamknięte, zanim serwer może wysłać pakietów jego ostatecznej odpowiedzi. Najczęstszą przyczyną tego zachowania jest to, że klient przedwcześnie zamyka połączenie z serwerem.
Connection_Dropped_List_FullLista elementów usuniętych połączeń między klientami a serwerem jest pełna. Do systemu Windows Vista i nowszych wersjach oraz systemu Windows Server 2008 i jego nowszych wersjach.
ConnLimitUsługa niedostępna błąd wystąpił (błąd HTTP 503). Usługa nie jest dostępna, ponieważ osiągnięto lub przekroczono limit połączeń na poziomie witryny.
Connections_RefusedJądro NonPagedPool pamięci spadnie poniżej 20MB i http.sys zatrzymał odbierania nowych połączeń
WyłączoneUsługa niedostępna błąd wystąpił (błąd HTTP 503). Usługa nie jest dostępna, ponieważ administrator przejął aplikacji w trybie offline.
EntityTooLargeJednostka przekracza maksymalny dozwolony rozmiar.
Wartość właściwości FieldLengthPrzekroczono limit długości pola.
ZabronionePodczas analizowania napotkano element zabronione lub sekwencji.
NagłówekWystąpił błąd analizy w nagłówku.
Nazwa hostaWystąpił błąd analizy podczas przetwarzania nazwy hosta.
WewnętrznyWystąpił błąd wewnętrzny serwera (błąd HTTP 500).
Invalid_CR/LFWystąpił niedozwolony powrót karetki i wysuwu wiersza.
LengthRequiredBrak wartości wymaganą długość.
N/AUsługa niedostępna błąd wystąpił (błąd HTTP 503). Usługa nie jest dostępna, ponieważ wystąpił błąd wewnętrzny (np. Błąd alokacji pamięci lub konflikt listy rezerwacji adresu URL).
N/I(Błąd HTTP 501) wystąpił błąd nie zaimplementowana lub Usługa niedostępna błąd wystąpił (błąd HTTP 503) ze względu na nieznane kodowanie transferu.
NumerPodczas przetwarzania liczbą wystąpił błąd analizy.
Warunkiem wstępnymBrak wymaganego warunku wstępnego.
Kolejka zapełnionaUsługa niedostępna błąd wystąpił (błąd HTTP 503). Usługa nie jest dostępne, ponieważ kolejki żądań aplikacji jest zapełniony.
RequestLengthPrzekroczono limit długości żądania.
Timer_AppPoolPołączenie wygasła z powodu żądania czekał zbyt długo w kolejkach puli aplikacji dla aplikacji serwera do usuwania kolejki i przetwarza je. Ten limit czasu jest ConnectionTimeout. Domyślnie ta wartość jest ustawiona na dwie minuty.
Timer_ConnectionIdlePołączenie wygasł i pozostaje bezczynny. ConnectionTimeout domyślny czas trwania wynosi dwie minuty.
Timer_EntityBodyPołączenie wygasła, zanim przybył w treści żądania. Wyraźnie żądanie zawiera treść jednostki, interfejs API HTTP włącza czasomierza Timer_EntityBody . Na początku limit ten czasomierz ustawiono wartość limitu ConnectionTimeout (zazwyczaj dwie minuty). Za każdym razem, że inne wskazanie danych jest odbierana na to żądanie, interfejs API HTTP resetuje zegar dać połączenie 2 minuty (lub określonego w ConnectionTimeout).
Timer_HeaderWaitPołączenie wygasło, ponieważ nagłówek analizowanie żądania trwało dłużej niż domyślny limit dwóch minut.
Timer_MinBytesPerSecondPołączenie wygasło, ponieważ klient nie otrzymywał odpowiedzi w odpowiednim czasie. Szybkość wysyłania odpowiedzi jest wolniejszy niż domyślna 240 bajtów na sekundę. Może to być kontrolowane z właściwości metabazy MinFileBytesPerSec .
Timer_ReqQueuePołączenie wygasła z powodu żądania czekał zbyt długo w kolejkach puli aplikacji dla aplikacji serwera do usuwania kolejki. Ten limit czasu jest ConnectionTimeout. Domyślnie ta wartość jest ustawiona na dwie minuty. Do systemu Windows Vista i nowszych wersjach oraz systemu Windows Server 2008 i jego nowszych wersjach.
Timer_ResponseZarezerwowane. Obecnie nieużywane.
Timer_SslRenegotiation
Połączenie wygasło, ponieważ ponowne negocjowanie SSL między klientem a serwerem trwało dłużej niż domyślny limit czasu dwóch minut.
ADRES URLWystąpił błąd analizy podczas przetwarzania adresu URL.
URL_LengthAdres URL przekracza maksymalny dozwolony rozmiar.
ZleceniePodczas przetwarzania zlecenia wystąpił błąd analizy.
Version_N/SW wersji nieobsługiwanych wystąpił błąd (błąd HTTP 505).

Powrót do początku

Powiązane artykuły

Aby uzyskać więcej informacji dotyczących sposobu dodawania pól dodatkowych rejestracji dla rejestrowania błędów HTTP usług IIS kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

832975 dodatkowe właściwości są teraz dostępne dla rejestrowania w pliku # .log httperr w usługach IIS 6.0 i IIS 7.0

Właściwości

Identyfikator artykułu: 820729 — ostatni przegląd: 16.02.2017 — zmiana: 1

Windows Server 2008 R2 Standard, Windows Server 2008 R2 Enterprise, Windows Server 2008 Enterprise, Windows Server 2012 R2 Standard, Windows Server 2012 R2 Datacenter, Windows Server 2012 R2 Essentials, Windows Server 2012 R2 for Embedded Systems, Windows Server 2012 R2 Foundation, Windows Server 2012 Standard, Windows Server 2012 Standard, Windows Server 2012 Datacenter, Windows Server 2012 Datacenter, Windows Server 2012 Essentials, Windows 10, Windows 10 Enterprise, released in July 2015, Windows 10 Pro, released in July 2015, Windows 10 Version 1511, Windows 8.1, Windows 8.1 Enterprise, Windows 8.1 Pro, Windows 8, Windows 8 Pro, Windows 8 Enterprise, Windows 7 Professional, Windows 7 Enterprise

Opinia