HttpAddRequestHeaders 添加的 headers 和 HttpSendRequest 发送的 headers 有啥区别

Posted

技术标签:

【中文标题】HttpAddRequestHeaders 添加的 headers 和 HttpSendRequest 发送的 headers 有啥区别【英文标题】:What is the difference between the headers added by HttpAddRequestHeaders and the ones sent by HttpSendRequestHttpAddRequestHeaders 添加的 headers 和 HttpSendRequest 发送的 headers 有什么区别 【发布时间】:2018-04-25 03:25:07 【问题描述】:

我正在处理 WinInet,我想知道 HttpAddRequestHeaders 函数(使用 HttpOpenRequest 句柄)设置的标头与 HttpSendRequest 函数发送的标头之间的实际区别是什么。

为了简化我的代码,有一个更好的地方来定义这样的标题吗?我想避免处理这两种方式

【问题讨论】:

【参考方案1】:

根据 Microsoft 文档:

HttpSendRequest function

该函数还允许客户端指定可选数据发送到 紧跟在请求标头之后的 HTTP 服务器。这个功能是 一般用于“写”操作,例如 PUT 和 POST。

HttpAddRequestHeaders function

HTTP_ADDREQ_FLAG_ADD

如果标题不存在,则添加它。与 HTTP_ADDREQ_FLAG_REPLACE 一起使用。

HTTP_ADDREQ_FLAG_ADD_IF_NEW

仅当标题不存在时才添加它;否则返回错误。

HTTP_ADDREQ_FLAG_COALESCE

合并同名标题。

HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA

合并同名标题。例如,使用此标志添加“Accept: text/”后跟“Accept: audio/”会形成单个标题“Accept: text/, audio/”。这会导致发现的第一个标头被合并。由调用应用程序来确保与合并/单独的标头相关的内聚方案。

HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON

使用分号合并同名标题。

HTTP_ADDREQ_FLAG_REPLACE

替换或删除标题。如果标头值为空并且找到标头,则将其删除。如果不为空,则替换标头值。

因此,如果您只想“添加请求标头”,那么任一 API 都会为您提供相同的功能。

如果您想做“一些特别的事情”(例如“合并标头”),您可能会选择一个或另一个 API。

'希望有帮助

【讨论】:

那么,完全没有区别,对吧?您必须同意这两个定义标头的地方是混淆的。我可以使用 HttpAddRequestHeaders 函数设置的“multipart/form-data”标头发送文件(xml,但也可以是二进制文件...)。我不使用 HttpSendRequest 函数来设置标头。我的最后一个问题,最终澄清一切,是:是否有“n”级标题?这个问题是基于我们可以在两个不同的地方设置它们的事实。只有当 HTTP Headers 有“多于一级”时,这两个地方才有意义。 1.请不要将 Microsoft API 调用与 HTTP 协议混淆。 2. 您可以在此处了解更多关于 HTTP 标头的信息:rfc 2616 Section 4.2、rfc 822 Section 3.1。 3. 两个 API 提供的选项略有不同。无论您选择哪一种,都只是个人喜好问题 - 仅此而已:) '希望对您有所帮助!

以上是关于HttpAddRequestHeaders 添加的 headers 和 HttpSendRequest 发送的 headers 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

jQuery添加插入元素技巧:

Vue 数组添加数组元素和添加单个元素

《VUE》怎么添加文字?添加文字操作流程

arcgis中如何添加图像数据?

在列表中添加元素

如何添加环境变量或路径添加到系统的Path里面