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)https://www.zhihu.com/question/30672017
2)https://blog.csdn.net/linuxheik/article/details/51865292
3)https://www.awaimai.com/371.html
4)https://www.biaodianfu.com/cgi-fastcgi-wsgi.html
5)http://www.ttlsa.com/web/fastcgi-cgi-diff/
WEB服务动静结合的更多相关文章
- HAProxy+apache实现web服务动静分离
HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支 ...
- CentOS 6.5环境下使用HAProxy+apache实现web服务的动静分离
HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持 ...
- 上传文件服务与web服务分离
业务场景:1. 后端服务为java web应用,使用tomcat容器,多实例集群化部署.2. 前端使用nginx作为后端应用的反向代理. 业务需求:现在需要在java web应用端上传文件,同时还要能 ...
- 关于如何提高Web服务端并发效率的异步编程技术
最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...
- 基于IIS构建Pyathon Web服务
本文简单叙述了在Windows下,如何利用IIS构建Python Web服务. 其主要步骤如下: 1.在IIS下构建一个站点,如图: 2.配置Python文件的处理程序,如图: 3.最后,在对应站点根 ...
- Web服务
Web服务的相关信息 Apache服务器是web服务的重要应用 在这也是讲的apache 这里需要安装一个http服务软件才行! Apache的根文档在/var/www/html 主配置文件 /e ...
- Python flask 基于 Flask 提供 RESTful Web 服务
转载自 http://python.jobbole.com/87118/ 什么是 REST REST 全称是 Representational State Transfer,翻译成中文是『表现层状态转 ...
- 使用 ServiceStack 构建跨平台 Web 服务
本文主要来自MSDN杂志<Building Cross-Platform Web Services with ServiceStack>,Windows Communication Fou ...
- webServices与Web服务
本篇的内容在MSND中标注已是一项旧技术,而取而代之的是WCF, 那么我也放弃吧!但是这个属于Web服务的范畴,而WCF本质上也是一个Web服务来的,所以对于基础的东西还是不变的.那么这次就着重看看这 ...
随机推荐
- cf 118B
B. Present from Lena time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- A Network in a Laptop: Rapid Prototyping for Software-Defined Networks
文章名称:A Network in a Laptop: Rapid Prototyping for Software-Defined Networks 文章来源:Lantz B , Heller B ...
- Gradle教程-w3cschool
Gradle,这是一个基于 JVM 的富有突破性构建工具.Gradle 正迅速成为许多开源项目和前沿企业构建系统的选择,同时也在挑战遗留的自动化构建项目.本教程主要讲解了如何使用 Gradle 构建系 ...
- Mybatis, 实现一对多
我这里是拿商品做为例子 不多说直接上代码 Mapper.xml <?xml version="1.0" encoding="UTF-8"?> < ...
- jetty 启动时出现的问题
启动时出现: 1. NoClassDefFoundError: javax/xml/registry/infomodel/User 是需要导入jaxr-api包, <dependency> ...
- MySQL高可用架构之MySQL5.7.19 PXC
CentOS7.3下Percona-XtraDB-Cluster-5.7.19集群部署PXC三节点安装:node1:10.10.10.11 node2:10.10.10.12node3:10.10.1 ...
- Redis hash 是一个 string 类型的 field 和 value 的映射表.它的添加、删除操作都是 O(1)(平均)。
2.3 hashes 类型及操作 Redis hash 是一个 string 类型的 field 和 value 的映射表.它的添加.删除操作都是 O(1)(平均).hash 特别适合用于存储对象.相 ...
- ubuntu 安装java1.8
1.进入官网下载页面http://www.oracle.com/technetwork/java/javase/downloads/index.html 2.选择需要的版本,进入下载页面 下载 jdk ...
- Golang 调用 aws-sdk 操作 S3对象存储
Golang 调用 aws-sdk 操作 S3对象存储 前言 因为业务问题,要写一个S3对象存储管理代码,由于一直写Go,所以这次采用了Go,Go嘛,快,自带多线程,这种好处就不用多说了吧. 基础的功 ...
- Jmeter+ SeureCRT + Pinpoint
1.环境配置 [相关操作] 下载jdk http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.h ...