關於 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),或使用 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 通訊協定,包括支援持續性(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 的詳細資訊,請參閱下列主題。
- 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。