1. Introduction

AWS stands for Ada Web Server. It is an Ada implementation of the HTTP/1.1 and HTTP/2 protocols as defined in the RFC-2616 from June 1999 and RFC-7640 from May 2015 respectivelly.

The goal is not to build a full Web server but more to make it possible to use a Web browser (like Firefox or Chrome) to control an Ada application. As we’ll see later it is also possible to have two Ada programs exchange informations via the HTTP protocol. This is possible as AWS also implements the client side of the HTTP protocol.

Moreover with this library it is possible to have more than one server in a single application. It is then possible to export different kind of services by using different HTTP ports, or to have different ports for different services priority. Client which must be served with a very high priority can be assigned a specific port for example.

As designed, AWS big difference with a standard CGI server is that there is only one executable. A CGI server has one executable for each request or so, this becomes a pain to build and to distribute when the project gets bigger. We will also see that it is easier with AWS to deal with session data.

AWS support also HTTPS (secure HTTP) using SSL. This is based on either OpenSSL, LibreSSL or GNUTLS two Open Source SSL implementations.

Major supported features are:

  • HTTP/1.1 and HTTP/2 (aka h2c) implementation

  • HTTPS/1.1 and HTTPS/2 (aka h2) (Secure HTTP) implementation based on SSLv3

  • Template Web pages (separate the code and the design)

  • Web Services - SOAP based

  • WSDL support (generate stub/skeleton from WSDL documents)

  • Basic and Digest authentication

  • Transparent session handling (server side)

  • HTTP state management (client side cookies)

  • File upload

  • Server push

  • SMTP / POP (client API)

  • LDAP (client API)

  • Embedded resources (full self dependant Web server)

  • Complete client API, including HTTPS

  • Web server activity log

1.1. HTTP/2

The HTTP/2 protocol has been designed with speed and security in mind. It is a binary protocol making the exchanged frames less verbose and has support for header compression to even more reduces the payload size. The header compression format is called HPACK (described in RFC-7541 from May 2015) and permits to efficiently represent HTTP header fields by using an Huffman encoding specifically designed for HTTP header’s information.

The HTTP/2 protocol has some specific configuration options. See Configuration options. All of them are starting with the HTTP2 prefix.

Finally the HTTP/2 protocol is enabled by default and can be disabled by setting the option HTTP2_Activated to false.

Note that disabling the HTTP/2 protocol will not make the server unusable, just that during the handshake with the client it won’t be selected as not advertised as supported. In this case, AWS server will continue working using the HTTP/1.1 protocol.

AWS also provides client side supports for the HTTP/2 protocol. A parameter in the client API can be used to request the HTTP/1.1 or the HTTP/2 protocol to be used or to let the client and server decide about the protocol to be used during the handshake.