關於 WinHTTP

Important

選擇合適的 Windows HTTP 堆疊

Scenario 推薦的 API
Windows 服務、守護程序或伺服器端程式碼 WinHTTP — 專為服務設計;支援模擬與會話隔離
桌面應用程式需要網路選項(IE)代理設定、Cookie 或憑證提示 WinINet — 自動繼承使用者的網際網路選項設定
現代 C++ 應用程式(UWP 或桌面版) Windows。Web.Http(C++/WinRT)— 現代、非同步優先、現代 TLS 支援
.NET 應用程式 System.Net.Http.Client — 管理型、跨平台、池化連線
跨平台 C/C++ libcurl 或平台 HTTP 函式庫 — 非 Windows 專用

與 WinINet 的主要差異在於:WinHTTP 不會 與使用者的瀏覽器共享 Cookie、快取或憑證。 它沒有介面提示。 它 確實 支援以服務帳號和冒充身份運行。 完整功能比較請參見 WinINet 與 WinHTTP

注意

安全預設 — WinHTTP 遵循作業系統 Schannel 設定以進行 TLS 版本協商。 務必驗證伺服器憑證;在生產環境中,千萬不要設定 WINHTTP_OPTION_SECURITY_FLAGS 忽略憑證錯誤。 關於 TLS 配置,請參見 WinHTTP 安全考量

注意

自 Windows 10 版本 1709 起,對於應用程式容器和系統服務,HTTP/2 預設為開啟(參見 RFC7540)。

Microsoft Windows HTTP 服務 (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),或使用 IWinHttpRequestIWinHttpRequestEvents 介面。 WinHTTP 也可以透過 WinHTTP 物件從腳本和Microsoft Visual Basic 存取。 如需個別函式的詳細資訊和描述,請參閱特定語言的 WinHTTP 函式參考。

從 Windows 8 開始,WinHTTP 提供 API 以使用 WebSocket 通訊協定l 來啟用連線,例如 WinHttpWebSocketSendWinHttpWebSocketReceive

謹慎

除了異步完成回呼期間,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 通訊協定,包括支援持續性(Keep-Alive)連線和會話 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、自動代理、自動撥號、離線支援,以及檔案傳輸通訊協定 (FTP)。

如需 5.1 版中導入之變更的詳細資訊,請參閱 WinHTTP 5.1 的新功能

開始使用 WinHTTP

如需 WinHTTP 的詳細資訊,請參閱下列主題。