原文:CGI Made Really Easy,在翻译的过程中,我增加了一些我在学习过程中找到的更合适的资料,和自己的一些理解。不能算是严格的翻译文章,应该算是我的看这篇文章的过程的随笔吧。

CGI真的很简单

在此之前,你或许听说过很多说CGI‘晦涩难懂’的言论。如果你会写最基本的输入输出,那么你就可以写出一个CGI脚本。如果你已经是一个程序员,你只需要几分整就可以明白CGI到底是个什么东西。如果你还不是一个名程序员,对不起这篇文章不是很适合你,你可以先去学习一些编程的知识,例如脚本语言或者shell编程。但你学完了这些,再回过头来看!那么让我们开始吧!

这篇文章是写一个CGI脚本用于处理HTML提交的表单。虽然跳过了一些细节,但是可以让你在短时间内搞明白。

什么是CGI?

CGI不是一门编程语言。它是网页的表单和你写的程序之间通信的一种协议。可以用任何语言写一个CGI脚本,这些语言只要能接收输入输出信息,读取环境变量。所以,几乎所有的编程语言都能写一个CGI脚本,例如:python(把我大python放在第一个!),C,甚至是shell脚本。

CGI脚本的结构

典型的CGI脚本做了如下的事情:

读取用户提交表单的信息。

处理这些信息(也就是实现业务)。

输出,返回html响应(返回处理完的数据)。

下面主要解释,第一步和最后一步

读取用户提交的表单

当用户填写完表单,点击提交按钮的时候。CGI脚本接收用户表单的数据,这些数据都是k-v的集合的形式(也就是python中的字典)。这里有写实现的例子:python

如果你已经通过上面的例子看懂了,下面的就可以忽略了。如果你还有些不懂请看下面来那两个长的字符串。

“name1=value1&name2=value2&name3=value3”

"name1=value1;name2=value2;name3=value3"

区别就是:‘&’和‘;’这两个符号,他们的作用都是分隔参数。下面还有两件事情要做。

把所有的‘+’变成‘空格’

把所有的符号都转译成‘%xx’样式的符号,例如:‘%3d’转化成‘=’

这样做是为了统一用户的输入,使用统一的URL-encoded进行转译。

那么你从哪里得到这些转译完的字符串呢?根据提交时的时候选用的是什么HTTP方法:

POST方法,通过HTTP消息主体传递的。注意:POST方法编码类型有:application/x-www-form-urlencoded 或 multipart/form-data。

我找了一个很好的资料,很短,一路了然:POST对比GET方法

总结:CGI接收的用户数据,是通过http协议传递过来的。而选用不同的‘Method’:GET或POST对CGI的接收没有任何影响。这段是让你明白:数据是怎么通过http协议传输的。

发送响应(Response)返回给用户

首先,第一行要写:Content-type: text/html

新起一行,用于输出数据。写好HTML响应页面。这个页面是:当你的脚本处理完数据后,返回给用户的结果。

是的,你可以随意编写返回的HTML代码。HTML很简单,而且方便。

我的总结

CGI是一种通信协议,它把用户传递过来的数据转变成一个k-v的字典。这个字典中不光有用户的数据,还有HTTP协议的参数。它做的就是把数据,组织成一个固定结构形式的数据。方便任何符合CGI协议的程序都可以调用!但是CGI不是负责通信(传输数据)的,通信的话是通过socket,也就是server,例如上面例子中,是通过Apache进行通信。之后调用CGI脚本,把数据转变成符合CGI协议的数据结构,用于后面的数据处理!

这个系列文章完成后,后面还有一个实战系列。从头写一个web服务器,敬请期待!

http://www.cnblogs.com/xueweihan/p/5319893.html

