访问 cpp-netlib http 服务器中的请求标头

2023-12-30

我已经开始使用开发 HTTP 服务器cpp-netlib(稳定版本 0.10.1)并且从可用文档中我不确定如何访问服务器处理程序中的 HTTP 请求标头。我知道可以使用包装器来完成,如下所示:

void operator()(async_server::request const &Request, async_server::connection_ptr pConnection)
{
    http::impl::request_headers_wrapper<http::tags::http_async_server> Headers = headers(Request);
}

但根据定义not_quite_pod_request_base in headers.hpp这实际上是一个成对的向量,如果我想的话,很难搜索,例如查找某个标头是否存在。如果没有其他选择,那么我当然会坚持这个,但是至少从以下方面来看,它最初似乎是作为一个多重地图headers_container.hpp:

namespace boost { namespace network {

    template <class Tag>
    struct headers_container {
        typedef std::multimap<
            typename string<Tag>::type,
            typename string<Tag>::type
            > type;
    };

} // namespace network
} // namespace boost

那么任何人都可以指出为什么会有这样的重新定义,或者我是否缺少某种方法来真正获得multimap或者是包装纸vector处理标题的“首选”方式cpp-netlib?至少对我来说似乎multimap合作起来会容易得多。

UPDATE

我还快速浏览了 POCO 库,但无法理解它们的身份验证类是否仅适用于客户端会话或服务器?如果有人能对此给出提示,也许我仍然可以切换到 POCO,如果这能让生活变得更轻松的话。


您所指的特征适用于客户端请求中的标头,适用于 cpp-netlib 中的客户端实现。正在完成一些工作(未完成),以使从服务器中的请求获取标头与从客户端请求/响应对象获取请求相同。

服务器端的标头是成对向量的原因是为了空间和时间方面的“效率”。如果您可以支付在服务器处理程序上创建多重映射的费用,那么您可能应该这样做。以有效的方式有效地处理请求中的标头的通常模式是始终对您正在查找的标头进行线性扫描,并在它们进入时对其进行处理。与此类似:

string content_type, content_length;
for (const auto& header : request.headers) {
  if (header.name == "Content-Type") content_type = header.value;
  if (header.name == "Content-Length") content_length = header.value;
  if (!content_type.empty() && !content_length.empty()) break;
}

您可以使用某种模式(astd::map<string, std::function<void(const std::string&)>>也许)如果您的应用程序需要这种级别的标头处理。

但一般来说,迭代向量列表不会花费太多时间。如果标头数量很大 (O(10,000)),那么您还会遇到其他问题。这里的权衡在于内存局部性(向量具有连续的元素,而不是映射,其元素通常随机分配在内存的不同部分)和高效查找(对数时间只有在达到一定大小后才真正有意义)。

我完全接受便利性受到一点影响的观点。也许不同的数据结构在这里会有帮助(aboost::flat_map也许)。但是接口的改进是使处理客户端请求/响应的代码也可以处理服务器请求/响应对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

访问 cpp-netlib http 服务器中的请求标头 的相关文章

