Windows HTTP Services (WinHTTP)

Overview of the Windows HTTP Services (WinHTTP) technology.

To develop Windows HTTP Services (WinHTTP), you need these headers:

For programming guidance for this technology, see:

Enumerations

Title Description
HTTP_503_RESPONSE_VERBOSITY The HTTP_503_RESPONSE_VERBOSITY enumeration defines the verbosity levels for a 503, service unavailable, error responses.This structure must be used when setting or querying the HttpServer503ResponseProperty on a request queue.
HTTP_AUTH_STATUS Defines the authentication state of a request.
HTTP_AUTHENTICATION_HARDENING_LEVELS Server Hardening level.
HTTP_CACHE_POLICY_TYPE The HTTP_CACHE_POLICY_TYPE enumeration type defines available cache policies.
HTTP_DATA_CHUNK_TYPE Defines the data source for a data chunk.
HTTP_ENABLED_STATE Defines the state of a request queue, server session, or URL Group.
HTTP_HEADER_ID The HTTP_HEADER_ID enumeration type lists known headers for HTTP requests and responses, and associates an array index with each such header.
HTTP_LOG_DATA_TYPE Identifies the type of log data.
HTTP_LOGGING_ROLLOVER_TYPE Defines the log file rollover types.
HTTP_LOGGING_TYPE Defines the type of logging that is performed.
HTTP_QOS_SETTING_TYPE Identifies the type of a QOS setting contained in a HTTP_QOS_SETTING_INFO structure.
HTTP_REQUEST_AUTH_TYPE The HTTP_REQUEST_AUTH_TYPE enumeration defines the authentication types supported by the HTTP Server API.This enumeration is used in the HTTP_REQUEST_AUTH_INFO structure.
HTTP_REQUEST_INFO_TYPE The HTTP_REQUEST_INFO_TYPE enumeration defines the type of information contained in the HTTP_REQUEST_INFO structure. This enumeration is used in the HTTP_REQUEST_INFO structure.
HTTP_RESPONSE_INFO_TYPE The HTTP_RESPONSE_INFO_TYPE enumeration defines the type of information contained in the HTTP_RESPONSE_INFO structure.This enumeration is used in the HTTP_RESPONSE_INFO structure.
HTTP_SERVER_PROPERTY Defines the properties that are configured by the HTTP Server API on a URL group, server session, or request queue.
HTTP_SERVICE_BINDING_TYPE HTTP_SERVICE_BINDING_TYPE enumerated type specifies the string type for service names.
HTTP_SERVICE_CONFIG_CACHE_KEY Used in the HttpSetServiceConfiguration and HttpQueryServiceConfiguration functions.
HTTP_SERVICE_CONFIG_ID Defines service configuration options.
HTTP_SERVICE_CONFIG_QUERY_TYPE The HTTP_SERVICE_CONFIG_QUERY_TYPE enumeration type defines various types of queries to make. It is used in the HTTP_SERVICE_CONFIG_SSL_QUERY, HTTP_SERVICE_CONFIG_SSL_CCS_QUERY, and HTTP_SERVICE_CONFIG_URLACL_QUERY structures.
HTTP_SERVICE_CONFIG_TIMEOUT_KEY The HTTP_SERVICE_CONFIG_TIMEOUT_KEY enumeration defines the type of timer that is queried or configured through the HTTP_SERVICE_CONFIG_TIMEOUT_SET structure.
HTTP_VERB The HTTP_VERB enumeration type defines values that are used to specify known, standard HTTP verbs in the HTTP_REQUEST structure. The majority of these known verbs are documented in RFC 2616 and RFC 2518, as indicated below.

Functions

