WEB服务动静结合
基本介绍
1)web服务仅能处理静态请求,如果处理动态请求则需要对应的动态资源服务软件,即:应用程序服务软件
2)常见的应用服务软件有:php、java、python等
3)问题:web服务如何与外部应用程序通信?通常有以下几种方案:
- cgi协议:基本没人使用,不安全以及性能极其低下
- 模块方式:如:apache内置php模块,用以处理php动态请求
- fastcgi协议:如:nginx的php-fpm
4)cgi、内置模块、fastcgi这三种方式,性能最好的要属fastcgi,但是需要额外的进程
5)注意:静态资源和动态资源都是以数据流(本质都是数据流)形式返回用户的:
- 静态资源:web服务将页面文件以【数据流】形式封装到响应报文,然后返回用户
- 动态资源:web服务将执行结果(注意:此时是结果非文件)以【数据流】形式封装到响应报文,然后返回用户
cgi协议介绍
1)cgi(common gateway interface):通用网关接口,早期web服务与外部应用程序(cgi程序)通信的协议/接口标准,几乎可以在任何操作系统上实现(跨平台性好)
2)cgi协议允许web服务执行外部程序,并将外部应用程序执行的结果返回web服务,并最终返回用户
3)工作原理:用户请求web资源,静态请求交由web服务自行处理;如果是动态请求,web服务会【fork()】一个子进程(cgi进程/应用程序服务进程),然后将动态请求交由子进程处理,处理完后的数据返回web服务,最终由web服务封装为http响应报文返回用户,然后结束这个子进程
4)每一次的动态请求都会【fork()】一个子进程,周而复始的进行。所以,通过cgi协议处理动态请求,有多少连接请求就会创建多少cgi子进程,子进程反复加载是cgi方式性能低下的主要原因,当用户请求数量非常多时,会大量挤占系统的资源如内存、cpu时间等,造成效能低下
web内置模块介绍
1)后来出现了一种更高级的方式,即:web服务可以内置perl解释器或php解释器,也就是将这些解释器做成模块的方式,web服务会在启动时就会加载这些模块
2)工作原理:用户请求web资源,静态请求交由web服务处理;如果是动态请求,web服务会通过内置模块来进行响应、解析、处理,省得重新fork一个进程,效率提高了。动静请求都是由web服务自身处理的
fastcgi协议介绍
1)web服务、应用程序均为守护进程,二者基于fastcgi协议通过套接字通信
2)fastcgi协议采用的是c/s架构,分为客户端(web服务)和服务端(应用程序服务)
3)大多数web服务都支持fastcgi协议,包括apache、nginx、lighttpd等。同时,fastcgi协议也被许多应用程序服务所支持,如:当前比较流行的动态语言php
3)工作原理:用户请求web资源,静态请求交由web服务处理;如果是动态请求,web服务会通过【fastcgi协议】将请求发给应用程序服务进行处理,应用程序会将处理完的结果返回web服务,最终由web服务封装为http响应报文返回用户。此时,web服务和应用程序服务均为守护进程(可以启动多个fastcgi的守护进程)
4)与cgi协议的区别:
相关链接
1)
2)
3)
4)
5)