[简介]]
我一直在每周 5 次练习 C 语言 4 个月,我试图做出最好的猜测,以便进入 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 有一个标准库用于处理 HTTP
和 TCP
。HTTP2
使用加密,据我所知基于“TCP
”。 C 是否有使用“HTTP2 TCP
”类型的标准。我需要能够从 HTTP2
中读取文本并轻松执行任务(发送(),接收()。(<-FOCUS POINT END).
[决赛]
我可以使用 C 标准 POSIX 库来实际开发 HTTP2 程序吗?
我将如何在 C 中使用 HTTP2 & 它是否可行。
HTTP 是一个协议。它定义了计算机相互通信的方式。那里有很多不同的协议; HTTP/2 和 HTTP 基于 TCP/IP,几乎所有计算机都使用它来连接服务器。 TCP/IP 指定如何在客户端和特定服务器之间创建连接,以及如何发送原始字节。 HTTP(2) 是在此之上的一层,它定义了客户端应该如何告诉服务器它想要什么资源。
基本 POSIX 提供的 API 仅扩展到原始 TCP/IP。这是一个应用程序可以发送到 Web 服务器以请求网页的示例(这是一个 HTTP/1 请求,HTTP/2 是二进制和加密的,使其不可读)
GET /somepage HTTP/1.0
Host: example.com
但是,在你的程序中手动组装这些请求有点不方便,尤其是当你开始做发送参数、加密等事情时。在这种情况下,人们应该在机器上使用一些库。重要的是这些是非标准的。可能最常见的之一是
libcurl
.
这里有一个 libcurl 教程。总结:
您可以通过向编译器和链接器提供一些标志来使用 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()
获得
easy handle。这个句柄允许你提出请求。
使用
curl_easy_setopt(handle, option, value)
在手柄上设置选项。 handle
是您获得的“easy 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标准库中没有专门用于
http2
的部分。
但是,在
http2
中使用 C
绝对是可能的,有据可查且被广泛使用。例如:
有关
http2
和各种编程语言的更多信息可以在这里找到:https://github.com/httpwg/http2-spec/wiki/Implementations