W3C 記錄
W3C 擴充記錄是可在伺服器會話或 URL 群組上啟用的伺服器端記錄類型。 在 URL 群組上啟用 W3C 記錄時,只會在路由傳送至 URL 群組的要求上執行記錄。 系統會為每個設定為啟用 W3C 記錄的 URL 群組建立個別的記錄檔。
在伺服器會話上啟用 W3C 記錄時,它會作為伺服器會話下所有 URL 群組的集中式記錄形式。 伺服器會話中所有 URL 群組都會維護單一記錄檔。
下表列出 HTTP 伺服器 API 可以記錄的欄位。 資料表包含 HTTP_LOG_FIELD 常數的子集。 下列部分欄位會在內部由 HTTP 伺服器 API 自動產生,因此不會包含在 HTTP_LOG_FIELDS_DATA 結構中。 [顯示為] 資料行包含記錄檔中顯示的文字。 資料表中的資料會依記錄檔記錄中的出現順序排列。
未標示為「產生的 HTTP 伺服器 API」的欄位必須透過應用程式在 HTTP_LOG_FIELDS_DATA 結構內傳遞。 應用程式可以從傳遞給它的 HTTP_REQUEST 結構產生這些欄位。
欄位 | 顯示為 | Description | HTTP_LOG_FIELDS_DATA成員 | HTTP_LOG_FIELDS常數 |
---|---|---|---|---|
日期 | date | 活動發生的日期。 | 產生的 HTTP 伺服器 API。 | HTTP_LOG_FIELD_DATE |
時間 | time | 時間,以協調的通用時間 (UTC) 發生活動。 | 產生的 HTTP 伺服器 API。 | HTTP_LOG_FIELD_TIME |
服務名稱和實例編號 | s-sitename | 在用戶端上執行的網際網路服務名稱和實例編號。 | ServiceName | HTTP_LOG_FIELD_SITE_NAME |
Server Name (伺服器名稱) | s-computername | 產生記錄檔專案的伺服器名稱。 | ServerName | HTTP_LOG_FIELD_COMPUTER_NAME |
伺服器 IP 位址 | s-ip | 產生記錄檔專案之伺服器的 IP 位址。 | ServerIp | HTTP_LOG_FIELD_SERVER_IP |
方法 | cs-method | 要求的動詞,例如 GET 方法。 | 方法 | HTTP_LOG_FIELD_METHOD |
URI 字幹 | cs-uri-stem | 例如,動詞Default.htm的目標。 | UriStem | HTTP_LOG_FIELD_URI_STEM |
URI 查詢 | cs-uri-query | 如果有任何,用戶端嘗試執行的查詢。 只有針對動態頁面才需要執行通用資源識別元 (URI) 查詢。 | UriQuery | HTTP_LOG_FIELD_URI_QUERY |
伺服器通訊埠 | s-port | 為服務設定的伺服器埠號碼。 | ServerPort | HTTP_LOG_FIELD_SERVER_PORT |
使用者名稱 | cs-username | 存取伺服器之已驗證使用者的名稱。 匿名使用者會以連字號表示。 | 使用者名稱 | HTTP_LOG_FIELD_USER_NAME |
用戶端 IP 位址 | c-ip | 發出要求之用戶端的 IP 位址。 | ClientIp | HTTP_LOG_FIELD_CLIENT_IP |
通訊協定版本 | cs-version | 用戶端使用的 HTTP 通訊協定版本。 | 產生的 HTTP 伺服器 API。 | HTTP_LOG_FIELD_VERSION |
使用者代理程式 | cs (User-Agent) | 用戶端使用的瀏覽器類型。 | UserAgent | HTTP_LOG_FIELD_USER_AGENT |
Cookie | cs (Cookie) | 如果有任何內容,則傳送或接收的 Cookie 內容。 | Cookie | HTTP_LOG_FIELD_COOKIE |
Referrer | cs (參考者) | 使用者上次流覽的網站。 這個網站提供目前網站的連結。 | Referrer | HTTP_LOG_FIELD_REFERRER |
主機 | cs-host | 如果有的話,則為主機名。 | 主機 | HTTP_LOG_FIELD_HOST |
HTTP 狀態 | sc-status | HTTP 狀態碼。 | ProtocolStatus | HTTP_LOG_FIELD_STATUS |
通訊協定子狀態 | sc-substatus | 子狀態錯誤碼。 | SubStatus | HTTP_LOG_FIELD_SUB_STATUS |
Win32 狀態 | sc-win32-status | Windows 狀態碼。 | Win32Status | HTTP_LOG_FIELD_WIN32_STATUS |
傳送的位元組數 | sc-bytes | 伺服器所傳送的位元組數目。 | 產生的 HTTP 伺服器 API。 | HTTP_LOG_FIELD_BYTES_SENT |
接收的位元組數 | cs-bytes | 伺服器接收和處理的位元組數目。 | 產生的 HTTP 伺服器 API。 | HTTP_LOG_FIELD_BYTES_RECV |
花費時間 | 所花費的時間 | 動作所花費的時間長度 (毫秒)。 | 產生的 HTTP 伺服器 API。 | HTTP_LOG_FIELD_TIME_TAKEN |
資料流程識別碼 | streamid | 資料流程識別碼。 | 產生的 HTTP 伺服器 API。 | HTTP_LOG_FIELD_STREAM_ID |
記錄檔是可自訂的 ASCII 文字格式。 檔案中的欄位前置詞定義如下:
前置詞 | 描述 |
---|---|
s | 伺服器動作。 |
c | 用戶端動作。 |
Sc | 伺服器對用戶端動作。 |
cs | 用戶端對伺服器動作。 |
不過,應用程式可以選取一或多個 W3C 擴充記錄檔欄位,但並非所有欄位都會包含資訊。 對於選取但沒有資訊的欄位,連字號 () 會顯示為預留位置。 如果欄位包含不可列印的字元,HTTP 伺服器 API 會將它取代為加號 (+) ,以保留記錄檔格式。 這通常會發生在病毒攻擊中,例如惡意使用者傳送歸位字元和換行字元,如果未取代為加號 (+) ,則會中斷記錄檔格式。 欄位會以空格分隔。
如果 URL 群組或伺服器會話已啟用欄位,但未針對要求選取,則會在記錄檔中顯示為預留位置的連字號 () 。
記錄檔會在第一個要求抵達 URL 群組或伺服器會話時建立,記錄檔不會在設定記錄時建立。 下列範例顯示 W3C 記錄檔的第一個記錄檔專案,其中已啟用 [用戶端 IP]、[使用者名稱]、[伺服器 IP]、[伺服器埠]、[方法]、[URI 字幹]、[URI 查詢]、[狀態] 和 [使用者代理程式] 欄位:
#Software: Microsoft HTTP Server API 2.0
#Version: 1.0 // the log file version as it's described by "https://www.w3.org/TR/WD-logfile".
#Date: 2002-05-02 17:42:15 // when the first log file entry was recorded, which is when the entire log file was created.
#Fields: date time c-ip cs-username s-ip s-port cs-method cs-uri-stem cs-uri-query sc-status cs(User-Agent)
2002-05-02 17:42:15 172.22.255.255 - 172.30.255.255 80 GET /images/picture.jpg - 200 Mozilla/4.0+(compatible;MSIE+5.5;+Windows+2000+Server)
當 HTTP 伺服器 API 在剖析要求之前收到第一個位元組時,就會初始化所花費的時間欄位。 上次傳送完成時,會停止所花費的時間時間戳記。 所花費的時間不會反映整個網路的時間。 對月臺的第一個要求會顯示比其他類似要求稍長的時間,因為 HTTP 伺服器 API 會以第一個要求開啟記錄檔。