python中cgi到底是什么_十分钟搞懂什么是CGI(转)相关推荐

  1. html网页和cgi程序编程,十分钟搞懂什么是CGI

    原文:CGI Made Really Easy,在翻译的过程中,我增加了一些我在学习过程中找到的更合适的资料,和自己的一些理解.不能算是严格的翻译文章,应该算是我的看这篇文章的过程的随笔吧. CGI真 ...

  2. 十分钟搞懂什么是CGI

    原文:CGI Made Really Easy,在翻译的过程中,我增加了一些我在学习过程中找到的更合适的资料,和自己的一些理解.不能算是严格的翻译文章,应该算是我的看这篇文章的过程的随笔吧. CGI真 ...

  3. python中row是什么意思_一文搞懂Python中的yield

    关注公众号「Python七号」,及时 get Python 技能. yield 可以实现生成器,可以实现协程. 什么是生成器,什么是协程,如果还不了解,可以继续往下看,概念可以不懂,只要理解它的作用和 ...

  4. python中w和wb区别_一篇搞懂python文件讀寫操作(r/r+/rb/w/w+/wb/a/a+/ab)

    關於文件操作的幾種常用方式,網上已有很多解說,內容很豐富,但也因此有些雜亂復雜.今天,我就以我個人的學習經驗寫一篇詳細又易懂的總結文章,希望大家看完之后會有所收獲. 一.各模式逐個分解 'r':只讀. ...

  5. python中w和wb区别_一篇搞懂python文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)

    关于文件操作的几种常用方式,网上已有很多解说,内容很丰富,但也因此有些杂乱复杂.今天,我就以我个人的学习经验写一篇详细又易懂的总结文章,希望大家看完之后会有所收获. 一.各模式逐个分解 'r':只读. ...

  6. python中的dict函数什么意思_3分钟搞懂Python中dict函数的含义是什么

    Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. 举个例子,假设要根据同学的名字查找对应的 ...

  7. lombok原理_十分钟搞懂Lombok使用与原理

    1 简介 Lombok是一款好用顺手的工具,就像Google Guava一样,在此予以强烈推荐,每一个Java工程师都应该使用它.Lombok是一种Java™实用工具,可用来帮助开发人员消除Java的 ...

  8. distinct sql用法_十分钟搞懂SQL数据分析

    风控说 由上海新金融风险实验室出品

  9. python数据分析建模-十分钟搞懂“Python数据分析”

    原标题:十分钟搞懂"Python数据分析" 引言:本文重点是用十分钟的时间帮读者建立Python数据分析的逻辑框架.其次,讲解"如何通过Python 函数或代码和统计学知 ...

最新文章

  1. 105_键盘事件对象
  2. android新闻app_如何利用 Python 爬虫实现给微信群发新闻早报?
  3. 服务器存储系统技术方案,服务器存储技术方案.pdf
  4. LVS+OSPF 架构
  5. 安装deepin_国产系统Deepin深度不是华为笔记本也能安装
  6. [html] 写一个布局,当页面滚动一定高时,导航始终固定在顶部,反之恢复原位
  7. docker容器连接Android设备,通过ADB连接到Docker容器中的USB Android设备
  8. 4-2-在Servlet中解决中文输出乱码问题
  9. 单片机语音库文件_20天备战智能车之NXP库使用教程逐飞科技
  10. 触发效果当容器的可见性改变时
  11. 苹果M1芯片兼容mysql吗_苹果m1芯片相当于什么水平
  12. 学子商城项目用springboot后端框架搭建(IDEA)
  13. 使用wsdl2java编写webservice客户端
  14. 计算机程序阶乘怎么写,N的阶乘的程序怎么写啊?VB啊
  15. 用户故事拆分与MFQ
  16. unity将指定UI图片置为灰色
  17. linux添加驱动模块,Linux驱动模块添加
  18. 生物信息百Jia软件(28):canu
  19. vs2015 - vs2010
  20. java基础----(三大特性:封装,继承,多态)

热门文章

  1. php上下翻页,一个很不错的PHP翻页类
  2. androidstuido_schooltest_7_storage
  3. PWN学习总结(四)—— BROP
  4. OSX 使用“终端”远程登录linux主机
  5. 4、(日期和时间类型)DTAETIME、TIMESTAMP、DATE、TIME、YEAR
  6. Ksusha and Array (vector)
  7. 1352. 虫洞【难度: 中 / 枚举 判环】
  8. 2.4.1 死锁的概念
  9. Linux之grep
  10. layout布局_Android ConstraintLayout 降低布局层次,布局优化首选