Title Description
HTTP_EQUAL_VERSION Returns a non-zero value if an HTTP_VERSION structure is equal to a specified major/minor version combination, or zero otherwise.
HTTP_GREATER_EQUAL_VERSION The HTTP_GREATER_EQUAL_VERSION macro returns a non-zero value if an HTTP_VERSION structure is greater than or equal to a specified major/minor version combination, or zero otherwise.
HTTP_GREATER_VERSION Returns a non-zero value if an HTTP_VERSION structure is greater than a specified major/minor version combination, or zero otherwise.
HTTP_IS_NULL_ID Determines if the HTTP_OPAQUE_ID is NULL.
HTTP_LESS_EQUAL_VERSION Returns a non-zero value if an HTTP_VERSION structure is less than or equal to a specified major/minor version combination, or zero otherwise.
HTTP_LESS_VERSION Returns a non-zero value if an HTTP_VERSION structure is less than a specified major/minor version combination, or zero otherwise.
HTTP_NOT_EQUAL_VERSION Returns a non-zero value if an HTTP_VERSION structure is greater or less than a specified major/minor version combination, or zero if it is equal.
HTTP_SET_NULL_ID The HTTP_SET_NULL_ID macro sets the HTTP_OPAQUE_ID to NULL.
HTTP_SET_VERSION Sets a specified HTTP_VERSION structure to a specified major/minor version combination.
HttpAddFragmentToCache The HttpAddFragmentToCache function caches a data fragment with a specified name by which it can be retrieved, or updates data cached under a specified name.
HttpAddUrl Registers a given URL so that requests that match it are routed to a specified HTTP Server API request queue.
HttpAddUrlToUrlGroup Adds the specified URL to the URL Group identified by the URL Group ID.
HTTPAPI_EQUAL_VERSION Returns a non-zero value if an HTTPAPI_VERSION structure is exactly equal to a specified major/minor version combination, or zero otherwise.
HTTPAPI_GREATER_VERSION Returns a non-zero value if an HTTPAPI_VERSION structure is greater than a specified major/minor version combination, or zero otherwise.
HTTPAPI_LESS_VERSION Returns a non-zero value if an HTTPAPI_VERSION structure is less than a specified major/minor version combination, or zero otherwise.
HTTPAPI_VERSION_GREATER_OR_EQUAL The HTTPAPI_VERSION_GREATER_OR_EQUAL returns a non-zero value if an HTTPAPI_VERSION structure is greater than or equal to a specified major/minor version combination, or zero otherwise.
HttpCancelHttpRequest The HttpCancelHttpRequest function cancels a specified reqest.
HttpCloseRequestQueue Closes the handle to the specified request queue created by HttpCreateRequestQueue.
HttpCloseServerSession Deletes the server session identified by the server session ID.
HttpCloseUrlGroup Closes the URL Group identified by the URL Group ID.
HttpCreateHttpHandle Creates an HTTP request queue for the calling application and returns a handle to it.
HttpCreateRequestQueue Creates a new request queue or opens an existing request queue.
HttpCreateServerSession Creates a server session for the specified version.
HttpCreateUrlGroup Creates a URL Group under the specified server session.
HttpDeclarePush Declares a resource-to-subresource relationship to use for an HTTP server push. HTTP.sys then performs an HTTP 2.0 server push for the given resource, if the underlying protocol, connection, client, and policies allow the push operation.
HttpDeleteServiceConfiguration Deletes specified data, such as IP addresses or SSL Certificates, from the HTTP Server API configuration store, one record at a time.
HttpFlushResponseCache Removes from the HTTP Server API cache associated with a given request queue all response fragments that have a name whose site portion matches a specified UrlPrefix.
HttpInitialize The HttpInitialize function initializes the HTTP Server API driver, starts it, if it has not already been started, and allocates data structures for the calling application to support response-queue creation and other operations.
HttpPrepareUrl Parses, analyzes, and normalizes a non-normalized Unicode or punycode URL so it is safe and valid to use in other HTTP functions.
HttpQueryRequestQueueProperty Queries a property of the request queue identified by the specified handle.
HttpQueryServerSessionProperty Queries a server property on the specified server session.
HttpQueryServiceConfiguration Retrieves one or more HTTP Server API configuration records.
HttpQueryUrlGroupProperty Queries a property on the specified URL Group.
HttpReadFragmentFromCache The HttpReadFragmentFromCache function retrieves a response fragment having a specified name from the HTTP Server API cache.
HttpReceiveClientCertificate The HttpReceiveClientCertificate function is used by a server application to retrieve a client SSL certificate or channel binding token (CBT).
HttpReceiveHttpRequest Retrieves the next available HTTP request from the specified request queue either synchronously or asynchronously.
HttpReceiveRequestEntityBody Receives additional entity body data for a specified HTTP request.
HttpRemoveUrl Causes the system to stop routing requests that match a specified UrlPrefix string to a specified request queue.
HttpRemoveUrlFromUrlGroup Removes the specified URL from the group identified by the URL Group ID.
HttpSendHttpResponse Sends an HTTP response to the specified HTTP request.
HttpSendResponseEntityBody Sends entity-body data associated with an HTTP response.
HttpSetRequestQueueProperty Sets a new property or modifies an existing property on the request queue identified by the specified handle.
HttpSetServerSessionProperty Sets a new server session property or modifies an existing property on the specified server session.
HttpSetServiceConfiguration Creates and sets a configuration record for the HTTP Server API configuration store.
HttpSetUrlGroupProperty Sets a new property or modifies an existing property on the specified URL Group.
HttpShutdownRequestQueue Stops queuing requests for the specified request queue process.
HttpTerminate Cleans up resources used by the HTTP Server API to process calls by an application.
HttpUpdateServiceConfiguration Updates atomically a service configuration parameter that specifies a Transport Layer Security (TLS) certificate in a configuration record within the HTTP Server API configuration store.
HttpWaitForDemandStart Waits for the arrival of a new request that can be served by a new request queue process.
HttpWaitForDisconnect Notifies the application when the connection to an HTTP client is broken for any reason.
HttpWaitForDisconnectEx This function is an extension to HttpWaitForDisconnect.

