http2

HTTP/2 Protocol Implementation hpack http2 http
HEAD Latest release released
ysbaddaden/http2
95 8 1
Julien Portalier

HTTP

A pure Crystal (but incomplete) implementation of the HTTP/2 protocol.

Requires OpenSSL 1.1 or above to support ALPN protocol negotiation, which is required for HTTP/2 over secure connections.

TODO

  • [x] HPACK (including DH compression)

  • [x] HTTP/2 connection, streams, frames, ...

  • [x] HTTP/2 flow control (in/out, whole-connection, per-stream)

  • [ ] HTTP/2 priority

  • [x] support HTTP/2 server connections

  • [x] ~~integrate transparently into HTTP::Server~~ (broken)

  • [ ] ~~integrate into HTTP::Server::Context (http version, server-push)~~

  • [x] support HTTP/2 client connections

  • [ ] ~~integrate into HTTP::Client~~

  • [x] HPACK tests (HTTP/2 protocol, ...)

  • [ ] HTTP/2 server unit tests (HTTP/2 protocol, ...)

  • [ ] HTTP/2 client unit tests (HTTP/2 protocol, ...)

  • [x] h2spec

Tests

Build and run the bin/server server, then launch h2spec.

$ make bin/server

Test against HTTP:

$ bin/server
$ ./h2spec -p 9292 -S

Test against HTTPS:

$ TLS=true bin/server
$ ./h2spec -p 9292 -k -t -S

RFC

HTTP/2

  • rfc7540 HTTP/2
  • rfc7541 HPACK Header Compression for HTTP/2

HTTP/1

  • rfc1945 HTTP/1.0 (informational)
  • rfc2616 HTTP/1.1 (obsolete)
  • rfc7230 HTTP/1.1 Message Syntax and Routing
  • rfc7231 HTTP/1.1 Semantics and Content
  • rfc7232 HTTP/1.1 Conditional Requests
  • rfc7233 HTTP/1.1 Range Requests
  • rfc7234 HTTP/1.1 Caching
  • rfc7235 HTTP/1.1 Authentification
http2:
  github: ysbaddaden/http2
  
License Apache-2.0
Crystal none

Authors

Dependencies 0

Development Dependencies 1

  • minitest >= 0.5.0
    {'github' => 'ysbaddaden/minitest.cr', 'version' => '>= 0.5.0'}

Dependents 0

Last synced .
search fire star recently