Well, there's a lot of overlap. Most real products have some features of both, so it's no wonder people get confused. A minimum web server, with no extra features, is a very simple thing indeed. It listens on a port (port 80 by default) and for each request of the form "GET filename HTTP/1.0" returns the file "filename" to the client. Web servers this simple do exist, but usually they are only tests or example code, or delivered as part of an embedded system. Real "web servers", as used for serving web sites across the world, contain tons of extra features - the ability to run CGI scripts, process POST requests, set cookies, authenticate users, protect directories, show indexes, plug-in modules and so on. A web server has a very simple definition, an application server is quite the opposite. The exact meaning of the term varies from one person to another. In practice, "application server" seems to be used for any server which can be extended to include logic specific to an application. So Apache and a bundle of CGI scripts could be considered as an "application server". These days, though, the term "application server" is usually reserved for servers which can be programmed internally (rather than externally with CGI scripts). This includes any server which runs JavaServlets and/or Enterprise Java Beans and/or similar systems for other languages or platforms. Zope, for example is an application server programmed and extended using the Python language. I hope this has helped.