片段缓存

HTTP 服务器 API 为用户提供在缓存中存储数据片段的功能,以便在快速形成 HTTP 响应时使用。

可以通过调用 HttpAddFragmentToCache 函数将片段添加到缓存。 片段由 pUrlPrefix 参数中包含的 URL 标识。 对具有现有片段 URL 的此函数的调用将覆盖现有片段。

最初添加片段的请求队列的所有者可以删除或覆盖片段。 使用 UrlPrefix 调用的 HttpFlushResponseCache 函数删除该前缀中的所有片段以及该 UrlPrefix 的分层后代。 HttpReadFragmentFromCache 函数读取整个片段或片段中的指定字节范围。

注意

将片段添加到缓存不能保证将来的调用可用于发送响应。 片段缓存条目随时可能不可用。 使用不可用片段的调用将失败。 使用片段缓存的应用程序必须准备好处理此故障。

 

使用片段发送响应

片段可用于构成 HTTP 响应实体正文的所有或部分。 可以通过指定HTTP_RESPONSE结构中的HTTP_DATA_CHUNK结构数组,在对 HttpSendHttpResponse 函数的调用中发送响应和实体正文。

HTTP_DATA_CHUNK可以指定内存块、已打开的文件或片段缓存条目的句柄。 这些类型分别对应于 HTTP_DATA_CHUNK 类型: HttpDataChunkFromMemoryHttpDataChunkFromFileHandleHttpDataChunkFromFragmentCache。 HTTP 缓存中的完整响应也可以用作 HTTP_RESPONSE 结构中的片段,尽管不建议这样做。

HTTP_RESPONSE结构包含指向构成响应实体主体的HTTP_DATA_CHUNK结构的数组的指针。 HTTP_RESPONSE结构还包含一个匹配计数,该计数指定HTTP_DATA_CHUNK结构的数组的维度。 HTTP_DATA_CHUNK结构中的 HttpDataChunkFromFragmentCache 值指定数据区块的片段缓存类型。 HTTP_DATA_CHUNK结构还指定片段名称。

如果任何片段缓存条目不可用,包含缓存片段的响应将失败并出现ERROR_PATH_NOT_FOUND。 由于片段缓存条目不能保证可用,因此必须准备好应用程序来处理这种情况。 处理这种情况的一种方法是尝试重新添加片段缓存条目并重新发送响应。 如果发生重复失败,应用程序可以使用存储在内存缓冲区中的数据区块,而不是片段缓存条目。

还可以在 HttpSendResponseEntityBody 函数中指定片段缓存条目。 该片段将添加到 HTTP_DATA_CHUNK 结构中的实体正文,如上文所述。 同样,如果任何指定的片段缓存条目不可用,发送可能会失败。