7. Проверка ввода пользователя
Элементы управления для проверки ввода пользователя (validation controls) в ASP.NET 2.0, CompareValidator, CustomValidator, RangeValidator, RegularExpressionValidator, RequiredFieldValidator, ValidationSummary
В реальных Web-приложениях без проверки ввода пользователя не обойтись. Пользователь может не заполнить какие-то требуемые поля, ввести в них явно неверные или, возможно, сознательно вредоносные значения, использовать неверный формат и т.п. Чтобы подобная информация не попала на сервер и не вызвала проблем при обработке, вводимую пользователем информацию рекомендуется проверять.
В ASP.NET проверка всегда производится на сервере плюс в добавление к серверной проверке можно реализовать проверку и на клиенте. Только на клиенте реализовать проверку нельзя: по соображениям безопасности она всегда дублируется на сервере.
Стандартные проверки: на количество символов, цифры или буквы, диапазон значений, соответствие формуле, соответствие маске для строкового значения и т.п.
Если проверка вернула ошибку, то обычно выводится сообщение и обработка страницы прекращается до тех пор, пока пользователь не исправит значение.
Проверки — это еще и защита Web -приложения от хакеров. Стандартно используются две атаки:
· spoofing — хакер генерирует специальный код и посылает его серверу, сообщая, что он «прошел» проверку на клиенте. ASP . NET за счет обязательного дублирования проверок такой класс атак отметает радикально.
· если пользователь может вводить текст неограниченной длины в поля Web-формы, то можно нарваться на переполнение буфера, атаку DDOS или прочие вещи. Проверки и ограничения позволяют решить эту проблему.
Клиентские проверки в ASP.NET реализуются средствами DHTML и JScript . Серверные проверки могут быть реализованы на любом .NET-совместимом языке. Работу с проверками очень упрощает то, что для проверок заранее заготовлены специальные элементы управления — val >s .
Клиентские проверки (в IE4.0 и более поздних версиях) срабатывают, когда пользователь нажимает на кнопку Submit и работают до отправки данных на Web-сервер. Если проверка не пройдена, данные и не будут посланы на Web-сервер.
В IE5.0 и более поздних, в которых поддерживается DHTML, проверки также могут срабатывать для конкретного элемента управления, когда он теряет фокус.
Учитывая различия в версиях и возможностях броузеров, обычно реализация проверок, которые нормально бы работали на броузерах разных версий — достаточно тяжелая и трудоемкая задача. Использование элементов управления .NET, которые автоматом определяют версию броузера и генерируют нужный код, позволяет эту работу во многом упростить.
Серверные проверки выполняются на сервере. Они могут быть реализованы на любом . NET -совместимом языке и по своему характеру более функциональны, чем клиентские (например, можно сравнивать ввод пользователя с данными, хранящимися на сервере). Для любой клиентской проверки в ASP.NET автоматически создается дублирующий ее серверный код проверки.
Какие элементы управления ASP.NET позволяют реализовать проверки клиентского ввода:
· Compare V alidator — ввод пользователя сравнивается со значением в другом элементе управления, фиксированным значением, со значением из файла или проверяется на соответствие типу данных. Используется очень часто (например, для проверки правильности ввода пароля в двух полях);
· CustomValidator — можно реализовать свой собственный код проверки (например, проверяем, правильно ли указан номер телефона и т.п.)
· RangeValidator — проверка, попадает ли введенное пользователем значение в указанный диапазон (например, проверка возраста)
· RegularExpressionValidator — проверка по шаблону (на соответствие подстановочным символам). Проверяем адреса e-mail, почтовые индексы, ИНН, телефонные номера и т.п. Наиболее часто используемые шаблоны уже реализованы в .NET
· RequiredFieldValidator — просто проверяется, введено пользователем значение в это поле или нет;
· ValidationSummary — предназначено для вывода информации о всех ошибках проверки (чтобы пользователь знал, что ему исправлять). Обычно помещается недалеко от кнопки Submit.
Теперь — непосредственно о работе с этими элементами управления.
Принцип работы с validation controls достаточно простой:
1) при помощи T oolbox помещаем на форму нужный validation control;
2) настраиваем его свойство ControlToValidate, определяя тем самым, значение какого элемента управления будет проверяться. Одному обычному элементу управления можно назначить много validation controls. Пока все они не вернут True, будет генерироваться ошибка проверки.
3) настраиваем прочие свойства validation control — выражение для проверки, текст сообщения об ошибке и т.п.
Свойства у разных элементов управления validation разные, но у каждого из них (кроме validation summary) есть два общих свойства:
· Type — проверяемый тип данных
· EnableClientScript — нужно ли реализовывать данную проверку на клиенте (по умолчанию нужно). Клиентские проверки всегда будут созданы на JScript.
Validation controls нужно размещать не в любом месте формы, а в правильном, поскольку при возникновении ошибки на месте vc выводится сообщение. Желательно, конечно, располагать его рядом с проверяемым ЭУ.
По умолчанию то сообщение, которое будет выводиться на месте VC и передаваться ValidationSummary , определяется свойством ErrorMessage . Однако текст сообщения, которое будет выводиться на месте VC, можно переопределить при помощи свойства Text. ValidationSumary всегда передается значение ErrorMessage. Если вы используете в форме ValidationSummary, то ЭУ, значение в котором вызвало ошибку, будет помечен красной звездочкой.
То, как будет выглядеть сообщение об ошибке на месте VC, определяется его свойством Display. Это свойство может принимать три значения:
· Static (по умолчанию) — место под этот элемент управления всегда будет зарезервировано на странице;
· Dynamic — этот элемент управления будет рендериться, как все остальные, и если сообщения нет, его место будет занято другими компонентами формы
· None — вывод сообщения на месте VC будет вообще подавлен.
Иногда приходится к одному обычному ЭУ привязывать сразу несколько проверяющих. Например, у нас есть поле для ввода телефона. Нам может потребоваться проверять его сразу тремя проверяющими элементами:
· RequiredFieldValidator — чтобы пользователь не забыл его заполнить;
· RegularExpressionField — на соответствие маске;
· CustomValidator — есть ли уже такой номер в нашей базе.
Некоторые особенности работы с проверяющими элементами управления.
Для самого простого элемента управления RequiredFieldVal >InitialValue . Это — то значение, с которым не должно совпасть проверяемое поле. По умолчанию оно пусто, и, значит, пользователь не может оставить значение в проверяемом поле пустым. Если у вас для проверяемого поля используется значение по умолчанию, то значение RequiredFieldValidator желательно поменять на такое же значение.
Проверять на пустое значение можно только при помощи RequiredFieldValidator. Если вам нужно проверять на пустое значение и на что-то еще, используется RequiredFieldValidator и дополнительный проверяющий элемент управления.
Для CompareValidator используются следующие свойства:
· ValueToCompare — проверка на соответствие константным значениям. Можно указывать несколько константных значений (их нужно будет разделять вертикальной чертой — |).
· ControlToCompare — проверка на соответствие значению из другого элемента управления. Обычно для сравнения двух значений паролей.
· Type — проверка на соответствие типу данных.
· Operators — здесь придется указывать имя операторов сравнения: Equal , NotEqual , GreaterThen , GreaterThanEqual и т.п.
Для RangeVal >MinimumValue , MaximumValue и Type .
Особенности работы с RegularExpressionValidator : главное свойство — ValidationExpression . При нажатии на него появляется большое список готовых шаблонов. Можно использовать и свой шаблон (Custom). Список подстановочных символов, которые можно использовать, очень большой.
CustomValidator — самый мощный и самый сложный проверяющий элемент управления. Можно проверять на соответствие формуле, значению из источника данных, значению, возвращаемому COM-компонентом или Web-службой. Используется в сложных ситуациях, например, для проверки паролей, база которых хранится на сервере.
В отличие от других элементов управления, CustomValidator не генерирует серверные и клиентские скрипты за вас — это придется сделать вам. Два главных свойства CustomValidator:
· ClientValidationFunction — клиентский проверяющий скрипт;
· OnServerValidate — серверный скрипт.
Конечно, логическое соответствие клиентского и серверного скрипта вам придется обеспечивать и проверять самостоятельно.
Серверная функция для CustomVal >
Клиентскую процедуру надо писать на JScript вручную на странице HTML (не Codebehind ), сразу после тега Head, например так:
function MyClientValidation(source, arguments)
alert(«I am running on the client! «);
var intValue = arguments.Value;
if (intValue % 2 == 0)
Затем в свойствах CustomValidator для свойства ClientValidationFunction указать имя этой функции , а для свойства EnableClientScript установить значение True. Желательно также определиться с версией броузера, в которой будет выполняться этот скрипт. Для этого нужно открыть свойства страницы (из контекстного меню в дизайнере, щелкнув правой кнопкой по пустому месту в странице) и для свойства Target Schema выбрать нужный броузер, например, I nternet Explo rer 5.0.
Теперь — о ValidationSummary и Page . IsValid .
Обычно, прежде чем продолжать обработку страницы, необходимо убедиться, что все проверяющие элементы управления дали на это «добро». Для проверки всех серверных элементов управления используется свойство Page.IsVal >ValidationSummary .
Свойство IsValid для страницы объединяет через логическое И все проверяющие ЭУ на странице. Если хотя бы один такой элемент вернул false, то IsValid возвращает false.
Информация проверки недоступна во время инициализации и загрузки страницы — только после.
Пример кода для кнопки, в котором проверяется свойство isValid:
Sub cmdSubmit_Click (s As Object, e As EventArgs)
If Page.IsValid Then
Message.Text = «Page is valid!»
’ Perform database updates or other logic here
Если на странице был создан элемент управления ValidationSummary , то он отработает на сервере автоматически, если Is V al >ValidationSummary :
· HeaderText — заголовок списка;
· DisplayMode — отражать сообщения маркированным списком или просто абзацем
· ShowSummary — выводить ли список на странице (по умолчанию true).
· ShowMessageBox — выводить ли список в окне сообщения (по умолчанию false).
Обращение к элементу по его >14.12.2010, 23:53. Просмотров 5829. Ответов 10
Обращение к элементу списка по его номеру
Добрый вечер! Подскажите, пожалуйста, как обратиться к элементу списка с определённым номером.
Обращение к элементу в List, зная его индекс
Здравствуйте, у меня возникла проблема создан список public List
Что быстрее? Обращение к элементу массива или к элементу структуры?
Обращение к элементу массива или к элементу структуры? Экспериментирую с кодом и получается.
Обращение к элементу
В очень короткие сроки надо сделать работу, поэтому просто нет времени разбираться в элементарных.
Обращение к элементу по ID
Здравствуйте, не пинайте сильно только начинаю изучать javascript, раньше программировал на Delphi.
12.12.2012, 14:50 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
12.12.2012, 15:26 | 5 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
привидение типов, и где искать этот контрол не хватает. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
12.12.2012, 16:24 | 6 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Спасибо, но не работает. Если я правильно понял в ((TextBox)this.Page.FindControl(«box» + Convert.ToString(num — 1))).Text; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
12.12.2012, 17:04 | 7 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
17.12.2012, 11:48 | 8 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
На всякий случай опишу смысл примера. Есть страничка с текст боксом, пользователь может нажав на кнопку увеличить число текстбоксов, но то что он написал в них до этого не должно пропадать. Проблема в том что при нажатии на кнопку все текстбоксы кроме первого перерисовываются, и по этому пропадают значения в них.Для этого я и хочу каждый раз когда нажимается кнопка считывать данные с уже заполненных текстбокосов, чтобы потом рисовать текстбоксы с данными. Подведя итог, мне нужен способ узнать значение текстбокса, который был программно создан на странице. а не тот который статично на ней находиться. Кстати, если посмотреть на код страницы в браузере до того как я пытаюсь считать значения с текст бокса он там есть: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
17.12.2012, 12:45 | 9 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
обсуждалось на форуме сотни раз. поиск рулит.
To configure where to display diagnostic information: In the navigator frame, select Logging and Diagnostics > Diagnostics. The Diagnostics page appears. From the Cache-Specific Page Body Diagnostics table, select a cache, and then click Enable to display diagnostic information in the HTML response body or Disable to disable the display of diagnostic information in the HTML response body. To set diagnostic settings for the HTML response body: Click Edit. The Edit Global Page Body Diagnostics Configuration dialog box displays. In the URL Flag field, enter the string to append to the URL of the document. By default, the string is set to +wcdebug . In the Display Event Log Entries for Request field, select Yes to display diagnostic information and TRACE event log entries in the HTML response body, or select No to only display diagnostic information. Click Submit. To enable or disable diagnostic settings in the Server response header, from the Global Server Header Diagnostics table, click Enable or Disable. Note: When a page is compressed, OracleAS Web Cache does not add debug information. |
12.3 Evaluating Access Logs
OracleAS Web Cache generates an access log that contains information about the HTTP requests sent to OracleAS Web Cache. By default, the access log has a file name of access_log and is stored in $ORACLE_HOME/webcache/logs on UNIX and ORACLE_HOME \webcache\logs on Windows.
This section contains the following topics:
See Also:
Oracle Application Server 10g Administrator’s Guide for further information about managing log files with Oracle Enterprise Manager
12.3.1 Format of the Access Log File s
You can configure the content of the access log files by defining the fields to appear for each HTTP request event. These fields are based on the Extended LogFile Format (XLF). By default, OracleAS Web Cache provides support the following log formats:
This format is the default format applied to access logs. This format is appropriate for most configurations.
The CLF format provides support for the following fields:
The combined format provides support for the CLF fields and the following additional fields:
Select this format when you need to determine what kind of browser is sending the request, and where the browser was visiting before the request was forwarded to OracleAS Web Cache.
Web Cache Log Format (WCLF)
This format provides support for the following fields intended for end-user performance monitoring features:
If the default formats are not suitable for your configuration, you can specify the fields that you require. Table 12-5 describes the supported fields. Fields prefixed with x or r are proprietary to OracleAS Web Cache.
Table 12-5 Access Log Fields
Field | Description | ||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
bytes | Content length of the request | ||||||||||||||||||||||||||||||||||||||||||||||||
c-ip | IP address of the browser | ||||||||||||||||||||||||||||||||||||||||||||||||
cached | Integer that specifies cache status. Cache status is reported as one of the following:
0 specifies a cache miss. Equivalent to M , U , G , and N output of x-cache field. 1 specifies a cache hit of a stale document. Equivalent to S output of x-cache field. 2 specifies a cache hit. Equivalent to H output of x-cache field. |
||||||||||||||||||||||||||||||||||||||||||||||||
cs( header_name ) | HTTP request header sent from the browser | ||||||||||||||||||||||||||||||||||||||||||||||||
cs-bytes | Bytes received from the browser | ||||||||||||||||||||||||||||||||||||||||||||||||
cs-method | Browser-to-OracleAS Web Cache HTTP request method | ||||||||||||||||||||||||||||||||||||||||||||||||
cs-uri | Browser-to-OracleAS Web Cache URI | ||||||||||||||||||||||||||||||||||||||||||||||||
cs-uri-query | Browser-to-OracleAS Web Cache query portion of URI, omitting the stem | ||||||||||||||||||||||||||||||||||||||||||||||||
cs-uri_stem | Browser-to-OracleAS Web Cache stem portion of URI, omitting the query | ||||||||||||||||||||||||||||||||||||||||||||||||
date | Date the transaction completed, in the following format: | ||||||||||||||||||||||||||||||||||||||||||||||||
r-ip | IP address and port number of origin server. For a cache cluster, this field displays the IP and port number of a peer cache in the cache cluster. The information is displayed in the following format: | ||||||||||||||||||||||||||||||||||||||||||||||||
r-time-taken | Time, in seconds (including microseconds), that OracleAS Web Cache spent communicating with the origin server or peer cache. The time is the duration between the following two points of time:
The time immediately before OracleAS Web Cache sent the first byte of the request to the origin server or peer cache. The time immediately after receiving the last byte of the response from the origin server or peer cache. This field is particularly helpful in providing time information for End-User Performance Monitoring. | ||||||||||||||||||||||||||||||||||||||||||||||||
s-ip | IP address of OracleAS Web Cache computer | ||||||||||||||||||||||||||||||||||||||||||||||||
sc( header_name ) | HTTP response header sent from OracleAS Web Cache to the browser | ||||||||||||||||||||||||||||||||||||||||||||||||
sc-status | OracleAS Web Cache-to-browser HTTP status code:
1xx range messages are informational 2xx range messages indicate success 3xx range messages indicate redirection, that is, further action must be taken to complete the request 4xx range messages indicate a client error 5xx range messages indicate a OracleAS Web Cache error See Also: http://www.ietf.org/rfc/rfc2616.txt for further information about HTTP status codes | ||||||||||||||||||||||||||||||||||||||||||||||||
time | Time at which the response from OracleAS Web Cache completed. The time is displayed in the following format: | ||||||||||||||||||||||||||||||||||||||||||||||||
time-taken | Amount of time taken, in seconds (including microseconds), for the transaction to complete | ||||||||||||||||||||||||||||||||||||||||||||||||
x-auth-id | User name of a basic HTTP authentication request | ||||||||||||||||||||||||||||||||||||||||||||||||
x-cache | Cache status. Cache status is reported as one of the following:
H specifies a cache hit S specifies a cache hit of a stale document U specifies a cache update of a stale document G specifies a cache update of a document that was marked for removal but still physically resides in the cache M specifies a cacheable cache miss N specifies a non-cacheable cache miss |
||||||||||||||||||||||||||||||||||||||||||||||||
x-cache-detail | Diagnostic information, in the following format:
<ESI_processing_type > <cache_request_type > [;max-age= expiration_time [+ removal_time ] ;age= document_age ] ESI_processing_type can be one of the following: T specifies that the document is an ESI template F specifies that the document is an ESI fragment Empty specifies that the response does not require ESI processing cache_request_type can be one of the following: H specifies a cache hit S specifies a cache hit of a stale document U specifies a cache update of a stale document G specifies a cache update of a document that was marked for removal but still physically resides in the cache M specifies a cacheable cache miss N specifies a non-cacheable cache miss max_age specifies the time, in seconds, to expire the document, and optionally, the time, in seconds, to remove the document from the cache after the expiration time. max_age does not appear if the cache_request_type is N . age shows how long, in seconds, the document has been in the cache. age does not appear if the document is non-cacheable. Example: H;max-age=60+30;age=50 H means that this request resulted in cache hit max-age=60+30 means that the document is to expire in 60 seconds from population and to be removed from the cache 30 seconds from the expiration. This provides a total of 90 seconds from population. age=50 means that 50 seconds have passed since population of the cache, meaning there is 10 seconds to expiration and 40 seconds to removal |
||||||||||||||||||||||||||||||||||||||||||||||||
x-cache-key | Cache key value, in the following format: | ||||||||||||||||||||||||||||||||||||||||||||||||
x-clf-date | Date that the response from OracleAS Web Cache completed, in the following format: | ||||||||||||||||||||||||||||||||||||||||||||||||
x-cluster | Single character that specifies the status of a cache cluster. The character is reported as one of the following:
T specifies a request to a cache cluster member F specifies a request from a cache cluster member O specifies a request for owned content D specifies a request for on-demand content |
||||||||||||||||||||||||||||||||||||||||||||||||
x-cookie( cookie_name ) | Cookie value from browser request. | ||||||||||||||||||||||||||||||||||||||||||||||||
x-date-start | Date before OracleAS Web Cache received the first byte of the request, in the following format: | ||||||||||||||||||||||||||||||||||||||||||||||||
x-date-end | Date when OracleAS Web Cache sent the last byte of the response, in the following format: | ||||||||||||||||||||||||||||||||||||||||||||||||
x-ecid | ID of the specified in Oracle-ECID request header, in the following format: | ||||||||||||||||||||||||||||||||||||||||||||||||
x-esi-info | ESI fragment log message from the log element of or tags. It uses the following format:
The log message only displays for requested ESI fragments in the access_log_file .fragment file. When a request ESI fragment is not configured with the log element, this field displays as a hyphen (-) | ||||||||||||||||||||||||||||||||||||||||||||||||
x-log-id | Login user name of the client. OracleAS Web Cache is unable to obtain the value for this field. Therefore, OracleAS Web Cache displays a hyphen ( -) in the output when this field is set. | ||||||||||||||||||||||||||||||||||||||||||||||||
x-os-name | Origin server or cache cluster member that OracleAS Web Cache is forwarding the request, in the following format: | ||||||||||||||||||||||||||||||||||||||||||||||||
x-os-timeout | Single character that specifies if the origin server timed out on a request. The character is reported as one of the following:
0 specifies that the origin server did not timeout 1 specifies that the origin server did timeout. An output of 1 can indicate a problem with the origin server itself. |
||||||||||||||||||||||||||||||||||||||||||||||||
x-protocol | Protocol and version from browser request, in the following format: | ||||||||||||||||||||||||||||||||||||||||||||||||
x-req-line | Request line, in the following format:
» HTTP_request_method URI protocol/version « Example: «GET /cache.htm HTTP/1.1» | ||||||||||||||||||||||||||||||||||||||||||||||||
x-req-type | Request type. Request type is reported as one of the following:
B specifies that the request is from the browser C specifies that the request is from another cache cluster member H specifies that the request is from another cache cluster or an OracleAS Web Cache that is not a member of the current cache cluster F specifies that the request is for an ESI fragment |
||||||||||||||||||||||||||||||||||||||||||||||||
x-time-delay | Time, in seconds (including microseconds), that OracleAS Web Cache spent communicating with the origin server or peer cache. The time is the duration between the following two points of time:
The time immediately before OracleAS Web Cache received the first byte of the request The time immediately before OracleAS Web Cache sent the first byte of the request to the origin server or peer cache. This field is particularly helpful in providing time information for End-User Performance Monitoring. | ||||||||||||||||||||||||||||||||||||||||||||||||
x-time-end | Time that OracleAS Web Cache sent the last byte of the response, in the following format: | ||||||||||||||||||||||||||||||||||||||||||||||||
x-time-handshake | The difference between the time the browser initiates a new connection and the time at which OracleAS Web Cache receives the first byte of the HTTP request.
Note: Select this field only if instructed by Oracle Support Services. | ||||||||||||||||||||||||||||||||||||||||||||||||
x-time-reqrecvlatency | The difference between the time at which OracleAS Web Cache receives the first and last byte of the HTTP request. This field indicates the time in reading the browser requests.
Note: Select this field only if instructed by Oracle Support Services. | ||||||||||||||||||||||||||||||||||||||||||||||||
x-time-reqsendlatency | The difference between the time at which OracleAS Web Cache sends the first and last byte of the HTTP request to the origin server. This field indicates the time taken in sending the request to the origin server.
Note: Select this field only if instructed by Oracle Support Services. | ||||||||||||||||||||||||||||||||||||||||||||||||
x-time-resprecvlatency | The difference between the time at which OracleAS Web Cache receives the first and last byte of the HTTP response from the origin server. This field indicates the time taken in receiving the response from the origin server.
Note: Select this field only if instructed by Oracle Support Services. | ||||||||||||||||||||||||||||||||||||||||||||||||
x-time-respsendlatency | The difference between the time at which OracleAS Web Cache sends the first and last byte of the HTTP response to the browser. This field indicates the time taken in sending the response to the client.
Note: Select this field only if instructed by Oracle Support Services. | ||||||||||||||||||||||||||||||||||||||||||||||||
x-time-reqblocked | The difference between when a request was blocked and unblocked because of garbage collection. If a request has already been sent to the origin server by OracleAS Web Cache to update an existing document, OracleAS Web Cache blocks all subsequent requests.
Note: Select this field only if instructed by Oracle Support Services. | ||||||||||||||||||||||||||||||||||||||||||||||||
x-time-reqqueued | The difference between when a request is queued and dequeued for the origin server. This field indicates the time a request spends in OracleAS Web Cache backend queue for an origin server (due to the maximum origin server capacity being reached) before the request is sent to the origin server for processing.
Note: Select this field only if instructed by Oracle Support Services. | ||||||||||||||||||||||||||||||||||||||||||||||||
x-time-start | Time before OracleAS Web Cache received the first byte of the request, in the following format:
12.3.1.1 cs(header_name) and sc(header_name) Access Log FieldsTable 12-6 lists examples of HTTP/1.1 headers that can be used for the cs( header_name ) and sc( header_name ) fields. This table lists only some of the possible headers. It is not an exhaustive list. Table 12-6 Examples of HTTP/1.1 Header Fields
Table 12-7 lists examples of cookie-related headers that can be used for the cs( header_name ) and sc( header_name ) fields. Table 12-7 Supported Cookie-Related Header Fields
Table 12-8 lists examples of OracleAS Web Cache headers that can be used for the cs( header_name ) and sc( header_name ) fields. Table 12-8 Supported OracleAS Web Cache Header Fields
12.3.2 Configuring Access LogsTo establish access log configuration settings: Start OracleAS Web Cache Manager. See Also: In the navigator frame, select Logging and Diagnostics > Access Logs. The Access Logs page appears. Specify cache-specific access log settings: From the Cache-Specific Access Log Configuration table, select a cache, and then click Edit Selected. The Edit Cache-Specific Access Log Configuration dialog box appears. In the Directory field, enter the directory in which to write access logs. The default is $ORACLE_HOME/webcache/logs on UNIX and ORACLE_HOME \webcache\logs on Windows. In the Enabled field, select Yes to enable logging, or No to disable logging. In the Buffering field, select Enabled to enable buffered logging or Disabled to disable buffered logging. With buffered logging, OracleAS Web Cache writes to the access log after the buffer is full. The buffer size is set 2048 bytes. When the limit is reached, OracleAS Web Cache writes buffered events to the access log file. Oracle Corporation recommends disabling buffering when you need to see the access log results immediately. In the Flush Interval field, set the frequency at which buffered information is written to the access log file. The default is 10 seconds. When the interval is reached, OracleAS Web Cache writes buffered information to the access log file. Even if the buffer is not full, the access log is updated at least every 10 seconds. Oracle Corporation recommends not changing the default, unless you need to lower the interval to see results more frequently. Click Submit. Specify site-specific log settings: From the Site-Specific Access Log Configuration table, click Add. The Edit/Add Site Specific Access Log Configuration dialog box appears. From the For Site list, select the Web site for which to specify access log settings. In the File Name field, enter a name for the access log file. The default file name is access_log . In the Enabled field, select Yes to enable logging for the site or No to disable logging for the site. Site-specific logging only takes effect if logging is enabled for the cache. If you select Yes, ensure that Yes is also selected for the cache in Step 3c. In the ESI Fragment Requests field, select Log to log the ESI fragment log messages from the log element of or in the access_log_file .fragment file. If the x-esi-info field is selected, select Log to log the events to the access_log_file .fragment file. If the x-esi-info field is not selected, select Don’t Log. The x-esi-info field is automatically selected if the Format Style is WCLF. From the Format Style list, select an access log format. See Also: «Format of the Access Log Files» for a description of the CLF, Combined, and WCLF formats |
From the Rollover Policy list, select a rollover policy to specify how often you want to change the frequency at which OracleAS Web Cache saves current log information to access_log_file . yyyymmdd and writes new log information to the current access log file.
For high-volume sites, select a policy with a high frequency.
Click Submit.
If the CLF, Combined, and WCLF formats are not suitable for your environment, create a log format that is:
From the User-Defined Log Formats table, click Add.
The Edit/Add User-Defined Access Log Format dialog box displays.
In the Format Name field, enter a unique name for the format.
From the Separator list, select the separator to use for separating access log fields.
In Print XLF Directive field, select Yes to include XLF directive information at the top of the access log or No to not include directive information in the access log.
Directive information typically consists of version and date information. For example:
See Also:
http://www.w3.org/TR/WD-logfile.html for further information about XLF directives
In the XLF Fields section, select an access log field name from the Field name list.
See Also:
Table 12-5 for a listing of the supported access logs fields
If you selected field cs( header_name ) , sc( header_name ) , or x-cookie( cookie_name ) , then enter the header or cookie name in the Header/Cookie name field.
See Also:
Table 12-6, Table 12-7, and Table 12-8 for a description of the headers allowed for cs( header_name ) and sc( header_name )
Click Add.
Perform Steps e and f for each format you want in the access log, and then use the Move Up and Move Down buttons to order the fields. The order in which fields are entered determines the order in which the fields are logged.
Click Submit.
Optionally, modify or create rollover policies:
Select an existing policy and click Edit Selected to modify and existing rollover policy, or click Add to create a new policy.
The Edit/Add Access Log Rollover Policy dialog box appears.
In the Rollover Policy Name field, enter the a unique name for the rollover policy.
In Rollover Policy section, select Weekly, Daily, Hourly, or Never to specify how often you want OracleAS Web Cache to save current log information to access_log_file.yyyymmdd and write new log information to the current access log file.
Table 12-9 describes additional configuration instructions for Weekly, Daily, and Hourly.
Table 12-9 Configuring Weekly, Daily and Hourly Rollover Policies
Policy | To configure: |
---|---|
Weekly |
Use the Time fields to enter the hour and minutes. From the Time Style list, select either Local or GMT. |
Daily |
From the Time Style list, select either Local or GMT. |
Hourly |
From the Time Style list, select either Local or GMT. If you have a high-volume site, create a daily or hourly policy. See Also: «Rolling Over Event and Access Logs » for instructions on immediately rolling over log files |
Click Submit.
Apply changes and restart OracleAS Web Cache:
In the OracleAS Web Cache Manager main window, choose Apply Changes.
In the Cache Operations page, choose Restart.
Logging Cache Cluster Peer Requests
By default, peer requests between two members of a cache cluster are not logged in the access log. Only client requests to the cluster are logged. Peer request logging can be enabled for individual cache cluster members by adding the ACCESSLOGIGNOREPEERREQUEST attribute to the MISCELLANEOUS element in the internal.xml configuration file.
The valid values for this attribute are: YES and NO .
The following example shows the MISCELLANEOUS element with peer-to-peer logging enabled:
12.3.3 Analyzing an Access Log File
The following code shows an excerpt of an access log file:
In the first line of the output, the fields have the following meaning:
10.10.150.35 is the browser’s IP address ( c-ip )
[19/Jul/2003:10:27:42 -0500] is the date ( [x-clf-date] )
user/personal.htm HTTP/1.1 » is the request line ( «x-req-line» )
200 is the HTTP status code ( sc-status )
2438 is the size of the document sent ( bytes )
12.3.4 Access Log Examples
This section contains the following access log examples:
Except where noted otherwise, the access log examples use the CLF format:
Example: Access Log with Reload Entries
The following shows an access log excerpt in which there are two Web browser reloads, followed by two shift reloads, and two more reloads:
The third and forth entries return an HTTP status code of 304, indicating that document has not been modified and does not need to be returned again.
Example: Access Log with Status Code 404 Entry
The following shows an access log excerpt in which OracleAS Web Cache cannot find any objects matching the requested URL /ows-img/chalk.jpg . This error is indicated by HTTP status code 404.
Example: Access Log in Combined Format
The following shows an access log excerpt in which the combined format is specified:
Example: Access Log with Site Information
The following shows an access log excerpt in which the following fields are specified:
cs(Host) displays the output of Host request-header field, which specifies the site information. In this example, requests are sent to OracleAS Web Cache for site www.company.com:80 .
Example: Access Log with ESI Diagnostic Information
The following shows an access log excerpt in which the following fields are specified:
x-cache-detail displays diagnostic information. In the following example:
T means that this request is for an ESI template
H means that this request resulted in cache hit
max-age=10+15 means that the document is to expire in 10 seconds from population and to be removed from the cache 15 seconds from the expiration. This provides a total of 25 seconds from population.
age=0 means that 0 seconds have passed since population of the cache, meaning there is 10 seconds to expiration and 15 seconds to removal
Example: Access Log with ESI Log Information
The following shows an access log excerpt in which the following fields are specified:
x-esi-info displays log information from the log element of or tags.
Apache log (логи): как настроить и анализировать журналы веб-сервера
Для эффективного управления веб-сервером необходимо получить обратную связь об активности и производительности сервера, а также о всех проблемах, которые могли случиться. Apache HTTP Server обеспечивает очень полную и гибкую возможность ведения журнала. В этой статье мы разберём, как настроить логи Apache и как понимать, что они содержат.
HTTP-сервер Apache предоставляет множество различных механизмов для регистрации всего, что происходит на вашем сервере, от первоначального запроса до процесса сопоставления URL-адресов, до окончательного разрешения соединения, включая любые ошибки, которые могли возникнуть в процессе. В дополнение к этому сторонние модули могут предоставлять возможности ведения журналов или вставлять записи в существующие файлы журналов, а приложения, такие как программы CGI, сценарии PHP или другие обработчики, могут отправлять сообщения в журнал ошибок сервера.
В этой статье мы рассмотрим модули журналирования, которые являются стандартной частью http сервера.
Логи Apache в Windows
В Windows имеются особенности настройки имени файла журнала — точнее говоря, пути до файла журнала. Если имена файлов указываются с начальной буквы диска, например «C:/«, то сервер будет использовать явно указанный путь. Если имена файлов НЕ начинаются с буквы диска, то к указанному значению добавляется значение ServerRoot — то есть «logs/access.log» с ServerRoot установленной на «c:/Server/bin/Apache24″, будет интерпретироваться как «c:/Server/bin/Apache24/logs/access.log«, в то время как «c:/logs/access.log» будет интерпретироваться как «c:/logs/access.log«.
Также особенностью указания пути до логов в Windows является то, что нужно использовать слэши, а не обратные слэши, то есть «c:/apache» вместо «c:\apache«. Если пропущена буква диска, то по умолчанию будет использоваться диск, на котором размещён httpd.exe. Рекомендуется явно указывать букву диска при абсолютных путях, чтобы избежать недоразумений.
Apache error: ошибки сервера и сайтов
Путь до файла журнала с ошибками указывается с помощью ErrorLog, например, для сохранения ошибок в папке «logs/error.log» относительно корневой папки веб-сервера:
Если не указать директиву ErrorLog внутри контейнера , сообщения об ошибках, относящиеся к этому виртуальному хосту, будут записаны в этот общий файл. Если в контейнере вы указали путь до файла журнала с ошибками, то сообщения об ошибках этого хоста будут записываться там, а не в этот файл.
С помощью директивы LogLevel можно установить уровень важности сообщений, которые должны попадать в журнал ошибок. Доступные варианты:
- debug
- info
- notice
- warn
- error
- crit
- alert
- emerg
Журнал ошибок сервера, имя и местоположение которого задаётся директивой ErrorLog, является наиболее важным файлом журнала. Это место, куда Apache httpd будет отправлять диагностическую информацию и записывать любые ошибки, с которыми он сталкивается при обработке запросов. Это первое место, где нужно посмотреть, когда возникает проблема с запуском сервера или работой сервера, поскольку он часто содержит подробности о том, что пошло не так и как это исправить.
Журнал ошибок обычно записывается в файл (обычно это error_log в системах Unix и error.log в Windows и OS/2). В системах Unix также возможно, чтобы сервер отправлял ошибки в системный журнал или передавал их программе.
Формат журнала ошибок определяется директивой ErrorLogFormat, с помощью которой вы можете настроить, какие значения записываются в журнал. По умолчанию задан формат, если вы его не указали. Типичное сообщение журнала следующее:
Первый элемент в записи журнала — это дата и время сообщения. Следующим является модуль, создающий сообщение (в данном случае ядро) и уровень серьёзности этого сообщения. За этим следует идентификатор процесса и, если необходимо, идентификатор потока процесса, в котором возникло условие. Далее у нас есть адрес клиента, который сделал запрос. И, наконец, подробное сообщение об ошибке, которое в этом случае указывает на запрос о несуществующем файле.
В журнале ошибок может появиться очень большое количество различных сообщений. Большинство выглядит похожим на пример выше. Журнал ошибок также будет содержать отладочную информацию из сценариев CGI. Любая информация, записанная в stderr (стандартный вывод ошибок) сценарием CGI, будет скопирована непосредственно в журнал ошибок.
Если поместить токен %L в журнал ошибок и журнал доступа, будет создан идентификатор записи журнала, с которым вы можете сопоставить запись в журнале ошибок с записью в журнале доступа. Если загружен mod_unique_id, его уникальный идентификатор запроса также будет использоваться в качестве идентификатора записи журнала.
Во время тестирования часто бывает полезно постоянно отслеживать журнал ошибок на наличие проблем. В системах Unix вы можете сделать это, используя:
Apache access: логи доступа к серверу
Журнал доступа к серверу записывает все запросы, обработанные сервером. Расположение и содержимое журнала доступа контролируются директивой CustomLog. Директива LogFormat может быть использована для упрощения выбора содержимого журналов. В этом разделе описывается, как настроить сервер для записи информации в журнал доступа.
Различные версии Apache httpd использовали разные модули и директивы для управления журналом доступа, включая mod_log_referer, mod_log_agent и директиву TransferLog. Директива CustomLog теперь включает в себя функциональность всех старых директив.
Формат журнала доступа легко настраивается. Формат указывается с использованием строки формата, которая очень похожа на строку формата printf в стиле C. Некоторые примеры представлены в следующих разделах. Полный список возможного содержимого строки формата смотрите здесь: https://httpd.apache.org/docs/current/mod/mod_log_config.html
Общий формат журнала (Common Log)
Типичная конфигурация для журнала доступа может выглядеть следующим образом.
В первой строке задано имя (псевдоним) common, которому присвоено в качестве значения строка «%h %l %u %t \»%r\» %>s %b«.
Строка формата состоит из директив, начинающихся с символа процента, каждая из которых указывает серверу регистрировать определённый фрагмент информации. Литеральные (буквальные) символы также могут быть помещены в строку формата и будут скопированы непосредственно в вывод журнала. Символ кавычки («) должен быть экранирован путём размещения обратной косой черты перед ним, чтобы он не интерпретировался как конец строки формата. Строка формата также может содержать специальные управляющие символы «\n«для новой строки и «\t» для обозначения таба (табуляции).
В данной строке значение директив следующее:
- %h — имя удалённого хоста. Будет записан IP адрес, если HostnameLookups установлен на Off, что является значением по умолчанию.
- %l — длинное имя удалённого хоста (от identd, если предоставит). Это вернёт прочерк если не присутствует mod_ident и IdentityCheck не установлен на On.
- %u — удалённый пользователь, если запрос был сделан аутентифицированным пользователем. Может быть фальшивым, если возвращён статус (%s) 401 (unauthorized).
- %t — время получения запроса в формате [18/Sep/2011:19:18:28 -0400]. Последнее показывает сдвиг временной зоны от GMT
- \»%r\» — первая строка запроса, помещённая в буквальные кавычки
- %>s — финальный статус. Если бы было обозначение %s, то означало бы просто статус — для запросов, которые были внутренне перенаправлены это обозначало бы исходный статус.
- %b — размер ответа в байтах, исключая HTTP заголовки. В формате CLF, то есть ‘—‘ вместо , когда байты не отправлены.
Директива CustomLog устанавливает новый файл журнала, используя определённый псевдоним. Имя файла для журнала доступа относительно ServerRoot, если оно не начинается с косой черты (буквы диска).
Приведённая выше конфигурация будет сохранять записи журнала в формате, известном как Common Log Format (CLF). Этот стандартный формат может создаваться многими различными веб-серверами и считываться многими программами анализа журналов. Записи файла журнала, созданные в CLF, будут выглядеть примерно так:
Каждая часть этой записи журнала описана ниже.
127.0.0.1 (%h)
Это IP-адрес клиента (удалённого хоста), который сделал запрос к серверу. Если для HostnameLookups установлено значение On, сервер попытается определить имя хоста и зарегистрировать его вместо IP-адреса. Однако такая конфигурация не рекомендуется, поскольку она может значительно замедлить работу сервера. Вместо этого лучше всего использовать постпроцессор журнала, такой как logresolve, для определения имён хостов. Указанный здесь IP-адрес не обязательно является адресом машины, на которой сидит пользователь. Если между пользователем и сервером существует прокси-сервер, этот адрес будет адресом прокси, а не исходной машины.
— (%l)
«Дефис» в выходных данных указывает на то, что запрошенная часть информации недоступна. В этом случае информация, которая недоступна, является идентификационной информацией клиента RFC 1413, определённой с помощью id на клиентском компьютере. Эта информация крайне ненадёжна и почти никогда не должна использоваться, кроме как в жёстко контролируемых внутренних сетях. Apache httpd даже не будет пытаться определить эту информацию, если для IdentityCheck не установлено значение On.
frank (%u)
Это идентификатор пользователя, запрашивающего документ, как определено HTTP-аутентификацией. Такое же значение обычно предоставляется сценариям CGI в переменной среды REMOTE_USER. Если код состояния для запроса равен 401, то этому значению не следует доверять, поскольку пользователь ещё не аутентифицирован. Если документ не защищён паролем, эта часть будет «—«, как и предыдущая.
[10/Oct/2000:13:55:36 -0700] (%t)
Время получения запроса. Формат такой:
Можно отобразить время в другом формате, указав %
«GET /apache_pb.gif HTTP/1.0» (\»%r\»)
Строка запроса от клиента указана в двойных кавычках. Строка запроса содержит много полезной информации. Во-первых, клиент использует метод GET. Во-вторых, клиент запросил ресурс /apache_pb.gif, и в-третьих, клиент использовал протокол HTTP/1.0. Также возможно зарегистрировать одну или несколько частей строки запроса независимо. Например, строка формата «%m %U%q %H» будет регистрировать метод, путь, строку запроса и протокол, что приведёт к тому же результату, что и «%r«.
200 (%>s)
Это код состояния, который сервер отправляет обратно клиенту. Эта информация очень ценна, потому что она показывает, привёл ли запрос к успешному ответу (коды начинаются с 2), к перенаправлению (коды начинаются с 3), к ошибке, вызванной клиентом (коды начинаются с 4), или к ошибкам в сервер (коды начинаются с 5). Полный список возможных кодов состояния можно найти в спецификации HTTP (RFC2616 раздел 10).
2326 (%b)
Последняя часть указывает размер объекта, возвращаемого клиенту, не включая заголовки ответа. Если контент не был возвращён клиенту, это значение будет «—«. Чтобы записать «» без содержимого, вместо %b используйте %B.
Логи комбинированного формата (Combined Log)
Другая часто используемая строка формата называется Combined Log Format. Может использоваться следующим образом.
Этот формат точно такой же, как Common Log Format, с добавлением ещё двух полей. Каждое из дополнительных полей использует директиву начинающуюся с символа процента %<заголовок>i, где заголовок может быть любым заголовком HTTP-запроса. Журнал доступа в этом формате будет выглядеть так:
Дополнительными полями являются:
«http://www.example.com/start.html» (\»%
Referer — это часть заголовок HTTP-запроса, которая называется также Referer. В этой строке содержится информация о странице, с которой клиент был прислан на данный сайт. (Это должна быть страница, которая ссылается или включает /apache_pb.gif).
«Mozilla/4.08 [en] (Win98; I ;Nav)» (\»%
Заголовок HTTP-запроса User-Agent. Это идентифицирующая информация, которую клиентский браузер сообщает о себе.
Настройки логов в Apache по умолчанию
По умолчанию в главном конфигурационном файле Apache прописаны следующие настройки логов:
Как можно увидеть, установлены три псевдонима: combined, common и combinedio. При этом по умолчанию используется common. При желании вы без труда сможете переключиться на combined или настроить формат строки лога под свой вкус.
Например, если вы предпочитаете, чтобы в файле лога доступа также присутствовала информация о пользовательском агенте и реферере, то есть Combined Logfile Format, то вы можете использовать следующую директиву: