一个cs模型是由服务器和客户端组成,大多相互情况下也就是服务器端和浏览器之间的通信。通过浏览器请求服务器,然后服务器再响应浏览器。

那么如果浏览器想要请求一个python文件,例如http://127.0.0.1:8000/time.py/那么该如何实现。

首先如果浏览器只请求类似index.html的时候只要server中拥有这个index.html。并且构建一个“状态码+响应头+“\r\n”+响应体”将index.html的源代码作为响应体传入浏览器就可以实现静态页面的请求响应。

首先有这样一个想法构建一个类似请求静态页面的那样一个响应字符串。将响应体作为python程序的返回值传入浏览器会有什么样的结果。如下图

也就是说这是没办法实现和我们想象的中的那样。

引入接口这个概念,前辈们的不懈努力完成了wsgi协议。也就是只要我们可以实现wsgi接口然后通过服务器来调用这个接口就可以实现浏览器请求python文件。

python程序(ctime.py):

import time

def application(env,start_response):
  stauts = "200 ok"
  headers = [("Content-Type","text/plain")]
  start_response(stauts,headers)
  return time.ctime()

server端(伪代码):  

def start_response(self,statu_num,response_headers):
self.response_statu_num = statu_num
response_header = “”
for header in response_headers:
response_header += “%s: %s”%(header)
self.response_headers = response_header
def handla_file(self):
ctime = __import__(模块名)
response_body = ctime.application(environ,start_response)
response_data= response_statu_num+response_headers+”\r\n”+response_body
client_socket.send(bytes(response_data,”utf-8”))

为什么要使用wsgi协议的更多相关文章

  1. wsgi协议

    用来为server程序和app/framework程序做连接桥梁的,使server和app/framework各自发展,任意组合 上图是python3.4标准库里面,关于wsgiserver的实现.从 ...

  2. python - wsgi协议

    wsgi - python web server gateway interface 出现的目的是,为了在 python框架开发的时候,更具有通用性.只要符合 wsgi标准,就可以自由选择服务器(ng ...

  3. WSGI协议以及对服务器的影响

    下面的内容纯属个人学习心得,如果对于我的观点有疑问,敬请留言,我将虚心向大牛学习. WSGI的全称是WEB SERVICE GATEWAY INTERFACE.WSGI 不是服务器,不是API,也不是 ...

  4. wsgi 协议

    wsgi 协议 前言 本来没打算这么早就学习 wsgi 的,因为想要学习python 是如何处理网络请求的绕不开 wsgi,所以只好先学习一下 wsgi.先对 wsgi 有个印象,到了学习 Djang ...

  5. Python Web开发中,WSGI协议的作用和实现原理详解

    首先理解下面三个概念: WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web server ...

  6. Python Web开发中的WSGI协议简介

    在Python Web开发中,我们一般使用Flask.Django等web框架来开发应用程序,生产环境中将应用部署到Apache.Nginx等web服务器时,还需要uWSGI或者Gunicorn.一个 ...

  7. WSGI协议解析

    WSGI协议中包含两个角色:服务器方和应用程序: 服务器方:其调用应用程序,给应用程序提供(环境信息)和(回调函数), 这个回调函数是用来将应用程序设置的http header和status等信息传递 ...

  8. Python Web开发最难懂的WSGI协议,到底包含哪些内容?

    原文出处: PythonScientists 我想大部分Python开发者最先接触到的方向是WEB方向(因为总是有开发者希望马上给自己做个博客出来,例如我),既然是WEB,免不了接触到一些WEB框架, ...

  9. 根据WSGI协议自己实现mini-web框架(1)

    1. 为什么要研究WSGI 我之前在学习web开发时,往往都是根据MVT等架构直接写所谓的“视图”,使用其本身自带的http服务器,当时就一直很好奇,为什么有了HTTP协议之后,还要研究WSGI协议, ...

  10. 常见框架和WSGI协议

    三大框架对比 Django 大而全 自带的功能特别特别多 类似于航空母舰 有时候过于笨重 Flask 小而精,只保留了核心功能,其他可以自由选择 第三方的模块特别特别多,如果将flask第三方模块全部 ...

随机推荐

  1. 并查集-E - Wireless Network

    E - Wireless Network An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical t ...

  2. 谈谈近期学习Nativejs和reactNative的一些感受

    因为前段时间,对dcloud推出的Nativejs和facebook推出的reactNative都做了一点点浅薄的研究.因为研究的很浅薄,所以仅代表我个人观点,谈谈对运用这两个产品的些许感受. 说起d ...

  3. shell问题汇总

    1. sudo执行脚本找不到变量 当普通用户下,设置并export一个变量,然后利用sudo执行echo命令,能得到变量的值,但是如果把echo命令写入脚本,然后再sudo执行脚本,就找不到变量,未能 ...

  4. jdbc中SQL语句拼接java变量

    例如:String sql = "select * from user where username='" + username + "' and password =' ...

  5. Oracle客户端安装及下载地址

    一.下载 http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-win64soft-094461 ...

  6. Go_go build 和 go install

    1.作用 go build:用于测试编译包,在项目目录下生成可执行文件(有main包). go install:主要用来生成库和工具.一是编译包文件(无main包),将编译后的包文件放到 pkg 目录 ...

  7. soundtouch change pitch matlab implementation

    function output = changePitch(input, pitchInSemitones) % one octave is 12 semitones octave = pitchIn ...

  8. NAND FLASH驱动框架以及程序实现

    1.NAND FLASH的硬件连接: 实验用的NAND FLASH芯片为K9F2G08U0C,它是三星公司的存储芯片,它的大小为256M.它的接线图如下所示: 它的每个引脚的分别为LDATA0-LDA ...

  9. 第三十四篇 玩转数据结构——哈希表(HashTable)

    1.. 整型哈希函数的设计 小范围正整数直接使用 小范围负整数整体进行偏移 大整数,通常做法是"模一个素数"   2.. 浮点型哈希函数的设计 转成整型进行处理   3.. 字符串 ...

  10. AcWing 831. KMP字符串

    #include <iostream> using namespace std; , M = ; int n, m; int ne[N];//ne[i] : 以i为结尾的部分匹配的值 ch ...