The OK Web Server
C++ C Python Makefile CMake Logos Other
Latest commit 0bbcf2c Aug 24, 2017 @tejacques tejacques Merge pull request #119 from OkCupid/fix_set_cookie
Fix set cookie
Permalink
Failed to load latest commit information.
client tell the okssl::con_t that the jig is up Oct 14, 2014
conf clean hose Dec 12, 2011
contrib I think this fixes the coredumps in https clients when the caller tim… Oct 25, 2011
dist small tweak for gnu autotools Dec 17, 2005
docs test checkin Mar 20, 2007
examples clean hose Dec 12, 2011
ezdb build ezdb shared Apr 12, 2017
htdocs Rename blocking to async Jul 5, 2017
libahttp Fix horrible formatting Aug 24, 2017
libamt restore shared library functionality Apr 4, 2017
libamt_pthread restore shared library functionality Apr 4, 2017
libamysql restore shared library functionality Apr 4, 2017
libaok Make sure that Set-Cookie header can be duplicated Aug 24, 2017
libokssl set ssl settings in okssld Apr 24, 2017
libokxml restore shared library functionality Apr 4, 2017
libpub Rename blocking to async Jul 5, 2017
libredis Fix if condition to send sha1 hash when it should be Jun 25, 2017
librfn Rename blocking to async Jul 5, 2017
libweb restore shared library functionality Apr 4, 2017
logd changes for static builds Mar 28, 2017
m4 need empty file to get git to checkin empty dir, for mnahas Nov 8, 2011
notes svn merge -r5280:5301 svn+ssh://am.lcs.mit.edu/home/am8/max/svnrepos/… Apr 30, 2010
okd changes for static builds Mar 28, 2017
pub changes for static builds Mar 28, 2017
py fix missing variable in jsonrpc.py Nov 7, 2016
ssld set ssl settings in okssld Apr 24, 2017
test Rename blocking to async Jul 5, 2017
tmp a failed attempt at a pipelined client (useful for testing) Jan 17, 2009
tools fix for python 2.6 Jun 9, 2014
xmlrpcc changes for static builds Mar 28, 2017
.gitignore Adding a new library to OKWS that enables support for connecting to and Oct 14, 2014
.gitmodules Remove mongodb dependency Jul 14, 2016
AUTHORS more authors! Dec 12, 2011
CMakeHelpers.cmake restore shared library functionality Apr 4, 2017
CMakeLists.txt bump cmake version Apr 5, 2017
COPYING license updates, etc. Nov 9, 2004
ChangeLog Initial revision Sep 25, 2003
Makefile.am Remove mongodb dependency Jul 14, 2016
NEWS.md fix teh news Dec 12, 2011
README.md Update README.md Aug 20, 2016
acinclude.m4 merge 2411:2412 from devel/1.1 Dec 16, 2006
acokws.m4 setup.gnu: use SFS_ACLOCAL_PATH Jul 21, 2015
autoconf.sed svn merge -r5280:5301 svn+ssh://am.lcs.mit.edu/home/am8/max/svnrepos/… Apr 30, 2010
cfg Switched cfg over to bash to enable using printf to handle quoting pr… Oct 12, 2012
configure.in bump Aug 23, 2016
okwsconf.h.in okwsconf input file Feb 1, 2017
setup.gnu setup.gnu: use SFS_ACLOCAL_PATH Jul 21, 2015

README.md

OKWS -- The OK Web Server

OKWS is a Web server, specialized for building fast and secure Web services. It provides Web developers with a small set of tools that has proved powerful enough to build complex systems with limited effort. Despite its emphasis on security, OKWS shows performance advantages relative to popular competitors. Commercial experience with OKWS suggests that the system can reduce hardware and system management costs, while providing security guarantees absent in current systems.

As of 8 Dec 2011, OKWS is still being maintained and worked on, with 3.1 being the active development version. There are no big feature-development plans on the horizon, but we're regularly committing bugfixes and extensions.

News

1 Dec 2011

  • Move everything over to GitHub for primary project hosting!

See our News file for a fuller list of updates.

A Better Architecture

The basic idea behind OKWS is that each Web service you write (such as ''search'' or ''newsletter-subscribe'') should run as a single process. There is no reason to sprinkle the same program across hundreds of address spaces just to get client concurrency. OKWS is built with this principle in mind. A Web service in OKWS is compiled into a free-standing process, calling upon our boilerplate libraries. Other standard helper processes run on the system, to direct traffic, to launch and relaunch applications should they crash, to log HTTP transactions to disk, and to access static HTML templates.

Programming in OKWS follows the single-threaded, event-driven model. No need to worry about the synchronization snafus that creep up when using multi-threaded or multi-process Web servers.

Who Runs OKWS?

Some example sites include:

Platform Support

OKWS runs on most Unixes, and has been tested extensively on FreeBSD and Linux.

Software Tools

Though OKWS is event-based at its core, A new tool, that is entirely compatible with existing libasync-based code, is [[sfslite::tame2]], which we urge you to read more about. It's a simple C++-level rewriter that makes your event code look more like threaded coded. I.e., you can make a sequence of serial blocking functions within one function body.

Download

OKWS is freely available under a GPL v2 license.

Academic Publications

  • Building Secure High-Performance Web Services With OKWS. Maxwell Krohn, in Proceedings of the 2004 USENIX Annual Technical Conference USENIX 2004, Boston, MA, June 2004. [ ps | ps.gz | pdf ].

  • Events Can Make Sense. Max Krohn, Eddie Kohler and M. Frans Kaashoek, in Proceedings of the 2007 USENIX Annual Technical Conference USENIX 2007, Santa Clara, CA, June 2007. [ ps | ps.gz | pdf ].

Our GitHub Wiki Documentation Center

Active People

  • Mike Maxim
  • Tom Jacques
  • Ben Brittain

Patch Contributors

  • Ben Hollenstein
  • Ian Rickard (Apple Darwin Patches)
  • Michael Walfish (various patches and fixes for API problems).
  • Benjie Chen
  • OkCupid team, including Tom Quisel, Mike Maxim, Tom Jacques, Eli Gwynn, David Koh, Till Varoquaux, Sidney San Martin, Matt Miller, and Ben Brittain.