如何解决C 是否有 HTTP2 的标准库
[介绍]]
我每周练习 C 语言 4 个月 5 次,我正在尝试为进入 HTTP2 的 Web 服务器/客户端编程做出最好的猜测。我使用过 HTML5 和 Javascript 我也使用过 HTTP2 并且在低级别使用过 SPDY。
[信息]
Debian GNU/Linux (Buster),V.10
编译器 - Clang
标头 HTTP2(?)
HTTP 头文件(sys/socket.h、sys/types.h、signal.h、arpa/inet.h)
网络协议 - TCP、HTTP2、HTTP。
[问题]
在使用 Java 时,您会注意到游戏引擎中使用了大量 HTTP2
。到 2021 年,HTTP2
在当前语言中的标准化程度越来越高。(重点->)C 有一个标准库,可用于 HTP
和 TCP
。HTTP2
使用加密,据我所知基于“TCP
”。 C 是否有使用“HTTP2 TCP
”类型的标准。我需要能够从 HTTP2
读取文本并轻松执行任务(send()、recv().(
[最终]
我可以使用 C 标准 POSIX 库实际开发 HTTP2 程序吗?
我将如何在 C 中使用 HTTP2 以及它是否可行。
解决方法
HTTP 是一种协议。它定义了计算机相互通信的方式。有很多不同的协议; HTTP/2 和 HTTP 基于 TCP/IP,几乎所有计算机都使用 TCP/IP 连接到服务器。 TCP/IP 指定如何在客户端和特定服务器之间创建连接,并发送原始字节。 HTTP(2) 是在这之上的一层,它定义了客户端应该如何告诉服务器它想要什么资源。
基础 POSIX 提供的 API 仅扩展到原始 TCP/IP。下面是一个应用程序可以发送到网络服务器以请求网页的示例(这是一个 HTTP/1 请求,HTTP/2 是二进制和加密的,使其不可读)
GET /somepage HTTP/1.0
Host: example.com
但是,在程序中手动组装这些请求有点不方便,尤其是当您开始执行发送参数、加密等操作时。在这种情况下,人们应该使用机器上的一些库。重要的是这些是非标准的。可能最常见的一种是 libcurl
。
Here's a libcurl tutorial。总结一下:
您可以通过向编译器和链接器提供一些标志来使用 libcurl 编译您的程序。您可以通过运行 curl-config --cflags
和 curl-config --libs
来获得这些。
使用 curl_global_init(bitfield)
初始化 libcurl。位域可以将 CURL_GLOBAL_WIN32
和 CURL_GLOBAL_SSL
作为其值。您可能需要 CURL_GLOBAL_SSL
,因为您想使用加密。
libcurl 有两个接口:easy
和 multi
。我要报道easy
。
通过调用 curl_easy_init()
获得简单的操作。此句柄允许您发出请求。
使用 curl_easy_setopt(handle,option,value)
在手柄上设置选项。 handle
是您获得的“简单句柄”,option
是一个常量 - 例如 CURLOPT_URL
用于设置要请求的 URL - 而 value
是您要设置的值它到。它通常是一个字符串。
将 option
设置为 CURLOPT_WRITEFUNCTION
的回调函数。它应该具有签名 size_t(void *buffer,size_t size,size_t nmemb,void *userp)
。当 libcurl 从服务器接收数据时调用它。通常,它会被多次调用。 nmemb
指出 buffer
中数据的大小。它应该返回它成功处理的字节数。通常这是 nmemb
。
使用 curl_easy_perform(handle)
执行请求。
当您完成您想要提出的每个请求后,调用 curl_global_cleanup()
。
在 C standard library 中没有专门用于 http2
的部分。
然而,在 http2
中使用 C
绝对是可能的,有据可查并被广泛使用。例如:
可以在此处找到有关 http2
和各种编程语言的更多信息:https://github.com/httpwg/http2-spec/wiki/Implementations
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。