Http-server

From fd.io
Jump to: navigation, search

HTTP Server over TCP/ICN

This is an implementation of a HTTP proxy server able to serve client requests using both TCP and ICN as transport protocol. This project is a fork from the http server implemented by Ole Christian Eidheim and open sourced at https://github.com/eidheim/Simple-Web-Server. distributed under the MIT license. In the ICN flavour, so far, we support the GET method. The current application is used in end devices to to proxy HTTP apps that do not use ICN natively.

Dependencies

  • libboost-regex-dev
  • libboost-system-dev
  • libboost-filesystem-dev
  • libicnet
  • libcurl

Install the HTTP-Server

Installation from binary packages

Ubuntu 14.04 and Ubuntu 16.04

 $ echo "deb [trusted=yes] https://nexus.fd.io/content/repositories/fd.io.master.ubuntu.$(lsb_release -sc).main/ ./" \
          | sudo tee -a /etc/apt/sources.list.d/99fd.io.list
 $ sudo apt-get update
 $ sudo apt-get install http-server

Centos 7

$ cat << EOF | sudo tee -a /etc/yum.repos.d/99fd.io.repo
[fdio-cicn-master]
name=fd.io master branch latest merge
baseurl=https://nexus.fd.io/content/repositories/fd.io.master.centos7/
enabled=1
gpgcheck=0
EOF
$ sudo yum install http-server

Installation from source code

For installing the application:

$ mkdir build && cd build
$ cmake ..
$ make
$ sudo make install

Usage

For starting the http-server, from the build folder:

$ cd build
$ ./http-server

The server now is:

  • Serving files from the folder /var/www/html
  • Listening on the prefix http://webserver
  • Listening on the TCP port 8080

For retrieving a content through icn, the name must have the following format:

$ iget http://webserver/file.mp4

The application iget is available in the package libicnet.

The server accept three option through the command line:

$ ./http-server -h
http-server [-p PATH_TO_ROOT_FOOT_FOLDER] [-l WEBSERVER_PREFIX] [-x REMOTE_ORIGIN]

The default values for the first two parameters are /var/www/html for the root folder and http://webserver as icn prefix served.

The http-server can also be used as a transparent proxy: if the resources to retrieve are stored in a remote location and they are available over http, it is possible to retrieve them by specifying their location when starting the http-server, in this way:

 $ ./http-server -x myvideos.org

The server will perform the following operations:

  • When it receives the first client request, it will look for the asked resource locally
  • If the resource is not available, it will forward the HTTP request to the remote origin myvideos.com
  • The remote origin will reply with the content (or with an error code)
  • The reply will be forwarded to the client

Platforms

Http-server has been tested in:

  • Ubuntu 16.04 (x86_64)
  • Ubuntu 14.04 (x86_64)
  • Debian Testing
  • MacOSX 10.12
  • CentOS 7