❖ WSGI理解

理解CGI

CGI (Common Gateway Interface),常听说但不太明白。实际上一句话就可以概括:

"CGI offers a standard protocol for web servers to execute programs that execute like console applications (also called command-line interface programs) running on a server that generates web pages dynamically. " -Wiki

也就是说,CGI的作用就是把HTTP Server接收到的请求,转换为本机上其它应用程序(如Shell命令行、Python、Java等)可以理解的命令。也就是说,让网页的互动像直接与本地程序互动一样简单。

简而言之:
CGI就是一个语言转换器。将网络语言转换为具体的各种程序语言。

基于这个特性,CGI只是一个泛指。而针对不同的语言、程序,自然也就有不同的CGI来转换。
常见的CGI如下:

  • 适于Python:
    • WSGI
    • mod_python
  • 多语言适用:
    • FastCGI (Python, node.js, PHP, Ruby, Java, Go, C++, Lua ...)

理解基于Python语言的WSGI

WSGI (Web Server Gateway Interface),是一种Python官方(PEP 333)制定的一个网络交互规范:客户端 -> HTTP服务器 -> WSGI -> Application(Wordpress/Flask/Django)。反过来发送给客户端也是一样。

每个语言对于网络服务器的处理可能不一样:如同Ruby的Rack。Python使用wsgi,即一种通用的接口标准或者接口协议,实现了python web程序与服务器之间交互的通用性。

wsgi是将HTTP Server的参数进行Python化,封装为request对象传递给apllication命名的func对象并接受其传出的response参数,由于其处理了参数封装和结果解析,才有python世界web框架的泛滥,在python下,写web框架就像喝水一样简单。(参考:https://www.zhihu.com/question/19998865/answer/27033737

有了这个东西,Flask或者django等等的python web开发框架,就可以轻松地部署在不同的web server上了,不需要做任何特殊配置(也需要一些小小的配置调整)

"如全称代表的那样,WSGI不是服务器,不是API,不是Python模块,更不是什么框架,而是一种服务器和客户端交互的接口规范."

在客户端向服务器发出请求时,HTTP Server服务器接收请求,进行socket、tcp、udp等基层操作,全部验证通过后,再把请求内容发给WSGI。然后WSGI作为一个Python关口,把请求数据全部转换为Python程序能理解的信息,再把这些信息发送给具体的某个app应用,比如Flask,或Django。这时候,Flask等框架接收到的,就是一般的Python化的数据了,而不是网络规范的数据。也就是说,Flask等框架,完全无需考虑Protocols网络协议等东西,专心做好自己的网站就好了。

image

WSGI 组件

在WSGI规范下,web组件被分成三类:client, server, and middleware.

猜你喜欢

转载自blog.csdn.net/weixin_34390996/article/details/87615091
今日推荐