Ace: HTTP/2 webserver

Access to underlying connection information added 0.16.1

For both HTTP/1 and HTTP/2 it is now possible to access connection information from a worker
Process.get(Ace.HTTP.Connection). This allows inspection and verification of peer certificate. For example allowing a pure Elixir implementation of GRPC.

Access to raw path added in 0.16.3

Gives full control to the user over their applications routing. as well as making it easy to verify the signature of requests.

1 Like

Better errors and child_specs added in 0.16.4 to help get started.

1. Callback errors

Raxx.ReturnError added to help debug callbacks. Now if a callback returns an invalid value the following error will be raise.

** (ReturnError) Invalid reaction from server module. Response must be complete or include update server state

    e.g.
      # Complete
      Raxx.response(:ok)
      |> Raxx.set_body("Hello, World!")

      # New server state
      response = Raxx.response(:ok)
      |> Raxx.set_body(true)
      {[response], new_state}

    Actual value returned was
      :ok

2. Server child_specs

If a module using Ace.HTTP.Service defines all the required server options it can be added to a supervision tree using a simpler child spec.

# lib/my_app/www.ex
defmodule MyApp.WWW do
  use Ace.HTTP.Service, [port: 8080, cleartext: true]
end

# lib/my_app/application.ex
children = [
  {MyApp.WWW, [%{config: foo}]}
  # or
  MyApp.WWW
]
3 Likes

Count active connections to a service added in 0.16.6

Thanks to @arturcygan for this contribution.

2 Likes

Bug when receiving multiple headers fixed in 0.16.7

0.16.8 released

Added

  • Formatter check to travis.
  • Dialyzer check to travis.
  • HTTP/1 request backpressure.

Changed

  • Internal updates to use serialization and parsing from Raxx project

Fixed

  • Exit with status :normal in case where set_active call is made on closed socket.
2 Likes

0.17.0 released

Updated to include the changes to the Raxx interface released in Raxx 0.16.0.
See this thread for release notes.

1 Like

0.18.0 release to separate streaming from simple interface.

Ace HTTP service must now explicitly implement Raxx.SimpleServer or Raxx.Server.

e.g.

defmodule MyApp.WWW do
  use Ace.HTTP.Service, port: 8080, cleartext: true
  use Raxx.SimpleServer

  @impl Raxx.SimpleServer
  def handle_request(_,_) do
    response(:ok)
  end
end

This changes are to facilitate adding middleware to Raxx.

1 Like

Erroneous warnings from use Raxx.SimpleServer fixed in 0.18.2

Small but helpful fix this one. Thanks ishikawa for providing the solution.

1 Like

0.18.3 Fix HTTP/2 handling for application data sent as iolist

See CHANGELOG

1 Like

0.18.5 released

This fixes parsing of te headers in HTTP/2 requests

1 Like

0.18.9 released

  • Fixes: dialyzer warning about :elixir_errors.warn on Elixir >= 1.9.0
  • Added: specify socket options and opt out of HTTP/1.1 or HTTP2.
2 Likes

0.18.10 released

  • added New option error_response, The response that Ace will send if a request handler crashes.
    Useful for setting custom headers, e.g. for CORS.
3 Likes