一般而言,HTTP 伺服器工作會依特定順序執行;也就是說,必須完成一項工作,並在下一個工作開始之前取得的輸出。
系統會建立工作頁面,以呈現 HTTP Server 應用程式執行之特定工作的相關範例程式代碼。 工作頁面會連結至 HTTP 伺服器範例的 C 延伸模組檔案。 當您在本機計算機的磁碟驅動器 C:\ 上安裝 PSDK 時,完整的伺服器範例應用程式會安裝在 C:\Program Files\Microsoft SDK\Samples\netds\HTTP\server。
下列清單會識別 HTTP 伺服器工作:
初始化 HTTP 服務
HTTP 服務是使用 HttpInitialize 函式初始化,而要求佇列的句柄是使用 HttpCreateHttpHandle來建立。 必須先初始化伺服器,才能呼叫任何其他伺服器函式。 必須先建立要求佇列,服務才能註冊 URL 以接聽傳入的 HTTP 要求。
如需詳細資訊和程式代碼範例,請參閱 初始化 HTTP 服務。
註冊要接聽的 URL
若要讓 HTTP Server API 接聽傳入要求,特定 URL 會藉由呼叫 HTTPAddUrl 函式來向 API 註冊。 符合這些 URL 的連入要求會路由傳送至此呼叫中指定的要求佇列。
如需詳細資訊和程式代碼範例,請參閱 註冊要接聽的 URL。
呼叫例程以接收要求
DoReceiveRequest 函式會配置要求緩衝區、初始化要求標識碼,並啟動迴圈以接收要求。
如需詳細資訊和程式代碼範例,請參閱 呼叫例程以接收要求。
接收要求
HTTP 伺服器 API 會提供要求結構來儲存已剖析的連入要求。 此結構是由應用程式所配置,並在收到傳入要求時初始化。 應用程式會呼叫 HttpReceiveHttpRequest 函式來接收要求。 如果要求緩衝區太小而無法接收要求,應用程式可以增加緩衝區大小,並再次呼叫 HttpReceiveHttpRequest 以接收整個要求。
如需詳細資訊和程式代碼範例,請參閱 接收要求。
處理 HTTP 要求
範例應用程式示範如何處理 HTTP GET 和 POST 要求動詞。 如果應用程式未處理的要求中有動詞,則應用程式會傳送 503 (NOT_IMPLEMENTED) 錯誤。
請注意,用於處理要求的 URL 是包含在 HTTP_REQUEST_V1 結構之 CookedUrl 成員中的已處理 URL。 請勿在 pRawUrl 成員中未處理的 URL,其僅供追蹤和統計用途使用。
如需詳細資訊和程式代碼範例,請參閱 處理 HTTP 要求。
傳送 HTTP 回應
響應結構會以狀態代碼和INITIALIZE_HTTP_RESPONSE巨集中的原因片語來配置和初始化。 已知 HTTP 標頭會新增至ADD_KNOWN_HEADER巨集中的響應結構,而實體主體會新增至記憶體中數據區塊的回應。 呼叫 HTTPSendHttpResponse函式來傳送回應。 在此範例中,應用程式會將簡單的 200 OK 回應傳送至 GET 要求。
如需詳細資訊和程式代碼範例,請參閱 傳送 HTTP 回應。
傳送 HTTP POST 回應
POST 要求需要比 GET 要求更多的處理。 呼叫 HTTPReceiveRequestEntityBody 函式來接收要求實體主體。 應用程式會將回應和回應實體主體傳送至 HTTP 伺服器 API 的個別呼叫。 回應標頭會與 HttpSendHttpResponse一起傳送。 實體主體會從具有 HttpSendResponseEntityBody 函式的檔案句柄將數據區塊傳送。
如需詳細資訊和程式代碼範例,請參閱 傳送 HTTP POST 回應。
清除 HTTP 伺服器 API
HTTP Server API 的清除作業包括:
- 拿掉所有已註冊的 URL。
- 關閉要求佇列的句柄。
- 終止 HTTP 伺服器 API 所建立的資源。
應用程式會呼叫 HttpRemoveUrl 函式,以取消註冊初始 HttpAddUrl 函式所註冊的 URL。 應用程式也會呼叫 HTTPTerminate ,讓每個呼叫 HttpInitialize 搭配相符的旗標設定。 此呼叫會終止呼叫所建立的所有資源,HttpInitialize。
如需詳細資訊和程式代碼範例,請參閱 清除 HTTP Server API。