随机推荐

  • 如何只获取一次脚本

    所以这是一个简化的问题 我将其用作参考 以使这个问题变得简单 如果超过 x 像素 则使用 resize 来 getScript jQuery https stackoverflow com questions 11388247 using
  • 记录 mongoose 在应用程序中触发的所有查询

    我有使用nodejs和mongodb的应用程序 我曾使用猫鼬进行ODM 现在我想记录猫鼬在整个应用程序期间触发的所有查询 如何记录这些 您可以像这样启用调试模式 mongoose set debug true 或添加您自己的调试回调 mon
  • 从视觉 API 预览条码扫描仪的尺寸

    我正在使用 Google 的 Android Vision API 中的条形码阅读器示例 预览尺寸似乎没有填满整个可用空间 我使用的是 Nexus 4 预览右侧有一个白色的未使用空间 大约是宽度的 1 3 我希望能够在各种设备上运行这个示例
  • (类型错误:无法在 HttpHeaders.applyUpdate 处读取 null 属性“长度”)Angular 5,Http 客户端

    我在服务中发出 http 请求时收到此响应 这是登录组件 export class LoginComponent credentials Credentials constructor private auth AuthService In
  • Swift 运行时文档 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我一直在探索Apple的swift文档 现在我来这里询问 有关于 Swift 运行时的文档吗 我读过 Swift 编程语言 一书 http
  • 按索引级别为 Pandas Multiindex DataFrame 赋值

    我有一个 Pandas 多索引数据框 我需要为系列中的一列分配值 该系列与数据帧的第一级索引共享其索引 import pandas as pd import numpy as np idx0 np array bar bar bar baz
  • 检查请求是 GET 还是 POST

    在我的控制器 动作中 if empty POST if Auth attempt Input get data return Redirect intended else Session flash error message 有没有方法在
  • 在 CSS 中使用图像文件与数据 URI

    我正在尝试确定包含我编写的脚本所需的图像的最佳方式 我发现这个网站 http www jimbojw com wiki index php title Data URIs and Inline Images这让我考虑尝试这种方法将图像作为d
  • 在 WPF 应用程序中使用手写笔或手指按下触摸屏上的按钮时出现异常

    我有一个带有初始窗口的 WPF 应用程序 该窗口在启动时显示为闪屏 在启动过程中 有一个后台线程 我们可以通过单击启动屏幕中的按钮来取消该线程 使用鼠标并单击按钮取消时 这一切都可以正常工作 但是 如果我使用触摸屏单击此按钮 那么应用程序偶
  • PHP:如何获取相关文件的URL

    PHP 是否有一个本机函数可以返回使用相对路径声明的文件的完整 URL 我需要得到 http www domain com projects test img share jpg from img share jpg 到目前为止 我已经尝试
  • 在 Rust 中使用本地函数是否会对性能产生负面影响?

    我最近意识到我可以在 Rust 中创建本地函数 函数中的函数 似乎是清理代码而不污染文件函数空间的好方法 下面是我所说的本地函数与 外部 函数的小样本 fn main fn local plus x i64 y i64 gt i64 x y
  • htmlentities“无效的多字节序列”错误

    在尝试通过 PHP 的 htmlentities 函数运行字符串时 我在某些情况下收到 无效的多字节序列 错误 有没有办法在调用函数之前清理字符串以防止发生此错误 从 PHP 5 4 开始 您应该使用以下内容来正确转义输出 escapedS
  • python 函数内部定义的 locals() 不起作用[重复]

    这个问题在这里已经有答案了 考虑下面的代码 dct one 2 3 现在下面的工作 for key val in dct items locals key val print one Result 2 3 但是当我使用我真正想要的功能时却不
  • hook脚本中修改svn下的文件

    修改特定文件的最佳方法是什么 如果有 under我们在 post commit 中的存储库hook 例如 我想将校验和行附加到 somefile conf 文件 您可能想阅读本章 http svnbook red bean com en 1
  • ASP.NET - 存储临时文件

    我有一个网络表单 允许用户在我们的系统中开票时上传文件 上传是使用 ajax控件工具包 asyncFileUpload控件完成的 这个想法是将文件保存到临时目录中 并且仅在用户点击 提交 按钮时将它们保存到永久位置 我希望能够删除不再相关的
  • 是否可以通过 adb shell 启动活动并接收其响应? [复制]

    这个问题在这里已经有答案了 我知道你可以从任何应用程序启动任何导出的活动 via adb使用以下命令 am start n com myapp test TestActivity 使用 am start 命令还可以向活动发送额外的数据 我知
  • 无法解析程序集:“Java.Interop”

    当我尝试构建应用程序时 出现以下异常 C Program Files x86 MSBuild Xamarin iOS Xamarin iOS Common targets 681 3 错误 无法解析程序集 Java Interop 版本 0
  • 我需要将每 4 个 WordPress 帖子包装在一个 div 中

    我需要一个 div 来包装 WordPress 循环中的每四个帖子 所以它会像 div four posts div div four posts div 我当前的代码是这样的 div class wine section div
  • 从 C# 中的字符串中提取基本 URl?

    我目前正在开发一个使用 NET 1 1 框架的项目 但我陷入了困境 我有一个像 http www example com mypage default aspx http www example com mypage default asp
  • 访问 cpp-netlib http 服务器中的请求标头

    我已经开始使用开发 HTTP 服务器cpp netlib 稳定版本 0 10 1 并且从可用文档中我不确定如何访问服务器处理程序中的 HTTP 请求标头 我知道可以使用包装器来完成 如下所示 void operator async serv