Web服务器: Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档。Web 服务器的主要功能是存储,处理和传递网页给客户。客户端和服务器之间的通信使用超文本传输协议(HTTP)进行。
HTTP 协议基于 TCP 协议上,是一个应用层协议,用于用户代理和 Web 服务器进行通信。
Web 服务器通常采用一问一答的方式进行工作: 1.在用户代理上用户发起资源请求,请求内容包括但不限于:指定资源的唯一标识 URI,指明动作类型(GET/POST/DELETE/PUT…)
2.用户代理解析用户输入 URI 并从中获取目标域名,交由 DNS 服务器解析。如果 URI 中指定某 IP 地址,就无需这步。
3.如果与服务器的会话还没建立,此时先建立 TCP 连接,并完成 HTTP 协商(确定双方均可接受的处理方式,包括协议版本,是否加密,内容格式等等)。
4.用户代理把请求内容封装成 HTTP 数据包向服务器发送。
5.服务器接收到资源请求并以之前协商好的方式解包并处理。
6.服务器请求的资源封装成 HTTP 数据包并返回给用户代理。 主流的Web服务器: pache、IIS 、Nginx 、Tomcat,Jetty,WebSphere,WebLogic,Kerstrel 等等。
Web容器: web容器是一种服务程序,在服务器一个端口就有一个提供相应服务的程序,而这个程序就是处理从客户端发出的请求,如JAVA中的Tomcat容器,ASP的IIS或PWS都是这样的容器。一个服务器可以有多个容器。
Web容器特点: 分配线程池资源,容器为每个请求分配一个线程进行处理,通常采取线程池的方式高效率由 CPU 算资源。 封装 Request 上下文,一个请求对应一个 Request 上下文,它主要封装了用户请求的主要构成。
URL,HTTP 请求头,以及基于请求头构建的 Session,Cookie 等对象,方便编程使用。
封装 Response 上下文,一个请求对应一个 Response 上下文,主要用于向用户代理返回资源。可以在其中写入输出流,或者重定向,或者返回错误码等等。
URL 路由,在容器里,运行开发人员设置不同的路由匹配规则,比如让 .HTM 返回 .HTML,也可以自定义 .xyz 返回 .HTML 资源。更加灵活的配置 可以参考 Java MVC 或者 ASP.NET MVC 的配置方案。
动态资源处理模块,通常在这里具体的容器和开发语言都有自己的高效开发模型,比如 Java 的 Servlet,ASP.NET 的 Web Form,MVC。 回收资源,这里会回收刚才的线程资源,为了线程复用,除非服务器空闲一般会将线程返回线程池。
可以看出,Web 容器本身具备了做为一个 Web 服务器的功能,事实上通常实现 Web 容器功能的服务器就是一个 Web 服务器。比如 Tomcat,IIS,Jetty。
主流的Web容器: Tomcat,IIS,Jetty 。还有比较多使用 WebSphere,WebLogic 等等。
反向代理: 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
与前向代理不同,前向代理作为一个媒介将互联网上获取的资源返回给相关联的客户端,而反向代理是在服务器端(如 Web 服务器)作为代理使用,而不是客户端。 反向代理的主要作用: 1.加密和SSL加速 2.负载均衡 3.缓存静态内容 4.压缩 5.减速上传 6.安全防火墙 7.外网发布 8.突破互联网封锁 9.解决跨域问题 10. 总结: Web 服务器是提供 WWW 服务的程序。 Web 容器是提供给开发者的框架。 反向代理服务器在企业级应用中表现突出,具有解决集中式安全,负载均衡等等优点。