




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
CGI一.根本原理CGI:通用网关接口〔CommonGatewayInterface〕Web效劳器主机供给信息效劳的标准接口。通过CGI接口,Web效劳器就能够猎取客户端提交的信息,转交给效劳器CGI程序进展处理,最终返回结果给客户端。CGIhtml页面,就是在用户端扫瞄器上显示的页Cgi程序。它们之间的通讯方式如以下图:效劳器效劳器客户端通信标准输入输出〔环境变量〕CGI程序通信,我们只需要知道扫瞄器恳求执行效劳器上哪个CGI程序就可以了,其他不必深究细节,由于这些过程不需要程序员去操作。CGI程序之间的通讯才是我们关注的。一般状况下,效劳器和CGI程序之间是通过标准输入输出来进展数据传递的,而这个过程需要环境变量的协作方可实现。URL指向一个应用程序效劳器为应用程序执行做预备应用程序执行,读取标准输入和有关环境变量应用程序进展标准输出Windowsprofile文件进展数据传输〔ini文件〕,但在这里不做争论。CGICGI程序只能处理一个用户恳求,所以在激CGI程序进程时也创立了属于该进程的环境变量。二.环境变量CGI程序来说,它继承了系统的环境变量。CGICGI程序启动时初始化,在完毕时销毁。当一个CGI程序不是被CGI户端、CGI传输过程等工程。与恳求相关的环境变量 REQUEST_METHODQUERY_STRINGCONTENT_LENGTHCONTENT_TYPECONTENT_FILEPATH_INFOPATH_TRANSLATEDSCRIPT_NAME与效劳器相关的环境变量 GATEWAY_INTERFACESERVER_NAMESERVER_PORTSERVER_SOFTWARE与客户端相关的环境变量 REMOTE_ADDRREMOTE_HOSTACCEPTACCEPT_ENCODINGACCEPT_LANGUAGEAUTORIZATIONFORMIF_MODIFIED_SINGCEPRAGMAREFFERERUSER_AGENT
CGI程序之间的信息传输方式GET时所传输的信息STDIO中的有效信息长度指示所传来的信息的MIME类型Windowsd/WinCGI传送数据的文件名路径信息CGI程序的完整路径名所CGI程序的名字效劳CGI版本IP或名字主机的端口号CGI效劳器的名称和版本号客户机的主机名IP地址例出能被次恳求承受的应答方式列出客户机支持的编码方式ISO代码说明被证明白的用户EMAIL地址get方式恳求并且只有当文档比指定日期更早时才返回数据设定将来要用到的效劳器代理指出连接到当前文档的文档的URL客户端扫瞄器的信息CONTENT_TYPE:application/x-www-form-urlencodedHTML表单,URL编码。ACCEPTMIME类型清单,内容如:image/gif,image/jpeg”REQUEST_METHOD:它的值一般包括两种:POSTGETCGI程序时,最终还要考虑其他的状况。POST方法POSTCGICONTENT_LENGTHPOST方式发送数据有一个相应的MIME类型〔通用Internet邮件扩充效劳:Multi-purposeInternetMailExtensions〕。目前,MIME类型一般是:application/x-wwww-form-urlencoded,该类型表HTMLCONTENT_TYPE中,CGI程序应当检查该变量的值。GET方法在该方法下,CGI程序无法直接从效劳器的标准输入中猎取数据,由于效劳器把它从标QUERY_STRING〔PATH_INFO〕。GETPOSTGETHTML表单数据的时候,客户机将把这些数ACTIONURLURLCGI程序的名字分开:“://mycorp/hello.html“://mycorp/hello.html?name=hgq$id=1,QUERY_STRINGname=hgq&id=1GETURL的末尾有URL的动身点:URL作为一种标准用语,一般是用作网络资源的唯肯定位标示。环境变量是一个保存用户信息的内存区。当客户端的用户通过扫瞄器发出CGI恳求时,CGICGI程序的同时,效劳器把该用户的信息保存到环境变量里。接下来,CGICGI程序进程相request_methodPOSTlen,然后到该进程相应的标准输入取出len长的数据。假设是GETQUERY_STRING里。POSTGET的区分以GET方式接收的数据是有长度限制,而用POST方式接收的数据是没有长度限制的。并且,以GET方式发送数据,可以通过URL的形式来发送,但POST方式发送的数据必需要通过Form才到发送。三.CGI程序实现步骤从效劳器猎取数据C语言实现代码:#include#include<stdio.h>#include<stdlib.h>#include<string.h>intget_inputs{intlength;char*method;char*inputstring;method=getenv(“REQUEST_METHOD”);//将返回结果赐予指针if(method==NULL)return1; //找不到环境变量REQUEST_METHODif(!strcmp(method,”POST”)) //POST方法{length=atoi(getenv(“CONTENT_LENGTH”));//结果是字符,需要转换if(length!=0){inputstring=malloc(sizeof(char)*length+1)//stdin是不带缓存的。fread(inputstring,sizeof(char),length,stdin);//从标准输入读取肯定数据}}elseif(!strcmp(method,“GET”)){Inputstring=getenv(“QUERY_STRING”);length=strlen(inputstring);}if(length==0)return0;}$method=$method=$ENV{„REQUEST_METHOD‟};if($methodeq„POST‟){Read(STDIN,$input,$ENV{„CONTENT_LENGTH‟});}if($methodeq„GET‟||$methodeq„HEAD‟){$input=$ENV{„QUERY_STRING‟};}if($inputeq“”){&print_form;exit;}#!/usr/local/bin/pythonimport#!/usr/local/bin/pythonimportcgidefmain:form=cgi.FieldStoragePython代码实现更简洁,cgi.FieldStoragekey就是变量名,key对应的值就是变量名的值,更本无需用户再去进展数据解码!猎取环境变量的时候,假设先推断“REQUEST_METHOD”是否存在,程序会更强健,否则在某些状况下可能会造成程序崩溃。由于假设CGI程序不是由效劳器调用的,那么环CGI相关的环境变量〔REQUEST_METHOD,REMOTE_ADDR等〕添加进来,也就是说“getenv(“REQUEST_METHOD”)NULL!URL编码不管是POST还是GET方式,客户端扫瞄器发送给效劳器的数据都不是原始的用户数URLCGIContent_typeContent_type=application/x-www-form-urlencodeURLHTML表单变量数据。编码的根本规章是:变量之间用“&”分开;=”连接;空格用“+”代替;保存的掌握字符则用“%16ASCII码代替;%16ASCII码代替;空格是非法字符;任意不行打印的ASCII掌握字符均为非法字符。例如,假设3HTMLfilename、e-mailcomments,它们的值对应分别为hello、“mailto:mike@hotmail“mike@hotmailI‟llbethereforyouURL编码后应为:filename=hello&e-mail=hello@hotmail&comments=I%27ll+be+there+for+youfilename=hello&e-mail=hello@hotmail&comments=I%27ll+be+there+for+you所以,CGI在解码方面,PYTHON代码实现是最抱负的,cgi.FieldStorage函数在猎取数据的同时Perl库:cgi-lib.plPerl库:cgi-lib.plReadParseURL解码很简洁:require„cgi-lib.pl‟;&ReadParse(*input);CGI数据输出CGICGI格式化输出。CGI程序中的标准输出stdout是经过重定义了的,它并没有在效劳器上产生任何的CPerlPython实现无关。HTML页面的生成。比方,Cprintf是向该进程的标准输动身送数据,PerlPythonprint向该进程的标准输动身送数据。〔1〕CGI标题CGI的格式输出内容必需组织成标题/内容的形式。CGICGI程序可以使用标题。标题必需占据第一行输出!而且必需随后带有一个空行。标题 描述Content_type (内容类型)Location (地址)Status (状态)
MIME类型设定输出为另外一个文档〔URL〕状态码MIME:向标准输动身送网页内容时要遵守MIME格式规章:任意输出前面必需有一个用于定义MIME类型的输出内容〔Content-type〕行,而且随〔同样使用于其他标题〕例如例如Perl和Python:print“Content-type:text/html\n\n”;print“<body>welcome<br>”print“</body>”//HTML格式的数据printf(“Content-type:text/html\n\nprintf(“Content-type:text/html\n\n”);printf(“Welcome\n”);MIME类型以类型/子类型〔type/subtype〕的形式表示。type表示一下几种典型文件格式的一种:Text、Audio、Video、Image、Application、Mutipart、MessageSubtype则用来描述具体所用的数据格式。Application/mswordApplication/octet-streamApplication/zipApplication/pdf。。。。。。。。。。。。。
Word文件一种通用的二进制文件格式Zip压缩文件Pdf文件。。。。。。。。。。。。。Location:LocationCGI可以使当前用户转而访问同一效劳器上的另外一个程序,URL,但效劳器对他们的处理方式不一样。Location的格式为:Location:Filename/URL,例如:printprint“Location:/test.html\n\n”;test.html的效果是一样的。printprint““://chinaunix/\\n\\n“Location:://chinaunix/\n\n”由于该URL并不指向当前效劳器,用户扫瞄器并不会直接链接到指定的URL,而是给用户输出提示信息。状态码:表示了恳求的结果状态,是CGI程序通过效劳器用来通知用户其恳求是否成功执行的信息码,本文不做争论。四.CGI中的信号量和文件锁CGI程序时公用的,而WEB效劳器都支持多进程运行,因此可能会发生同时有多CGI2CGI程序,效劳2CGIABA首先翻开了某个文件,然后由于某种缘由被挂起〔一般是由于操作系统的进程调度〕;而就在进程A被挂起的这段时间内,进程B完成了对文件的整个操作流程:翻开,写入,关闭;进程A再继续往下执行,但进程A所操作的文件照旧是原来文件的就版本,此时进程A的操作结果将B的操作结果。为了防止这种状况发生,需要用到文件锁或者信号量。钥匙文件?HTMLCGICGI程序如何区分它们呢?INPUTCGI必需经过一系列解码后INPUT的变量和其值。CGIPerlCGI程序后缀为:.pl;PythonCGI程序后缀为:.pyC编写CGI程序后缀为:.cgiwin下编译出来的是.exe,最好将它重命名为.cgi。这些都效劳能够识别并调用它们。appchedd.conf如下:AddHandlercgi-scriptAddHandlercgi-script.cgi.py.plCGIC语言库——cgihtmlCgihtmlCCGI库。它供给的功能函数如下:Read_cgi_inputHTML表单输入,返回一个指向某构造体的指针Cgi_val:猎取每个表单变量的值Html_header:HTML标题栏Html_begin:HTML文档的开头局部H1:输出一行字符,字体为H1Html_end:HTML文档的结尾局部。#include“cgi-lib.h”#include“html-lib.h”#include“string-lib.h”六
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 续签劳动合同的要素
- 新材料在生物芯片制备中的应用研究考核试卷
- 脚本创作劳务合同
- 纺纱工艺对环境的影响评价考核试卷
- 模具制造工艺参数优化考核试卷
- 生活服务行业互联网平台社会影响力分析考核试卷
- 振动控制技术及其在工程中的应用考核试卷
- 无线网络连接速度优化考核试卷
- 肉制品加工产品多样化与品质提升策略考核试卷
- 2025年卓雅学校九年级语文3月模拟练习试卷附答案解析
- 医院浅层地热能评估报告
- GB/T 14975-2012结构用不锈钢无缝钢管
- DB21-T3683-2022医疗卫生机构医疗废物卫生管理规范
- GB 17957-2021凿岩机械与气动工具安全要求
- 部编版六年级语文下册期末专项复习:修辞手法
- 中药学-七版教材
- 红军五次反围剿课件
- ISO9001注册审核员专业划分小类
- 五年级道德与法治上册课件 -保家卫国 独立自主 部编版 (共48张PPT)
- 安徽省历年中考数学试卷,2014-2021年安徽中考数学近八年真题汇总(含答案解析)
- 利益冲突申报表
评论
0/150
提交评论