Apache HTTP Server Project、Nginx都是开源的HTTP服务器软件。
HTTP服务器本质上也是一种应用程序——它通常运行在服务器之上,绑定服务器的IP地址并监听某一个TCP端口来接收并处理HTTP请求,这样客户端(如Firefox,Chrome这样的浏览器)就能通过HTTP协议获取服务器上的网页(HTML格式)、文档(PDF格式)、音频(MP4格式)、视频(MOV格式)等资源。
下图描述的就是这一过程:
不仅仅是Apache HTTP Server和Nginx,编程语言比如 Java的类库中也实现了简单的HTTP服务器方便开发者使用:
使用这些类库能够非常容易的运行一个HTTP服务器,它们都能够通过绑定IP地址并监听tcp端口来提供HTTP服务。
Apache Tomcat与Apache HTTP Server相比,Tomcat能够动态生成资源并返回到客户端。Apache HTTP Server和Nginx都能够将某一文本文件内容通过HTTP协议返回到客户端,但该文本文件的内容固定——即无论何时、任何人访问它得到的内容都完全相同,这就是静态资源。
动态资源则在不同时间、客户端访问得到的内容不同,例如:
Apache HTTP Server和Nginx本身不支持生成动态页面,但它们可以通过其他模块来支持(例如通过Shell、PHP、Python脚本程序来动态生成内容)。若想要使用Java程序动态生成资源内容,使用这一类HTTP服务器很难做到。Java Servlet以及衍生的JSP可以让Java程序也具有处理HTTP请求并且返回内容(由程序动态控制)的能力,Tomcat正是支持运行Servlet/JSP应用程序的容器(Container):
Tomcat运行在JVM之上,和HTTP服务器一样,绑定IP地址并监听TCP端口,同时还包含如下职责:
虽然Tomcat也可以认为是HTTP服务器,但通常它仍然会和Nginx配合在一起使用: