基于libmicrohttpd的服务器,带有带外身份验证

时间:2016-11-24 17:28:02

标签: c http webserver

我正在尝试开发一个非常基本的网络服务器,每个网页都受到保护,但身份验证是通过单独的套接字连接/协议完成的。

我试图使用libmicrohttpd进行此操作,我希望最终的过程是:

  1. 第一次连接时会显示目标网页

  2. 对所有链接页面的请求生成一条http 102消息(以避免在处理身份验证请求时出现带有http 403消息和超时的身份验证请求)

  3. 带外身份验证过程已启动并独立于网络服务器运行

  4. 当验证过程返回时,根据结果发送相应的消息

  5. 我对这个级别的libmicrohttpd和http dev都有点新意,我以为我可以发送带有102状态代码的respsosne

    ret = MHD_queue_response (connection, MHD_HTTP_PROCESSING, response);
    

    然后稍后在同一函数调用中发送MHD_HTTP_OK中的最终响应更改。但是,即使我将两个响应放在队列中而其间没有其他处理(或者有一些任意延迟),客户端也永远不会收到第二个响应,最终会超时。

    我想知道:

    • 是否存在http状态代码问题?或者在http 102之后发送更多响应是否一致,最终是http 200或其他?
    • 当我想将其他响应排入同一个客户端时,我应该使用不同的MHD功能或选项吗?
    • 我是否应该设置一个特殊的守护进程来支持这个?
    • 或者,当然,我完全偏离基础,这可以/应该以这种方式完成吗?

    作为参考,我的守护进程设置了最基本的选项(来自第一个教程示例):

    daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY, port, NULL, 
                    NULL, &generate_page, NULL, MHD_OPTION_END);
    

    如果我只是在回复中提供html文件,那么一切都会起作用。

    任何建议都值得赞赏 - 即使它告诉我去哪里也是如此。

1 个答案:

答案 0 :(得分:0)

主要问题是我试图在两次调用MHD_queue_response时重复使用相同的响应,即使由于http 102而在客户端浏览器上实际上没有显示任何内容。因此,当我试图排队实际响应时使用http 200 MHD已经删除了我试图访问的响应,这可以通过使用虚拟响应或使响应持久来解决。