Ошибка ведения журнала в API HTTP
В этой статье описаны возможности ведения журнала ошибок интерфейсов программирования приложений (API) протокола передачи гипертекста (HTTP).
Исходная версия продукта: Windows Server 2008 R2, Windows Server 2008, Windows Server 2012 R2, Windows Server 2012, Windows 10, Windows 8.1
Исходный номер базы знаний: 820729
Сводка
Некоторые ошибки, возникающие в приложении на основе HTTP, автоматически обрабатываются API HTTP, а не передаются обратно приложению для обработки. Это происходит из-за того, что частота таких ошибок в противном случае может привести к переполнению журнала событий или обработчика приложения.
В следующих разделах описаны различные аспекты ведения журнала ошибок API HTTP.
Настройка ведения журнала ошибок HTTP API
Параметры реестра управляют ошибками в журналах API HTTP, максимальным допустимым размером файлов журнала и расположением файлов журнала.Формат журналов ошибок API HTTP
API HTTP создает файлы журналов, которые соответствуют соглашениям о файлах журналов консорциума W3C. Для анализа этих файлов журнала можно использовать стандартные средства. Однако, в отличие от файлов журнала W3C, файлы журналов API HTTP не содержат имен столбцов.Типы ошибок, регистрируемых API HTTP
API HTTP регистрирует множество распространенных ошибок.
Следующие методы описывают устранение ошибок HTTP API.
Настройка ведения журнала ошибок HTTP API
Три значения реестра в разделе HTTP\Parameters управляют ведением журнала ошибок API HTTP. Эти разделы находятся в разделе реестра: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
.
Примечание.
Расположение и форма значений конфигурации могут измениться в более поздних версиях операционной системы Windows.
Для изменения значений реестра, а также для просмотра или изменения файлов журнала и папки, содержащей их, необходимо иметь учетные данные администратора или локальной системы.
Сведения о конфигурации в значениях реестра считываются при запуске драйвера API HTTP. Поэтому при изменении параметров необходимо остановить, а затем перезапустить драйвер для чтения новых значений. Для этого введите следующие команды консоли:
net stop http
net start http
Для именования файлов журнала используется следующее соглашение об именовании:
httperr + порядковый номер + .log
Пример: httperr4.log
Файлы журнала циклизируются, когда достигают максимального размера, заданного значением реестра ErrorLogFileTruncateSize. Это значение не может быть меньше 1 мегабайта (МБ).
Если конфигурация ведения журнала ошибок недопустимая или при возникновении какого-либо сбоя во время записи API HTTP в файлы журнала, API HTTP использует ведение журнала событий, чтобы уведомить администраторов о том, что ведение журнала ошибок не происходит.
В следующей таблице описаны значения конфигурации реестра.
Значение реестра | Описание |
---|---|
EnableErrorLogging | Значение DWORD, которое можно задать для параметра TRUE, чтобы включить ведение журнала ошибок, или ЗНАЧЕНИЕ FALSE, чтобы отключить его. Значение по умолчанию — TRUE. |
ErrorLogFileTruncateSize | DWORD, указывающий максимальный размер файла журнала ошибок в байтах. Значение по умолчанию — 1 МБ (0x100000). Указанное значение не может быть меньше значения по умолчанию. |
ErrorLoggingDir | Строка, указывающая папку, в которую API HTTP помещает свои файлы ведения журнала. API HTTP создает вложенную папку HTTPERR в указанной папке, а затем сохраняет файлы журнала во вложенной папке. Эта вложенная папка и файлы журнала получают одинаковые параметры разрешений. Учетные записи администратора и локальной системы имеют полный доступ. Другие пользователи не имеют доступа. В следующем примере используется папка по умолчанию, если папка не указана в реестре: %SystemRoot%\System32\LogFiles Строковое значение ErrorLoggingDir должно быть полным локальным путем. Однако он может содержать %SystemRoot% . Нельзя использовать сетевой диск или сетевую папку. |
Формат журналов ошибок API HTTP
Как правило, файлы журналов ошибок API HTTP имеют тот же формат, что и журналы ошибок W3C, за исключением того, что файлы журналов ошибок API HTTP не содержат заголовки столбцов. В каждой строке журнала ошибок API HTTP записывается одна ошибка. Поля отображаются в определенном порядке. Один символ пробела (0x0020) отделяет каждое поле от предыдущего поля. В каждом поле знаки плюс (0x002B) заменяют пробелы, табуляции и непечатаемые управляющие символы.
В следующей таблице указаны поля и порядок полей в записи журнала ошибок.
Поле | Описание |
---|---|
Date | Поле Дата соответствует формату W3C. Это поле основано на универсальном координированном времени (UTC). Поле Дата всегда содержит 10 символов в виде ГГГГ-ММ-ДД. Например, 1 мая 2003 г. выражается как 2003-05-01. |
Time | Поле Time соответствует формату W3C. Это поле основано на формате UTC. Поле времени всегда содержит восемь символов в формате MM:HH:SS. Например, 17:30 (UTC) выражается как 17:30:00. |
IP-адрес клиента | IP-адрес затронутого клиента. Значением в этом поле может быть IPv4-адрес или IPv6-адрес. Если IP-адрес клиента является IPv6-адресом, в адрес также включается поле ScopeId. |
Порт клиента | Номер порта для затронутого клиента. |
IP-адрес сервера | IP-адрес затронутого сервера. Значением в этом поле может быть IPv4-адрес или IPv6-адрес. Если IP-адрес сервера является IPv6-адресом, в адрес также включается поле ScopeId. |
Порт сервера | Номер порта затронутого сервера. |
Версия протокола | Версия используемого протокола. Если подключение не было проанализировано достаточно для определения версии протокола, в качестве заполнителя пустого поля используется дефис (0x002D). Если основной номер версии или анализируемый дополнительный номер версии больше или равен 10, версия регистрируется как HTTP/?.?. |
Глагол | Глагол указывает последний запрос, который анализируется, проходит. В него включены неизвестные глаголы, но все глаголы, размер которых превышает 255 байт, усекается до этой длины. Если команда недоступна, в качестве заполнителя пустого поля используется дефис (0x002D). |
CookedURL + Query | URL-адрес и все связанные с ним запросы регистрируются как одно поле, разделенное вопросительным знаком (0x3F). Это поле усечено с ограничением длины в 4096 байт. Если этот URL-адрес был проанализирован ("приготовлен"), он регистрируется с преобразованием локальной кодовой страницы и обрабатывается как поле Юникода. Если этот URL-адрес не был проанализирован ("подготовлен") во время ведения журнала, он копируется точно, без преобразования Юникода. Если API HTTP не может проанализировать этот URL-адрес, в качестве заполнителя пустого поля используется дефис (0x002D). |
Состояние протокола | Состояние протокола не может превышать 999. Если состояние протокола ответа на запрос доступно, он регистрируется в этом поле. Если состояние протокола недоступно, в качестве заполнителя пустого поля используется дефис (0x002D). |
SiteId | Не используется в этой версии API HTTP. В этом поле всегда отображается дефис-заполнитель (0x002D). |
Фраза причины | Это поле содержит строку, которая определяет тип ошибки, которая регистрируется. Это поле никогда не остается пустым. |
Имя очереди | Это имя очереди запроса. |
Ниже приведены примеры строк из журнала ошибок 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 - 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
Типы ошибок, регистрируемых API HTTP
API HTTP регистрирует ответы на ошибки клиентов, время ожидания подключения, потерянные запросы и удаленные подключения, которые обрабатываются неправильно.
В следующем списке указаны типы ошибок, регистрируемых API HTTP:
Ответы на запросы клиентов
API HTTP отправляет клиенту ответ об ошибке, например ошибку 400, вызванную ошибкой синтаксического анализа в последнем полученном запросе. После отправки ответа об ошибке API HTTP закрывает подключение.Время ожидания подключения
API HTTP время ожидания подключения. Если запрос находится в ожидании, когда время ожидания подключения истекает, он используется для предоставления дополнительных сведений о подключении в журнале ошибок.Потерянные запросы
Процесс в пользовательском режиме неожиданно останавливается, пока все еще есть запросы в очереди, которые направляются в этот процесс. API HTTP регистрирует потерянные запросы в журнал ошибок. Определенные типы ошибок называются строками фразы причины, которые всегда отображаются в качестве последнего поля каждой строки ошибки. В следующей таблице указаны фразы причины HTTP API.
Фраза причины | Описание |
---|---|
AppOffline | Произошла ошибка недоступности службы (ошибка HTTP 503). Служба недоступна, так как ошибки приложения привели к отключению приложения. |
AppPoolTimer | Произошла ошибка недоступности службы (ошибка HTTP 503). Служба недоступна, так как процесс пула приложений слишком занят для обработки запроса. |
AppShutdown | Произошла ошибка недоступности службы (ошибка HTTP 503). Служба недоступна, так как приложение автоматически завершает работу в ответ на политику администратора. |
BadRequest | При обработке запроса произошла ошибка синтаксического анализа. |
Client_Reset | Соединение между клиентом и сервером было закрыто до того, как запрос можно было назначить рабочему процессу. Наиболее распространенная причина такого поведения заключается в том, что клиент преждевременно закрывает подключение к серверу. |
Connection_Abandoned_By_AppPool | Рабочий процесс из пула приложений неожиданно завершил работу или потерянный запрос, закрыв его дескриптор. |
Connection_Abandoned_By_ReqQueue | Рабочий процесс из пула приложений неожиданно завершил работу или потерянный запрос, закрыв его дескриптор. Относится к Windows Vista и более поздним версиям, а также к Windows Server 2008 и более поздних версий. |
Connection_Dropped | Соединение между клиентом и сервером было закрыто до того, как сервер мог отправить свой окончательный пакет ответа. Наиболее распространенная причина такого поведения заключается в том, что клиент преждевременно закрывает подключение к серверу. |
Connection_Dropped_List_Full | Список удаленных подключений между клиентами и сервером заполнен. Относится к Windows Vista и более поздним версиям, а также к Windows Server 2008 и более поздних версий. |
ConnLimit | Произошла ошибка недоступности службы (ошибка HTTP 503). Служба недоступна, так как достигнуто или превышено ограничение на подключение на уровне сайта. |
Connections_Refused | Память NonPagedPool ядра упала ниже 20 МБ и http.sys перестала получать новые подключения. |
Отключено | Произошла ошибка недоступности службы (ошибка HTTP 503). Служба недоступна, так как администратор перевел приложение в автономный режим. |
EntityTooLarge | Сущность превысила допустимый максимальный размер. |
FieldLength | Превышен предел длины поля. |
Запрещено | Во время синтаксического анализа был выполнен запрещенный элемент или последовательность. |
Заголовок | Произошла ошибка синтаксического анализа в заголовке. |
Hostname (Имя узла) | Ошибка синтаксического анализа при обработке имени узла. |
Внутренний | Произошла внутренняя ошибка сервера (ошибка HTTP 500). |
Invalid_CR/LF | Произошло незаконное возвращение перевозки или подача строки. |
LengthRequired | Отсутствует требуемое значение длины. |
Н/Д | Произошла ошибка недоступности службы (ошибка HTTP 503). Служба недоступна, так как произошла внутренняя ошибка (например, сбой выделения памяти или конфликт списка резервирования URL-адресов). |
N/I | Произошла не реализованная ошибка (ошибка HTTP 501) или ошибка недоступности службы (ошибка HTTP 503) из-за неизвестной кодировки передачи. |
Номер | Ошибка синтаксического анализа при обработке числа. |
Предпосылкой | Отсутствуют необходимые предварительные условия. |
QueueFull | Произошла ошибка недоступности службы (ошибка HTTP 503). Служба недоступна, так как очередь запросов приложения заполнена. |
RequestLength | Превышен предел длины запроса. |
Timer_AppPool | Срок действия подключения истек, так как запрос слишком долго ждал в очереди пула приложений, чтобы серверное приложение выдало очередь и обработало ее. Это время ожидания — ConnectionTimeout. По умолчанию это значение равно двум минутам. |
Timer_ConnectionIdle | Срок действия подключения истек и остается в бездействии. Длительность connectionTimeout по умолчанию составляет две минуты. |
Timer_EntityBody | Срок действия подключения истек до поступления текста сущности запроса. Если запрос явно содержит тело сущности, API HTTP включает таймер Timer_EntityBody. Сначала для этого таймера устанавливается значение ConnectionTimeout (обычно это две минуты). При каждом получении другого указания данных в этом запросе API HTTP сбрасывает таймер, чтобы предоставить подключение еще две минуты (или то, что указано в ConnectionTimeout). |
Timer_HeaderWait | Срок действия подключения истек, так как анализ заголовка для запроса занял больше времени, чем ограничение по умолчанию в два минуты. |
Timer_MinBytesPerSecond | Срок подключения истек, так как клиент не получал ответ с разумной скоростью. Скорость отправки ответа была медленнее, чем по умолчанию 240 байт/с. Которым можно управлять с помощью свойства метабазы MinFileBytesPerSec. |
Timer_ReqQueue | Срок подключения истек, так как запрос слишком долго ждал в очереди пула приложений, чтобы серверное приложение выдало очередь. Это время ожидания — ConnectionTimeout. По умолчанию это значение равно двум минутам. Относится к Windows Vista и более поздним версиям, а также к Windows Server 2008 и более поздних версий. |
Timer_Response | Защищены. В настоящее время не используется. |
Timer_SslRenegotiation |
Срок действия подключения истек, так как повторное согласование ssl между клиентом и сервером заняло больше времени, чем время ожидания по умолчанию в две минуты. |
URL-адрес | Ошибка синтаксического анализа при обработке URL-адреса. |
URL_Length | URL-адрес превысил максимальный допустимый размер. |
Глагол | Ошибка синтаксического анализа при обработке глагола. |
Version_N/с | Произошла ошибка, не поддерживаемая версией (ошибка HTTP 505). |
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по