是否有任何使用 HTTP_SEND_RESPONSE_FLAG_OPAQUE 标志的 HttpSendHttpResponse 示例(WebSocket 支持需要)?

Is there any example of HttpSendHttpResponse usage of the HTTP_SEND_RESPONSE_FLAG_OPAQUE flag (needed for WebSocket support)?

我正在使用带有 HTTP_SEND_RESPONSE_FLAG_OPAQUE 标志的 HttpSendHttpResponse(),正如 Microsoft 所建议的(只有 101 响应状态和使用 WebSocketBeginServerHandshake() 函数准备的响应 headers),但我收到了 ERROR_INVALID_PARAMETER 错误。

没有这个标志,我可以从我的浏览器与我的服务器建立一个 WebSocket 连接,但据我所知,我将无法将这个连接用作 WebSocket,因为 HTTP.SYS尝试将连接流量解释为 HTTP-framed.

有人可以向我提供 link HttpSendHttpResponse() 使用 HTTP_SEND_RESPONSE_FLAG_OPAQUE 标志的工作示例吗?

我找到了正确使用 HTTP_SEND_RESPONSE_FLAG_OPAQUE 标志的方法:它必须与 HTTP_SEND_RESPONSE_FLAG_MORE_DATA 标志一起使用。不幸的是,Microsoft 没有在他们的文档中提及这种细微差别。

基于文档:HttpSendHttpResponse

HttpSendHttpResponse returns ERROR_INVALID_PARAMETER for all other HTTP response types if HTTP_SEND_RESPONSE_FLAG_OPAQUE flag is used.

所以这是意料之中的。暂时忽略此错误,您可以检查接收部分是否可以接收到正确的数据。