nghttp2 - HTTP/2 C Library 简明教程(一)

时间:2022-04-29 01:34:18

nghttp2 - HTTP/2 C Library

nghttp2 是在C中的超文本传输协议版本2的实现.
HTTP/2 的框架层被实现为可重用的C库. 最重要的是我们实现了一个HTTP/2客户端,服务器和代理.还为HTTP/2开发了负载测试和基准测试工具.
HPACK编码器和解码器可用作公共API。
还有一个实验性的高级C++库.
我们有这个库的Python绑定,但是我们还没有完整的代码覆盖.

发展情况

为HTTP/2实现了RFC 7540 HTTP/2和RFC 7541 HPACK-头部压缩.
nghttp2的代码库是从 spdylay中分出来的. (https://github.com/tatsuhiro-t/spdylay) project.

公共测试服务器

以下端点可用来测试nghttp2的实现.

  • https://nghttp2.org/ (TLS + ALPN/NPN)
    此端点通过ALPN/NPN支持h2,h2-16,h2-14,和http/1.1,并且需要HTTP/2连接的TLSv1.2.

  • http://nghttp2.org/ (HTTP Upgrade and HTTP/2 Direct)
    h2c and http/1.1

编码风格

我们使用clang-format来统一格式化源代码.clang-format的配置文件.clang-format位于根目录下. 由于clang-format在版本之间产生稍微不同的结果,我们目前使用clang-format-5.0 .

为了检测任何违反编码风格的行为,我们建议设置git pre-commit hook来检查你更改的编码风格.pre-commit文件位于更目录. 将其复制到.git/hooks下,并确保是可执行文件. pre-commit 脚本使用clang-format-diff.py来检测任何样式错误. 如果它不在你的PATH中, 或者他以不同的名字存在(如debian中的clang-format-diff-5.0),可以将它添加到 PATH变量中,或者添加git选项clangformatdiff.binary来指向脚本.

针对emacs用户,将clang-format集合到emacs是非常容易的. clang-format.el应该与clang分发, 如果没有发现,请从这里下载,并将这些行添加到你的.emacs文件.

;; From
;; https://code.google.com/p/chromium/wiki/Emacs#Use_Google's_C++_style!
(load "/<path/to>/clang-format.el")
(add-hook 'c-mode-common-hook
(function (lambda () (local-set-key (kbd "TAB")
'clang-format-region)
)
)
)

你可以找到其他的编辑器集成. http://clang.llvm.org/docs/ClangFormat.html.