關於 WinHTTP
注意
對於自 Windows 10 版本 1709 起的應用程式容器和系統服務,HTTP/2 (預設會開啟RFC7540) 。
Microsoft Windows HTTP Services (WinHTTP) 提供 HTTP/2 和 1.1 網際網路通訊協定的伺服器支援高階介面。 WinHTTP 的設計主要是供與 HTTP 伺服器通訊的伺服器應用程式在伺服器架構案例中使用。
WinINet 設計為互動式桌面應用程式的 HTTP 用戶端平臺。 WinINet 會顯示某些作業的使用者介面,例如收集使用者認證。 不過,WinHTTP 會以程式設計方式處理這些作業。 需要 HTTP 用戶端服務的伺服器應用程式應該使用 WinHTTP,而不是 WinINet。 如需詳細資訊,請參閱 將 WinINet 應用程式移植到 WinHTTP。
WinHTTP 也設計用於系統服務和 HTTP 型用戶端應用程式。 不過,需要 FTP 通訊協定功能、Cookie 持續性、快取、自動認證對話方塊處理、Internet Explorer 相容性或下層平臺支援的單一使用者應用程式,應考慮使用 WinINet。
此介面可從 C/C++ 存取,方法是使用 WinHTTP 應用程式開發介面 (API) ,或使用IWinHttpRequest 和 IWinHttpRequestEvents介面。 WinHTTP 也可以透過 WinHTTP 物件從腳本和 Microsoft Visual Basic 存取。 如需個別函式的詳細資訊和描述,請參閱特定語言的 WinHTTP 函式參考。
從Windows 8開始,WinHTTP 會提供 API,以使用WebSocket 通訊協定l 啟用連線,例如WinHttpWebSocketSend和WinHttpWebSocketReceive。
警告
除了非同步完成回呼期間,WinHTTP 不會重新進入。 也就是說,當執行緒對其中一個 WinHTTP 函式的呼叫擱置中,例如 WinHttpSendRequest、WinHttpReceiveResponse、WinHttpQueryDataAvailable、WinHttpSendData 或 WinHttpWriteData,在第一次呼叫完成之前,它絕對不能第二次呼叫 WinHTTP。 發生第二次呼叫的其中一個案例如下:如果應用程式將非同步過程呼叫排入佇列 (APC) 到呼叫 WinHTTP 的執行緒,而且 WinHTTP 在內部執行可警示的等候時,APC 可以執行。 如果 APC 常式也發生呼叫 WinHTTP,它會重新輸入 WinHTTP API,而且 WinHTTP 的內部狀態可能會損毀。
WinHTTP 5.1 功能
下列功能已新增至 WinHTTP 5.1 版:
- IPv6 支援。
- AutoProxy 功能。
- HTTP/1.0 通訊協定,包括支援持續運作 (持續性) 連線和會話 Cookie。
- HTTP/1.1 區塊傳輸支援 HTTP 回應。
- 跨會話保持匿名連線的保持運作共用。
- 安全通訊端層 (SSL) 功能,包括用戶端憑證。 支援的 SSL 通訊協定包括:SSL 2.0、SSL 3.0 和傳輸層安全性 (TLS) 1.0。
- 支援伺服器和 Proxy 驗證,包括 Microsoft Passport 1.4 和 Negotiate/ Kerberos 套件的整合式支援。
- 除非隱藏,否則自動處理重新導向。
- 除了 API 之外,還有可編寫腳本的介面。
- 追蹤公用程式可協助針對問題進行疑難排解。
WinHTTP 不支援許多 WinINet 功能,包括 URL 快取和持續性 Cookie、autoproxy、自動dialing、離線支援,以及 FTP) (檔案傳輸通訊協定。
如需 5.1 版中引進之變更的詳細資訊,請參閱 WinHTTP 5.1 的新功能。
使用 WinHTTP 消費者入門
如需 WinHTTP 的詳細資訊,請參閱下列主題。
- WinINet 與 WinHTTP 會比較兩種存取 HTTP 的技術。
- WinHTTP 版本 描述 WinHTTP 的版本歷程記錄。
- WinHTTP 5.1 的新功能描述 WinHTTP 5.1 中的變更和新功能。
- 網路術語 描述與一般網路相關的實用概念和術語,特別是 HTTP 通訊協定。
- 選擇 WinHTTP 介面 描述 C/C++ API 和 WinHTTP 的 COM 介面。
- WinHTTP 安全性考慮 說明使用 WinHTTP 時要注意的安全性問題。
- 將 WinINet 應用程式移植到 WinHTTP 說明如何修改現有的 WinINet 應用程式以使用 WinHTTP API。