gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:53:41 29 4
gpt4 key购买 nike

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

我正在尝试使用 libmicrohttpd 来实现此目的,我希望最终得到的过程是:

  1. 首次连接时显示着陆页

  2. 所有链接页面的请求都会生成 http 102 消息(以避免使用 http 403 消息进行身份验证请求并在处理身份验证请求时超时)

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

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

我对这个级别的 libmicrohttpd 和 http 开发有点陌生,我原以为我可以发送带有 102 状态代码的响应

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 文件,那么一切都会正常。

任何和所有的建议都会受到赞赏 - 即使它是告诉我该去哪里。

最佳答案

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

关于c - 基于 libmicrohttpd 的服务器,具有带外身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40791988/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com