CGI, FastCGI, WSGI, uWSGI 都是啥???

2023-11-04 00:32
文章标签 uwsgi fastcgi cgi wsgi

本文主要是介绍CGI, FastCGI, WSGI, uWSGI 都是啥???,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

相信大家在学习web开发的过程中一定会遇到 cgi、 wsgi 之类的名词,然后看着他们十分相似的解释估计还没开始写代码就晕了,这都什么鬼?

反正我最开始学习那会儿就不知道这些都是个啥,我也推荐学习过程不要纠结于某个词语的解释。当你拥有一定开发经验,对 web 开发有一个更系统的认识后回头来看之前的疑惑也许就迎刃而解了,今天我就谈谈当初对这些看着十分相似的名词的浅见:

 

CGI(Common Gateway Inteface):

字面意思就是通用网关接口,我觉得之所以看字面意思跟没看一样是因为这个称呼本身很学术,所以对于通俗的理解就存在一定困难,这里我觉得直接把 Gateway 当作 server 理解就好。它是外部应用程序与Web服务器之间的接口标准

意思就是它用来规定一个程序该如何与web服务器程序之间通信从而可以让这个程序跑在web服务器上。当然,CGI 只是一个很基本的协议,在现代常见的服务器结构中基本已经没有了它的身影,更多的则是它的扩展和更新。

假设我们使用 python 的 Django 框架写了一个网站,现在要将它挂在网上运行,我们一般需要:

  • nginx 做为代理服务器:负责静态资源发送(js、css、图片等)、动态请求转发以及结果的回复;
  • uWSGI 做为后端服务器:负责接收 nginx 请求转发并处理后发给 Django 应用及接收 Django 应用返回信息转发给 nginx;
  • Django 应用收到请求后处450理数据并渲染相应的返回页面给 uWSGI 服务器。
  • 接下来的协议及接口就是应用在以上三者之间:

 

FastCGI:

CGI的一个扩展, 提升了性能,废除了 CGI fork-and-execute (来一个请求 fork 一个新进程处理,处理完再把进程 kill 掉)的工作方式,转而使用一种长生存期的方法,减少了进程消耗,提升了性能。

这里 FastCGI 就应用于前端 server(nginx)与后端 server(uWSGI)的通信中,制定规范等等,让前后端服务器可以顺利理解双方都在说什么(当然 uWSGI 本身并不用 FastCGI, 它有另外的协议)

 

WSGI(Python Web Server GateWay Interface):

它是用在 Python web 框架编写的应用程序与后端服务器之间的规范(本例就是 Django 和 uWSGI 之间),让你写的应用程序可以与后端服务器顺利通信。在 WSGI 出现之前你不得不专门为某个后端服务器而写特定的 API,并且无法更换后端服务器,而 WSGI 就是一种统一规范, 所有使用 WSGI 的服务器都可以运行使用 WSGI 规范的 web 框架,反之亦然。

 

uWSGI:

一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。用于接收前端服务器转发的动态请求并处理后发给 web 应用程序。

uwsgi: 是uWSGI服务器实现的独有的协议, 网上没有明确的说明这个协议是用在哪里的,我个人认为它是用于前端服务器与 uwsgi 的通信规范,相当于 FastCGI的作用。当然这只是个人见解,我在知乎进行了相关提问,欢迎共同讨论。

 

对于 CGI ,我认为在 CGI 制定的时候也许没有考虑到现代的架构,所以他只是一个通用的规范,而后来的 WSGI 也好 Fastcgi 也好等等这些都是在 CGI 的基础上扩展并应用于现代Web Server 不同地方的通信规范。

做为一个 Python Web 开发者,相信以上流程我们最关注的莫过于 WSGI 这里所做的事,了解熟悉这里的规范不仅可以让我们更快速的开发 Web 应用同时我们也可以自己实现一个后端 Server 。

这篇关于CGI, FastCGI, WSGI, uWSGI 都是啥???的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/341968

相关文章

安装uwsgi(转)

获取uwsgi;目前最新版本是2.0.11.1 wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz 编译安装;我是用python 2.7.6 编译的 tar zxvf uwsgi-latest.tar.gz cd uwsgi-2.0.11.1/ python uwsgiconfig.py --build python

小白服务器编程指北(1)——从零搭建Django服务器(Centos7+Nginx+uWSGI)

目录 前言CentOS配置网络连接配置YUM 源ifconfig: command not found安装vim安装gcc/g++ Python配置Python3 update安装Python3 开发套件 PostgreSQL数据库安装psycopg2 Redis数据库安装Django 及其他Python库配置Postgresql使用Postgresql roleCreate new Pos

Cgi、FastCgi与PHP-cgi、PHP-fpm详解

CGI:是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者(是一种协议 : 通用网关协议)。 web server:(比如说nginx)只是内容的分发者。 比如,如果请求/index.html,那么web server会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态数据。好了,如果现在请求的是/index.php,根据配置文件,nginx知道这个

【C/C++】web服务器项目开发总结【请求 | 响应 | CGI】

博客主页:花果山~程序猿-CSDN博客 文章分栏:Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长! 目录 一,背景 二,目标 三,基本描述 四,技术特点 网络基本认识补充 web服务器(http服务器工作原理) http 1.0与http 1.1 区分URI & URL & URN 五,

一个支持 cgi 的简易 http 服务器

转自:http://blog.csdn.net/u013904227/article/details/52331438 代码 github 链接:https://github.com/SummerInSun/big-http 1. boa 移植以及使用测试 1. 下载 boa-0.94.14rc21.tar.bz2 http://www.boa.org/news.html 2

ssrf攻击本地fastcgi漏洞复现

目录 环境:Ubuntu+Nginx+php 代码 开始测试 查看 环境搭建 环境:Ubuntu+Nginx+php 代码 <?phphighlight_file(__FILE__);$url = $_GET['url'];$curl = curl_init($url);curl_setopt($ch,CURLOPT_URL,$url);curl_setopt($curl,

CGIC简明教程目录(CGI篇)

CGIC简明教程目录(CGI篇) CGIC简明教程目录 本系列的目的是演示如何使用C语言的CGI库“CGIC”完成Web开发的各种要求。       基础知识     * 1: 使用CGIC的基本思路     * 2: 获取Get请求字符串     * 3: 反转义     * 4: 获取请求中的参数值      进阶训练     * 用CGIC实现文件上传 CGIC简明教程1:使用C

ctfhub-web-SSRF(FastCGI协议-DNS重绑定 Bypass)

less-6  FastCGI协议 步骤一:开启环境,查看提示 步骤二:对一句话木马进行base64编码:<?php @eval($_POST[cmd]);?> echo "PD9waHAgQGV2YWwoJF9QT1NUW2NtZF0pOz8+" | base64 -d > 1.php 步骤三:利用kali,使用Gopherus工具生成payload: python2 '/ho

centos6.5下配置django+uwsgi+nginx

安装django 可利用如下命令行安装 pip install django 1 默认会安装到python目录下的bin文件夹下,如下图所示  如果已经设置了python3.5环境变量可直接使用django-admin来创建项目如果没有可利用如下命令来创建软连接使django-admin任何目录下均可使用,注意:本人的python3.5目录为/usr/local/python3.5/,请

【Linux网络】CGI技术

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 一、CGI技术概述二、CGI技术的工作原理三、CGI技术的特点四、CGI技术的局限性和发展趋势五、CGI技术的安全性措施 一、CGI技术概述 CGI(Common Gateway Interface)是一种用于Web服务器与外部应用程序(CGI程序)之间进行交互的标准协议。它允许Web服