本文說明超文字傳輸通訊協定 (HTTP) API 的錯誤記錄功能。
有些在 HTTP 應用程式中發生的錯誤會由 HTTP API 自動處理,而不會傳回應用程式進行處理。這個情況發生的原因是因為如果不這麼處理,這類錯誤的發生頻率可能會超過事件記錄或應用程式處理常式的負荷。
以下主題說明 HTTP API 錯誤記錄的不同層面:
設定 HTTP API 錯誤記錄
如果要我們為您設定 HTTP API 錯誤記錄,請前往<
為我修正此問題>一節。如果您想要自行設定 HTTP API 錯誤記錄,請前往<
讓我自行修正此問題>一節。
為我修正此問題
如果要自動修正此問題,請按一下
[Fix it] 按鈕或連結。按一下
[檔案下載] 對話方塊中的
[執行],然後依照 Fix it 精靈中的步驟執行。
注意事項- 此精靈可能只提供英文版本。不過,自動修正程式也適用於 Windows 的其他語言版本。
- 如果您不在發生問題的電腦上,則可將 Fix it 解決方案儲存至快閃磁碟機或 CD,然後在發生問題的電腦上加以執行。
讓我自行修正此問題
位於
HTTP \參數機碼下的三個登錄值控制著 HTTP API 錯誤記錄。這些機碼位於下列登錄機碼:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
注意更新版本的 Microsoft Windows 作業系統中的設定值位置和形式可能會改變。
您必須擁有系統管理員/本機系統認證才能變更登錄值,以及檢視或修改記錄檔和包含記錄檔的資料夾。
HTTP API 驅動程式啟動時,會讀取登錄值中的設定資訊。因此,如果您變更了設定,就必須先停止然後再重新啟動驅動程式,才能讀取新值。如果要執行這項操作,請輸入下列主控台命令:
net stop http
net start http
為記錄檔命名時,會使用下列命名慣例:
httperr + 號碼序列 + .log
範例:httperr4.log
記錄檔會在達到
ErrorLogFileTruncateSize 登錄值指定的最大大小時循環。此值不得小於 1 MB。
如果錯誤記錄的設定無效,或是如果 HTTP API 寫入記錄檔時,發生任何類型的錯誤,則 HTTP API 會使用事件記錄,通知系統管理員錯誤記錄並未發生。
下表說明登錄設定值。
摺疊此表格展開此表格
| 登錄值 | 說明 |
| EnableErrorLogging | 您可以將此 DWORD 設定為 TRUE 以啟用錯誤記錄,或是設定為 FALSE 予以停用。預設值是 TRUE。 |
| ErrorLogFileTruncateSize | 此 DWORD 以位元組為單位,指定錯誤記錄檔的最大大小。預設值是 1 MB (0x100000)。
注意 指定值不能小於預設值。 |
| ErrorLoggingDir | 此字串會指定 HTTP API 放置其記錄檔的資料夾。
HTTP API 會在指定資料夾建立子資料夾 HTTPERR,然後將記錄檔儲存在該子資料夾。這個子資料夾和記錄檔會收到相同的權限設定。系統管理員和本機系統帳戶具有完整的存取權限。其他使用者沒有存取權限。
下列是登錄中未指定資料夾時的預設資料夾: %SystemRoot%\System32\LogFiles
注意ErrorLoggingDir?字串值必須是完整的本機路徑。不過,該值可以包含 %SystemRoot%。無法使用網路磁碟機或網路共用。 |
HTTP API 錯誤記錄檔的格式
一般來說,HTTP API 錯誤記錄檔除了不包含欄位標題以外,其格式與 W3C 錯誤記錄檔相同。HTTP API 錯誤記錄檔的每一行都會記錄一個錯誤。欄位會以特定順序顯示。每個欄位與前一個欄位之間,會以單一空格字元 (0x0020) 分隔。每個欄位中,都會以加號 (0x002B) 來取代空格、定位點和不可列印的控制字元。
下表指出錯誤記錄檔記錄中的欄位以及欄位順序。
摺疊此表格展開此表格
| 欄位 | 說明 |
| 日期 | [日期] 欄位會依照 W3C 格式。此欄位是根據 Coordinated Universal Time (UTC)。[日期] 欄位永遠是 10 個字元的 YYYY-MM-DD 格式。例如,2003 年 5 月 1 日會表示為 2003-05-01。 |
| 時間 | [時間] 欄位會依照 W3C 格式。此欄位是根據 UTC。[時間] 欄位永遠是 8 個字元的 MM:HH:SS 格式。例如,5:30 PM (UTC) 會表示為 17:30:00。 |
| 用戶端 IP 位址 | 受影響用戶端的 IP 位址。此欄位中的值可以是 IPv4 位址或 IPv6 位址。如果用戶端 IP 位址是 IPv6 位址,則 [ScopeId] 欄位也會包含在位址中。 |
| 用戶端連接埠 | 受影響用戶端的連接埠號碼。 |
| 伺服器 IP 位址 | 受影響伺服器的 IP 位址。此欄位中的值可以是 IPv4 位址或 IPv6 位址。如果伺服器 IP 位址是 IPv6 位址,則 [ScopeId] 欄位也會包含在位址中。 |
| 伺服器連接埠 | 受影響伺服器的連接埠號碼。 |
| 通訊協定版本 | 正在使用的通訊協定版本。
如果連線尚未充份剖析以判定通訊協定版本,系統便會以連字號 (0x002D) 來作為空白欄位的預留位置。
如果所剖析的主要版本號碼或次要版本號碼大於或等於 10,則會將版本記錄為 HTTP/?.?。 |
| 動詞命令 | 動詞命令說明通過剖析的最後一個命令。未知的動詞命令都會包括在內,但是所有超過 255 個位元組的動詞命令,都會被截斷成此長度。如果沒有動詞命令,系統便會以連字號 (0x002D) 來作為空欄位的預留位置。 |
| CookedURL + 查詢 | URL 以及與其相關聯的任何查詢,都會記錄為以問號 (0x3F) 分隔的一個欄位。此欄位會被截斷成該欄位長度限制 4096 個位元組的長度。
如果此 URL已經過剖析 (「已處理」),則系統便會以本機字碼頁轉換記錄此 URL,並將其視為 Unicode 欄位。
如果此 URL 未在記錄時進行剖析 (「已處理」),則系統會完整複製此 URL,而不會進行任何 Unicode 轉換。
如果 HTTP API 無法剖析此 URL,系統便會以連字號 (0x002D) 來作為空白欄位的預留位置。 |
| 通訊協定狀態 | 通訊協定狀態不能大於 999。
如果有提供對於要求之回應的通訊協定狀態,便會記錄在此欄位中。
如果沒有通訊協定狀態,系統便會以連字號 (0x002D) 來作為空白欄位的預留位置。 |
| SiteId | 不用於此版本的 HTTP API。此欄位永遠會出現預留位置連字號 (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
HTTP API 所記錄的錯誤類型
HTTP API 會記錄用戶端、連接逾時、孤立要求的錯誤回應、以及處理不當的中斷連線。
下列清單指出 HTTP API 所記錄的錯誤類型:
- 對用戶端的回應 HTTP API 會傳送錯誤回應至用戶端,例如,在上一次接收的要求中,因為剖析錯誤而造成的 400 錯誤。HTTP API 傳送錯誤回應後,HTTP API 就會終止連線。
- 連線逾時 HTTP API 連線逾時。如果在連線逾時的時候,要求正處於攔置狀態,系統便會在錯誤記錄檔中,使用要求來提供有關連線的詳細資訊。
- 孤立的要求使用者模式處理程序意外地結束,但當時還有傳送至該程序的佇列要求。HTTP API 會將孤立的要求記錄在錯誤記錄檔。
由
原因片語字串指定的特定錯誤類型,總是會出現在每個錯誤行的最後一個欄位。下表指出 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 記憶體已低於 20MB,http.sys 已停止接收新的連線 |
| 停用 | 發生服務無法使用的錯誤 (HTTP 錯誤 503)。服務目前無法使用,因為系統管理員已經讓應用程式離線。 |
| EntityTooLarge | 實體超過所允許的最大大小。 |
| FieldLength | 已超過欄位長度限制。 |
| Forbidden | 剖析時所遇到的禁止項目或順序。 |
| 標頭 | 標頭發生剖析錯誤。 |
| 主機名稱 | 處理主機名稱時發生剖析錯誤。 |
| 內部 | 發生內部伺服器錯誤 (HTTP 錯誤 500)。 |
| Invalid_CR/LF | 出現不合法的歸位字元或換行字元。 |
| LengthRequired | 遺漏必要的長度值。 |
| 無法使用 | 發生服務無法使用的錯誤 (HTTP 錯誤 503)。服務目前無法使用,因為發生內部錯誤 (例如記憶體配置失敗)。 |
| 未執行 | 發生未執行錯誤 (HTTP 錯誤 501),或是因未知的傳輸編碼,造成服務無法使用的錯誤 (HTTP 錯誤 503)。 |
| 號碼 | 處理號碼時發生剖析錯誤。 |
| 指定條件 | 遺漏必要的指定條件。 |
| QueueFull | 發生服務無法使用的錯誤 (HTTP 錯誤 503)。服務目前無法使用,因為應用程式要求佇列已滿。 |
| RequestLength | 已超過要求長度限制。 |
| Timer_AppPool | 連線已過期,因為應用程式集區佇列中的要求,等候伺服器應用程式清除佇列並處理該要求的時間過長。此逾時的等候時間是 ConnectionTimeout。根據預設,此值設定為 2 分鐘。 |
| Timer_ConnectionIdle | 連線已過期,並維持在閒置狀態。預設的 ConnectionTimeout 期間是 2 分鐘。 |
| Timer_EntityBody | 在要求實體主體到達前,連線已過期。當要求很明顯具有實體主題時,HTTP API 會開啟 Timer_EntityBody 計時器。一開始,此計時器的限制會設定為 ConnectionTimeout 值 (通常是 2 分鐘)。每次此要求收到其他資料跡象時,HTTP API 就會重設計時器,多給連線 2 分鐘時間 (或是在 ConnectionTimeout 指定的任何時間)。 |
| Timer_HeaderWait | 連線已過期,因為要求的標題剖析所費時間,超出預設的 2 分鐘限制。 |
| Timer_MinBytesPerSecond | 連線已過期,因為用戶端未以合理的速度收到回應。回應的傳送率低於預設的 240 位元組/秒。這可透過 MinFileBytesPerSec 中繼資料庫屬性來管理。 |
| Timer_ReqQueue | 連線已過期,因為應用程式集區佇列中的要求,等候伺服器應用程式清除佇列的時間過長。此逾時時間是 ConnectionTimeout。根據預設,此值設定為 2 分鐘。Windows Vista 和 Windows Server 2008 特有的錯誤。 |
| Timer_Response | 保留。目前不使用。 |
| Timer_SslRenegotiation
| 連線已過期,因為用戶端與伺服器之間 SSL 重新交涉的所費時間,超出預設的兩分鐘逾時值。
|
| URL | 處理 URL 時發生剖析錯誤。 |
| URL_Length | URL 超出許可的大小上限。 |
| 動詞命令 | 處理動詞命令時發生剖析錯誤。 |
| Version_N/S | 發生不支援版本錯誤 (HTTP 錯誤 505)。 |
如需有關新增 IIS HTTP 錯誤記錄其他記錄欄位的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
832975
(http://support.microsoft.com/kb/832975/
)
系統現在已提供其他屬性可記錄至 IIS 6.0 和 IIS 7.0 的 Httperr#. 記錄檔中
文章編號: 820729 - 上次校閱: 2012年11月30日 - 版次: 7.0
| kbhttphandlers kbhttp kbapi kberrmsg kbinfo kbfixme kbmsifixme KB820729 |
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。