Web 服务架构与技术组件概述
目录
web服务流程图
Web 服务流程图描述了客户端与服务器之间的交互。首先,用户通过浏览器发送请求到 Web 服务器。如果请求的是静态资源(如 HTML、CSS、图片),Web 服务器直接返回响应;如果是动态资源,Web 服务器将请求转发给应用程序服务器处理。应用程序服务器生成响应后,返回给 Web 服务器,最后 Web 服务器将响应发送回客户端,用户浏览器显示内容。这个过程帮助 Web 服务处理静态和动态内容的请求。
静态资源
静态资源是指在服务器上存储的、内容固定且不需要服务器端处理的文件。当客户端(如浏览器)请求这些资源时,服务器直接返回文件内容,而不进行任何计算或生成。常见的静态资源包括 HTML 文件、CSS 文件、JavaScript 文件、图片(如 JPEG、PNG、GIF)、字体文件、视频文件、音频文件、PDF 文件以及数据文件(如 JSON、XML)。这些资源通常由 Web 服务器(如 Apache、Nginx)负责处理并返回给客户端,并且可以通过浏览器缓存或 CDN 加速加载速度,从而提升用户体验和访问效率。
动态资源
动态资源是指需要服务器端处理、生成或计算的内容,每次请求时可能会发生变化。与静态资源不同,动态资源的内容通常依赖于用户请求、输入数据、数据库查询或其他条件进行生成。常见的动态资源包括通过脚本语言(如 PHP、JSP)生成的 Web 页面、API 响应(如 JSON、XML)、数据库查询结果、用户输入处理结果以及动态生成的文件(如报表、PDF 文件)。动态资源的内容在每次请求时可能不同,需要服务器进行处理,因此相比静态资源,动态资源通常会消耗更多的计算资源和时间。
web服务器、中间件、容器
对比
Web 服务器、Web 容器和 Web 中间件有着不同的功能和作用,虽然它们之间有一定的重叠。Web 服务器主要负责处理静态资源的请求,如 HTML 文件、图片和 CSS 等,并将它们返回给客户端。它不具备处理动态内容的能力,通常将动态请求转发给 Web 容器进行处理。相比之下,Web 容器专注于动态内容的处理,负责管理 Java Web 应用程序(如 Servlet 和 JSP)的生命周期,并处理这些应用程序生成的动态内容。虽然 Web 容器也能处理一些静态资源,但它的主要功能是解析和执行动态请求。
Web 中间件则是连接 Web 服务器和 Web 应用程序的桥梁,它提供了更多的高级功能,比如负载均衡、缓存管理、会话管理等。Web 中间件不仅包含 Web 容器,还通常包括其他辅助服务,支持更复杂的企业级应用。与 Web 服务器和 Web 容器的简单功能不同,Web 中间件通常集成了更多的功能,能够支持多个应用程序和服务。
简而言之,Web 服务器侧重于静态内容的处理,Web 容器专注于动态内容的生成,而 Web 中间件则负责为 Web 应用提供更加全面的支持,涵盖从请求到响应的各个方面。
工具推荐
Wappalyzer 是一个开源的工具,专门用于检测和识别网站所使用的各种 Web 技术堆栈。它能够通过分析网站的 HTML 代码、HTTP 响应头以及 JavaScript 等信息,快速识别出网站所使用的技术,包括 Web 服务器、Web 框架、内容管理系统(CMS)、JavaScript 库、分析工具等。
GitHub地址
web服务器
Web 服务器用于提供 HTTP 服务,负责接收客户端请求并返回信息。它能够处理 HTTP 协议,特别是响应针对静态页面或图片的请求。简而言之,Web 服务器可以用来托管静态网站。常见的 Web 服务器有 Apache、IIS 和 Nginx,它们通过解析客户端的请求,读取服务器上的静态资源(如 HTML、CSS、图片等),并将这些资源返回给客户端浏览器显示。
常见的 Web 服务器
Apache HTTP Server
开源、广泛使用的 Web 服务器,支持多种操作系统。以其稳定性和丰富的功能(如模块化结构)而著称,常用于托管静态网站和处理动态请求。
Nginx
高性能、轻量级的 Web 服务器,广泛应用于高流量网站。Nginx 擅长处理大量并发连接,常用于反向代理、负载均衡和静态内容提供。
IIS (Internet Information Services)
由微软开发的 Web 服务器,仅在 Windows 操作系统上运行。IIS 提供高集成性,适用于运行 .NET 应用程序和 Windows 环境中的 Web 服务。
LiteSpeed
高性能的商业 Web 服务器,提供出色的性能和安全性,适用于动态内容和 PHP 应用程序的处理,常用于高流量网站。
Caddy
现代化的 Web 服务器,特点是自动 HTTPS 配置。Caddy 采用简洁的配置和易用性,适用于开发者和小型网站。
Tomcat
主要作为 Java Servlet 和 JavaServer Pages(JSP)应用的 Web 服务器和容器,由 Apache 基金会开发。虽然它也是一个 Web 服务器,但更多用于 Java 应用的运行。
web中间件
Web 中间件是介于 Web 服务器与 Web 应用程序之间的软件组件或库,主要用于提供额外功能、处理请求,并为应用程序提供支持服务。它们通过实现身份验证、日志记录、路由控制、缓存管理、负载均衡等功能,增强了 Web 应用的性能、灵活性与可维护性。简单来说,中间件可以理解为安装在 Web 服务器上的应用程序,用于扩展和丰富 Web 服务器的功能,提升 Web 服务的整体效率和可操作性。
常见类型
身份验证中间件
用于用户身份验证与权限控制,常见于需要登录的系统
示例:JWT(JSON Web Token)中间件、OAuth 中间件
日志记录中间件
记录请求与响应的信息,便于调试和追踪系统问题
示例:morgan
(Node.js)、logging.middleware
(Django)、Log4j
(Java Web)
⚠️:Log4j
远程代码执行漏洞在这里有详解
错误处理中间件
捕获和统一处理应用运行过程中出现的错误,提升系统稳定性
示例:Express 的 error-handling middleware、Flask 的 errorhandler
请求解析中间件
将原始 HTTP 请求解析为可用的数据格式,如 JSON 或表单数据
示例:body-parser
(Express)、request.form
(Flask)、Fastjson
(Java)
⚠️:Fastjson
反序列化漏洞在这里有详解
静态资源中间件
用于处理静态文件(如图片、CSS、JS),提升响应效率
示例:express.static
、Django 的 WhiteNoise
跨域中间件(CORS)
处理浏览器的跨域资源共享问题,允许前端访问不同源的资源
示例:cors
(Express)、Django CORS Headers
缓存中间件
减少数据库访问频率,提高系统响应速度
示例:Redis 缓存中间件、Flask-Caching
路由中间件
根据请求路径分发至不同的处理函数或控制器
示例:Express 的 Router
、Flask 的 Blueprint
web容器
Web 容器是为 Web 应用程序组件(如 JSP 和 Servlet)提供运行环境的软件,它是中间件的一部分,负责解析和执行动态内容。Web 容器管理着应用程序的生命周期,并处理客户端的请求和响应。以 Tomcat 为例,它能够解析 JSP 和 Servlet,因为内部包含了专门的 JSP 容器,处理 JSP 页面的编译和执行。Web 容器的主要功能包括请求和响应管理、Servlet 生命周期管理、会话管理以及多线程支持。通过这些功能,Web 容器为动态 Web 应用程序提供了一个稳定且可扩展的运行环境。
常见的web容器
Apache Tomcat
Apache Tomcat 是一个开源的 Java Web 容器,广泛用于运行 Java Servlet 和 JavaServer Pages (JSP)。它提供了支持 Servlet 和 JSP 的运行环境,是最流行的 Java Web 容器之一。
Jetty
Jetty 是一个轻量级、快速的 Java Web 容器,特别适用于嵌入式系统。它支持 Servlet 和 JSP,并且可以轻松集成到其他 Java 应用程序中。
JBoss/WildFly
JBoss(现更名为 WildFly)是一个全功能的 Java EE 应用服务器,除了支持 Servlet 和 JSP,还支持 EJB、JPA 等 Java EE 技术。WildFly 提供了完整的企业级解决方案,适用于大规模企业应用。
GlassFish
GlassFish 是一个开源的 Java EE 容器,支持 Java EE 标准,包括 Servlet、JSP、EJB 和其他技术。它是 Oracle 官方提供的 Java EE 参考实现,广泛用于企业级应用。
WebLogic
WebLogic 是 Oracle 提供的商业级 Java EE 应用服务器,除了支持 Servlet 和 JSP,还包括对 EJB、JMS 等 Java EE 组件的全面支持。WebLogic 常用于大型企业级应用,具有高可用性和强大的管理功能。
WebSphere
IBM 的 WebSphere 是一个商业级 Java EE 应用服务器,提供企业级应用的支持,包括 Servlet、JSP、EJB 等。WebSphere 具有强大的管理控制台和事务管理功能,适用于大规模企业应用。