
494
Часть
VI.
Перспективы исследований
Хотя большинство нолей и записей выводятся корректно, изредка могут воз-
никать проблемы, связанные с конкретной реализацией Web-сервера. Некоторые
Web-серверы порождают несколько процессов для одновременной обработки
HTTP-запросов, о чем говорилось в главе 4 (раздел 4.4). Эти процессы конкури-
руют при записи данных в журнал сервера. Если сервер не осуществляет специ-
альных мер, некоторые записи могут накладываться друг на друга. Несмотря на
возможные ошибки, сервер может разрешить процессам осуществлять запись не-
зависимо, чтобы избежать затрат, связанных с координацией операций записи.
Корректное формирование серверных журналов не обязательно является сущест-
BCiHio важным при обработке HTTP-запросов. Даже если сервер пытается упоря-
дочить операции регистрации в журнале, ошибки при реализации могут привести
к появлению спорадических ошибок. Аналогично, в ряде случаев сервер может не
присваивать значений всем без исключения полям в записи, что способно привес-
ти к ошибочному результату. Как следствие, большие серверные журналы часто
содержат ошибки. Программа, осуществляющая синтаксический анализ журна-
лов,
должна проверять записи па наличие ошибок.
Записи, которые приводят к ошибкам в ходе синтаксического анализа, могут
быть просмотрены вручную, или же профамма может автоматически пропускать за-
пись и переходить к следующей, В некоторых случаях более тщательное изучение
записи может выявить источник проблемы. Например, URL может содержать сим-
вол новой строки (ctrl-M), который приводит к ошибочному обнаружению конца
строки синтаксическим анализатором. Запись может быть исправлена путем удале-
ния символа новой строки. Другая проблема связана с длиной URL. URL может
иметь неограниченно большую длину. В связи с этим любое предположение о мак-
симальной длине URL может оказаться неверным; на практике иногда встречаются
URL длиной более 4000 символов. В некоторых языках программирования процеду-
ры стапдартгюго ввода/вывода подразумевают, что память для каждой входной пе-
ременной выделяется заранее (например, функция scan/Q в языке программирова-
ния С). Если длина URL превышает ожидаемую, процедура синтаксического anajni-
за осуществит запись за пределы выделенного пространства памяти, что приведет
к повреждению других данных в памяти. Ошибки подобного рода особенно трудно
обнаружить и исправить. Чтобы не допустить возникновения таких проблем, про-
грамма может выделять пространство для каждой строки в процессе сигггаксическо-
го анализа записи. Альтернативой является наличие в профамме отдельгюй проце-
дуры для обработки длинных URL в случае их обнаружения.
Другая практическая проблема связана с различием формата полей меток време-
ни в различных серверных журналах. При анализе набора реальных серверных жур-
налов нами было выявлено не менее 14 различных способов представления даты и
времени. Создание профаммы для синтаксического анализа и игггернретации раз-
личных форматов
—
хлопотное дело. Кроме того, такая профамма, скорее всего, бу-
дет иметь внутренние ошибки. Очень полезно иметь отдельную библиотеку проце-
дур для синтаксического анализа и преобразования полей меток времени в сервер-
ных журналах. Такие процедуры могут быть тщательно отлажены и многократно
использоваться мгюжеством различных приложений. Кроме того, процедура может
преобразовывать метку времени к универсальному представлению времени, соответ-
ствующему, например, количеству секунд, прошедших с полуночи 1 января 1970 г.
(представление времени в UNIX). Это позволит остальным профаммам ипюриро-
вать различия в представлении времени в различных журналах. Однако это не реша-
ет проблем, связанных с различием показаний часов для различных Web-серверов,
которые создают эти журналы. На практике довольно трудно установить соотноше-