Structures

Title Description
HTTP_BANDWIDTH_LIMIT_INFO The HTTP_BANDWIDTH_LIMIT_INFO structure is used to set or query the bandwidth throttling limit. This structure must be used when setting or querying the HttpServerBandwidthProperty on a URL Group or server session.
HTTP_BINDING_INFO Used to associate a URL Group with a request queue.
HTTP_BYTE_RANGE The HTTP_BYTE_RANGE structure is used to specify a byte range within a cached response fragment, file, or other data block.
HTTP_CACHE_POLICY Used to define a cache policy associated with a cached response fragment.
HTTP_CHANNEL_BIND_INFO HTTP_CHANNEL_BIND_INFO.
HTTP_CONNECTION_LIMIT_INFO Used to set or query the limit on the maximum number of outstanding connections for a URL Group.
HTTP_COOKED_URL Contains a validated, canonical, UTF-16 Unicode-encoded URL request string together with pointers into it and element lengths.
HTTP_DATA_CHUNK Represents an individual block of data either in memory, in a file, or in the HTTP Server API response-fragment cache.
HTTP_FLOWRATE_INFO The transfer rate of a response.
HTTP_KNOWN_HEADER Contains the header values for a known header from an HTTP request or HTTP response.
HTTP_LISTEN_ENDPOINT_INFO Controls whether IP-based URLs should listen on the specific IP address or on a wildcard.
HTTP_LOG_DATA Contains a value that specifies the type of the log data.
HTTP_LOG_FIELDS_DATA Used to pass the fields that are logged for an HTTP response when WC3 logging is enabled.
HTTP_LOGGING_INFO Used to enable server side logging on a URL Group or on a server session.
HTTP_MULTIPLE_KNOWN_HEADERS Specifies the headers that are included in an HTTP response when more than one header is required.
HTTP_PROPERTY_FLAGS Used by the property configuration structures to enable or disable a property on a configuration object when setting property configurations.
HTTP_QOS_SETTING_INFO Contains information about a QOS setting.
HTTP_REQUEST_AUTH_INFO Contains the authentication status of the request with a handle to the client token that the receiving process can use to impersonate the authenticated client.
HTTP_REQUEST_CHANNEL_BIND_STATUS HTTP_REQUEST_CHANNEL_BIND_STATUS.
HTTP_REQUEST_HEADERS Contains headers sent with an HTTP request.
HTTP_REQUEST_INFO Extends the HTTP_REQUEST structure with additional information about the request.
HTTP_REQUEST_V1 Uses the HTTP_REQUEST structure to return data associated with a specific request.
HTTP_REQUEST_V2 Extends the HTTP_REQUEST_V1 request structure with more information about the request.
HTTP_RESPONSE_HEADERS Contains the headers sent with an HTTP response.
HTTP_RESPONSE_INFO Extends the HTTP_RESPONSE structure with additional information for the response.
HTTP_RESPONSE_V1 Contains data associated with an HTTP response.
HTTP_RESPONSE_V2 Extends the HTTP version 1.0 response structure with more information for the response.
HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS The HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS structure contains the information for Basic authentication on a URL Group.This structure is contained in the HTTP_SERVER_AUTHENTICATION_INFO structure.
HTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS Contains the information for digest authentication on a URL Group.
HTTP_SERVER_AUTHENTICATION_INFO Used to enable server-side authentication on a URL group or server session.
HTTP_SERVICE_BINDING_A HTTP_SERVICE_BINDING_A.
HTTP_SERVICE_BINDING_BASE HTTP_SERVICE_BINDING_BASE.
HTTP_SERVICE_BINDING_W HTTP_SERVICE_BINDING_W.
HTTP_SERVICE_CONFIG_CACHE_SET Used in the pConfigInformation parameter of the HttpSetServiceConfiguration function.
HTTP_SERVICE_CONFIG_IP_LISTEN_PARAM Used to specify an IP address to be added to or deleted from the list of IP addresses to which the HTTP service binds.
HTTP_SERVICE_CONFIG_IP_LISTEN_QUERY Used by HttpQueryServiceConfiguration to return a list of the Internet Protocol (IP) addresses to which the HTTP service binds.
HTTP_SERVICE_CONFIG_SSL_CCS_KEY Serves as the key by which identifies the SSL certificate record that specifies that Http.sys should consult the Centralized Certificate Store (CCS) store to find certificates if the port receives a Transport Layer Security (TLS) handshake.
HTTP_SERVICE_CONFIG_SSL_CCS_QUERY Specifies a Secure Sockets Layer (SSL) configuration to query for an SSL Centralized Certificate Store (CCS) record on the port when you call the HttpQueryServiceConfiguration function.
HTTP_SERVICE_CONFIG_SSL_CCS_SET Represents the SSL certificate record that specifies that Http.sys should consult the Centralized Certificate Store (CCS) store to find certificates if the port receives a Transport Layer Security (TLS) handshake.
HTTP_SERVICE_CONFIG_SSL_KEY Serves as the key by which a given Secure Sockets Layer (SSL) certificate record is identified.
HTTP_SERVICE_CONFIG_SSL_PARAM Defines a record in the SSL configuration store.
HTTP_SERVICE_CONFIG_SSL_QUERY Used to specify a particular record to query in the SSL configuration store.
HTTP_SERVICE_CONFIG_SSL_SET Used to add a new record to the SSL store or retrieve an existing record from it.
HTTP_SERVICE_CONFIG_SSL_SNI_KEY Serves as the key by which a given Secure Sockets Layer (SSL) Server Name Indication (SNI) certificate record is identified in the SSL SNI store.
HTTP_SERVICE_CONFIG_SSL_SNI_QUERY Used to specify a particular Secure Sockets Layer (SSL) Server Name Indication (SNI) certificate record to query in the SSL SNI store.
HTTP_SERVICE_CONFIG_SSL_SNI_SET Used to add a new Secure Sockets Layer (SSL) Server Name Indication (SNI) certificate record to the SSL SNI store or retrieve an existing record from it.
HTTP_SERVICE_CONFIG_TIMEOUT_SET Used to set the HTTP Server API wide timeout value.
HTTP_SERVICE_CONFIG_URLACL_KEY Used to specify a particular reservation record in the URL namespace reservation store.
HTTP_SERVICE_CONFIG_URLACL_PARAM Used to specify the permissions associated with a particular record in the URL namespace reservation store.
HTTP_SERVICE_CONFIG_URLACL_QUERY Used to specify a particular reservation record to query in the URL namespace reservation store.
HTTP_SERVICE_CONFIG_URLACL_SET Used to add a new record to the URL reservation store or retrieve an existing record from it.
HTTP_SSL_CLIENT_CERT_INFO Contains data about a Secure Sockets Layer (SSL) client certificate that can be used to determine whether the certificate is valid.
HTTP_SSL_INFO Contains data for a connection that uses Secure Sockets Layer (SSL), obtained through the SSL handshake.
HTTP_STATE_INFO Used to enable or disable a Server Session or URL Group.
HTTP_TIMEOUT_LIMIT_INFO Defines the application-specific connection timeout limits.
HTTP_TRANSPORT_ADDRESS Specifies the addresses (local and remote) used for a particular HTTP connection.
HTTP_UNKNOWN_HEADER Contains the name and value for a header in an HTTP request or response whose name does not appear in the enumeration.
HTTP_VERSION Defines a version of the HTTP protocol that a request requires or a response provides.
HTTPAPI_VERSION Defines the version of the HTTP Server API.