一、webserver、software、WSGI、CGI、Fastcgi是什么?
1.4 static webserver VS dynamic webserver
前言
这篇文章知识满满,如果大家看到这篇文章时,也正好是你想要了解的内容,请好好看。
首先,先说点题外话。
1、这篇文章纯属是我总结的一些stack overflow、python官方文档、其他英文资料形成的。我想说的是:有能力阅读英文的,直接去阅读英文资料。网上查阅中文的资料(比如优快云)绝大多数就是浪费自己的时间。没有能力阅读英文的,逼着自己去读,除非你一点英文都不懂,时间长了自然就能阅读英文了。
2、那么有人问,怎么找英文资料?有条件的直接google,没条件的上biying,biying有国际版和中文版,也可以很快的搜到优质的英文资源。百度搜索就不说了,自己尝试吧。
进入正题
为什么写这篇文章呢?这是我在看《python网络编程》第三版 这本书的时候,里面介绍到了4种基于python的架构模式,如下:
看到这张框架图时,我就有点蒙了。平时总是说wsgi、gunicorn、nginx,但是他们是怎么与python代码结合起来提供服务的呢?一查资料又引出了CGI、Fastcgi这些又是什么呢?
这篇文章就将这些问题讲透彻。当然,原英文文章讲的才是最好的,如果大家有兴趣还是去读原文。
一、webserver、software、WSGI、CGI、Fastcgi是什么?
1、什么是webserver
web服务器是使用HTTP(超文本传输协议)和其他协议来响应通过万维网发出的客户机请求的软件和硬件。web服务器的主要工作是通过存储、处理和发送网页给用户来显示网站内容。除了HTTP协议外,web服务器还支持SMTP (Simple Mail Transfer Protocol,简单邮件传输协议)和FTP (File Transfer Protocol,文件传输协议),用于电子邮件、文件传输和存储。
1.1 webserver的作用
网络服务器用于网络托管,或为网站和基于Web的应用程序托管数据。如下图所示。
通俗的可以这样理解:
Web服务器提供响应。他们坐在那里,耐心地等待,然后毫无预兆地,突然:
- 客户端进程发送请求。客户端进程可以是一个web服务器,一个机器人,一个移动应用程序,等等。他只是个“客户端”
- web服务器接收到这个请求
- 然后服务器会交给一个黑盒子运行一些程序
- web服务器向客户端返回一些信息
- Web服务器再次闲置
- 继续服务
1.2 webserver怎么工作的?
当我们在浏览器上发起一个请求,到webserver返回给我们内容,到底经历了什么呢?
比如谷歌Chrome或Firefox,需要一个托管在网络服务器上的文件,浏览器会通过HTTP请求该文件。当请求被web服务器接收时,HTTP服务器将接受请求,找到内容并通过HTTP将其发送回浏览器。
更具体地说,当浏览器从web服务器请求页面时,该过程将遵循一系列步骤。首先,用户将在网页浏览器的地址栏中指定一个URL。网络浏览器将获得域名的IP地址——要么通过DNS(域名系统)翻译URL,要么在其缓存中搜索。这将把浏览器带到一个web服务器。然后浏览器将通过HTTP请求从web服务器请求特定的文件。web服务器将响应,再次通过HTTP向浏览器发送所请求的页面。如果请求的页面不存在或出现错误,web服务器将响应一个错误消息。浏览器将能够显示该网页。
由于websever可以托管程序,经常被用于一下用途:
- 收发电子邮件;
- 下载文件传输协议(FTP)文件请求;和
- 建立和发布网页
1.3 有哪些产品是webserver
webserver其实就是一个软件(software),这个软件也是用我们平时用的语言所写的,最出名的就是nginx、Apache HTTP Server。以下为常见的web server。
- Apache HTTP server:由Apache软件基金会开发,它是一个免费和开源的web服务器,适用于Windows, Mac OS X, Unix, Linux, Solaris和其他操作系统;它需要Apache许可。
- Microsoft Internet Information Services (IIS):由微软为微软平台开发;它不是开源的,但是被广泛使用。
- Nginx:一个流行的开放源码web服务器,因为它的资源利用率和可伸缩性很低。由于其事件驱动的体系结构,它可以处理许多并发会话。Nginx也可以用作代理服务器和负载均衡器。
- Lighttpd:FreeBSD操作系统自带的免费网络服务器。它被认为是快速和安全的,同时消耗更少的CPU功率。
- Sun Java System Web Server:Sun Microsystems提供的免费网络服务器,可以在Windows、Linux和Unix上运行。它有很好的设备来处理大中型网站。
web server它会等待request返回响应,但是注意:
Web服务器就是:服务器。他们对内容一无所知,他们更不会准备内容,对用户一无所知,实际上除了等待请求的到来和可靠地回复之外什么都不知道。
你选择的网络服务器应该反映你的交付偏好(比如你是觉得nginx好用,而不用apache),而不是你的软件(也就是你基于代码框架写的 web 程序)。你的we