当前位置: 首页 > news >正文

微机课做网站移动端网站设计规范

微机课做网站,移动端网站设计规范,域名查询168,网站专题页面文案设计什么是 CGI#xff1f; 公共网关接口#xff08;CGI#xff09;#xff0c;是一套标准#xff0c;定义了信息是如何在 Web 服务器和客户端脚本之间进行交换的。CGI 规范目前是由 NCSA 维护的#xff0c;NCSA 定义 CGI 如下#xff1a;公共网关接口#xff08;CGI…什么是 CGI 公共网关接口CGI是一套标准定义了信息是如何在 Web 服务器和客户端脚本之间进行交换的。CGI 规范目前是由 NCSA 维护的NCSA 定义 CGI 如下公共网关接口CGI是一种用于外部网关程序与信息服务器如 HTTP 服务器对接的接口标准。目前的版本是 CGI/1.1CGI/1.2 版本正在推进中。 Web 浏览 为了更好地了解 CGI 的概念让我们点击一个超链接浏览一个特定的网页或 URL看看会发生什么。 您的浏览器联系上 HTTP Web 服务器并请求 URL即文件名。Web 服务器将解析 URL并查找文件名。如果找到请求的文件Web 服务器会把文件发送回浏览器否则发送一条错误消息表明您请求了一个错误的文件。Web 浏览器从 Web 服务器获取响应并根据接收到的响应来显示文件或错误消息。 然而以这种方式搭建起来的 HTTP 服务器不管何时请求目录中的某个文件HTTP 服务器发送回来的不是该文件而是以程序形式执行并把执行产生的输出发送回浏览器显示出来。 公共网关接口CGI是使得应用程序称为 CGI 程序或 CGI 脚本能够与 Web 服务器以及客户端进行交互的标准协议。这些 CGI 程序可以用 Python、PERL、Shell、C 或 C 等进行编写。 CGI 架构图 下图演示了 CGI 的架构 Web 服务器配置 在您进行 CGI 编程之前请确保您的 Web 服务器支持 CGI并已配置成可以处理 CGI 程序。所有由 HTTP 服务器执行的 CGI 程序都必须在预配置的目录中。该目录称为 CGI 目录按照惯例命名为 /var/www/cgi-bin。虽然 CGI 文件是 C 可执行文件但是按照惯例它的扩展名是 .cgi。 默认情况下Apache Web 服务器会配置在 /var/www/cgi-bin 中运行 CGI 程序。如果您想指定其他目录来运行 CGI 脚本您可以在 httpd.conf 文件中修改以下部分 Directory /var/www/cgi-binAllowOverride NoneOptions ExecCGIOrder allow,denyAllow from all /DirectoryDirectory /var/www/cgi-bin Options All /Directory在这里我们假设已经配置好 Web 服务器并能成功运行你可以运行任意的 CGI 程序比如 Perl 或 Shell 等。 第一个 CGI 程序 请看下面的 C 程序 #include iostream using namespace std;int main () {cout Content-type:text/html\r\n\r\n;cout html\n;cout head\n;cout titleHello World - 第一个 CGI 程序/title\n;cout /head\n;cout body\n;cout h2Hello World! 这是我的第一个 CGI 程序/h2\n;cout /body\n;cout /html\n;return 0; }编译上面的代码把可执行文件命名为 cplusplus.cgi并把这个文件保存在 /var/www/cgi-bin 目录中。在运行 CGI 程序之前请使用 chmod 755 cplusplus.cgi UNIX 命令来修改文件模式确保文件可执行。访问可执行文件您会看到下面的输出 Hello World! 这是我的第一个 CGI 程序 上面的 C 程序是一个简单的程序把它的输出写在 STDOUT 文件上即显示在屏幕上。在这里值得注意一点第一行输出 Content-type:text/html\r\n\r\n。这一行发送回浏览器并指定要显示在浏览器窗口上的内容类型。您必须理解 CGI 的基本概念这样才能进一步使用 Python 编写更多复杂的 CGI 程序。C CGI 程序可以与任何其他外部的系统如 RDBMS进行交互。 HTTP 头信息 行 Content-type:text/html\r\n\r\n 是 HTTP 头信息的组成部分它被发送到浏览器以便更好地理解页面内容。HTTP 头信息的形式如下 HTTP 字段名称: 字段内容 例如 Content-type: text/html\r\n\r\n 还有一些其他的重要的 HTTP 头信息这些在您的 CGI 编程中都会经常被用到。 头信息描述Content-type:MIME 字符串定义返回的文件格式。例如 Content-type:text/html。Expires:Date 信息变成无效的日期。浏览器使用它来判断一个页面何时需要刷新。一个有效的日期字符串的格式应为 01 Jan 1998 12:00:00 GMT。Location:URL 这个 URL 是指应该返回的 URL而不是请求的 URL。你可以使用它来重定向一个请求到任意的文件。Last-modified:Date 资源的最后修改日期。Content-length:N 要返回的数据的长度以字节为单位。浏览器使用这个值来表示一个文件的预计下载时间。Set-Cookie:String 通过 string 设置 cookie。 CGI 环境变量 所有的 CGI 程序都可以访问下列的环境变量。这些变量在编写 CGI 程序时扮演了非常重要的角色。 变量名描述CONTENT_TYPE内容的数据类型。当客户端向服务器发送附加内容时使用。例如文件上传等功能。CONTENT_LENGTH查询的信息长度。只对 POST 请求可用。HTTP_COOKIE以键 值对的形式返回设置的 cookies。HTTP_USER_AGENT用户代理请求标头字段递交用户发起请求的有关信息包含了浏览器的名称、版本和其他平台性的附加信息。PATH_INFOCGI 脚本的路径。QUERY_STRING通过 GET 方法发送请求时的 URL 编码信息包含 URL 中问号后面的参数。REMOTE_ADDR发出请求的远程主机的 IP 地址。这在日志记录和认证时是非常有用的。REMOTE_HOST发出请求的主机的完全限定名称。如果此信息不可用则可以用 REMOTE_ADDR 来获取 IP 地址。REQUEST_METHOD用于发出请求的方法。最常见的方法是 GET 和 POST。SCRIPT_FILENAMECGI 脚本的完整路径。SCRIPT_NAMECGI 脚本的名称。SERVER_NAME服务器的主机名或 IP 地址。SERVER_SOFTWARE服务器上运行的软件的名称和版本。 下面的 CGI 程序列出了所有的 CGI 变量。 #include iostream #include stdlib.h #include string using namespace std;const string ENV[ 24 ] { COMSPEC, DOCUMENT_ROOT, GATEWAY_INTERFACE, HTTP_ACCEPT, HTTP_ACCEPT_ENCODING, HTTP_ACCEPT_LANGUAGE, HTTP_CONNECTION, HTTP_HOST, HTTP_USER_AGENT, PATH, QUERY_STRING, REMOTE_ADDR, REMOTE_PORT, REQUEST_METHOD, REQUEST_URI, SCRIPT_FILENAME,SCRIPT_NAME, SERVER_ADDR, SERVER_ADMIN, SERVER_NAME,SERVER_PORT,SERVER_PROTOCOL, SERVER_SIGNATURE,SERVER_SOFTWARE }; int main () {cout Content-type:text/html\r\n\r\n;cout html\n;cout head\n;cout titleCGI 环境变量/title\n;cout /head\n;cout body\n;cout table border \0\ cellspacing \2\;for ( int i 0; i 24; i ){cout trtd ENV[ i ] /tdtd;// 尝试检索环境变量的值char *value getenv( ENV[ i ].c_str() ); if ( value ! 0 ){cout value; }else{cout 环境变量不存在。;}cout /td/tr\n;}cout /table\n;cout /body\n;cout /html\n;return 0; }C CGI 库 在真实的实例中您需要通过 CGI 程序执行许多操作。这里有一个专为 C 程序而编写的 CGI 库我们可以从 ftp://ftp.gnu.org/gnu/cgicc/ 上下载这个 CGI 库并按照下面的步骤安装库 $ tar xzf cgicc-X.X.X.tar.gz $ cd cgicc-X.X.X/ $ ./configure --prefix/usr $ make $ make install 注意libcgicc.so 和 libcgicc.a 库会被安装到/usr/lib目录下需执行拷贝命令 $ sudo cp /usr/lib/libcgicc.* /usr/lib64/ 才能使 CGI 程序自动找到 libcgicc.so 动态链接库。 您可以点击 C CGI Lib Documentation查看相关的库文档。 GET 和 POST 方法 您可能有遇到过这样的情况当您需要从浏览器传递一些信息到 Web 服务器最后再传到 CGI 程序。通常浏览器会使用两种方法把这个信息传到 Web 服务器分别是 GET 和 POST 方法。 使用 GET 方法传递信息 GET 方法发送已编码的用户信息追加到页面请求中。页面和已编码信息通过 ? 字符分隔开如下所示 http://www.test.com/cgi-bin/cpp.cgi?key1value1key2value2 GET 方法是默认的从浏览器向 Web 服务器传信息的方法它会在浏览器的地址栏中生成一串很长的字符串。当您向服务器传密码或其他一些敏感信息时不要使用 GET 方法。GET 方法有大小限制在一个请求字符串中最多可以传 1024 个字符。 当使用 GET 方法时是使用 QUERY_STRING http 头来传递信息在 CGI 程序中可使用 QUERY_STRING 环境变量来访问。 您可以通过在 URL 后跟上简单连接的键值对也可以通过使用 HTML 标签的 GET 方法来传信息。 简单的 URL 实例Get 方法 下面是一个简单的 URL使用 GET 方法传递两个值给 cpp_get.cgi 程序。 /cgi-bin/cpp_get.cgi?first_nameZARAlast_nameALI 下面的实例生成 cpp_get.cgi CGI 程序用于处理 Web 浏览器给出的输入。通过使用 C CGI 库可以很容易地访问传递的信息 实例 #include #include #include #include stdio.h #include stdlib.h #include cgicc/CgiDefs.h #include cgicc/Cgicc.h #include cgicc/HTTPHTMLHeader.h #include cgicc/HTMLClasses.h using namespace std; using namespace cgicc; int main () { Cgicc formData; cout “Content-type:text/html\r\n\r\n”; cout “\n”; cout “\n”; cout “使用 GET 和 POST 方法\n”; cout “\n”; cout “\n”; form_iterator fi formData.getElement(“first_name”); if( !fi-isEmpty() fi ! (*formData).end()) { cout “名” **fi endl; }else{ cout “No text entered for first name” endl; } cout “\n”; fi formData.getElement(“last_name”); if( !fi-isEmpty() fi ! (*formData).end()) { cout “姓” **fi endl; }else{ cout “No text entered for last name” endl; } cout “\n”; cout “\n”; cout “\n”; return 0; } 现在编译上面的程序如下所示 $g -o cpp_get.cgi cpp_get.cpp -lcgicc 生成 cpp_get.cgi并把它放在 CGI 目录中并尝试使用下面的链接进行访问 /cgi-bin/cpp_get.cgi?first_nameZARAlast_nameALI 这会产生以下结果 名ZARA 姓ALI 简单的表单实例GET 方法 下面是一个简单的实例使用 HTML 表单和提交按钮传递两个值。我们将使用相同的 CGI 脚本 cpp_get.cgi 来处理输入。 名 姓 下面是上述表单的实际输出请输入名和姓然后点击提交按钮查看结果。 使用 POST 方法传递信息 一个更可靠的向 CGI 程序传递信息的方法是 POST 方法。这种方法打包信息的方式与 GET 方法相同不同的是它不是把信息以文本字符串形式放在 URL 中的 ? 之后进行传递而是把它以单独的消息形式进行传递。该消息是以标准输入的形式传给 CGI 脚本的。 我们同样使用 cpp_get.cgi 程序来处理 POST 方法。让我们以同样的例子通过使用 HTML 表单和提交按钮来传递两个值只不过这次我们使用的不是 GET 方法而是 POST 方法如下所示 名 姓 向 CGI 程序传递复选框数据 当需要选择多个选项时我们使用复选框。 下面的 HTML 代码实例是一个带有两个复选框的表单 数学 物理 下面的 C 程序会生成 cpp_checkbox.cgi 脚本用于处理 Web 浏览器通过复选框给出的输入。 实例 #include #include #include #include stdio.h #include stdlib.h #include cgicc/CgiDefs.h #include cgicc/Cgicc.h #include cgicc/HTTPHTMLHeader.h #include cgicc/HTMLClasses.h using namespace std; using namespace cgicc; int main () { Cgicc formData; bool maths_flag, physics_flag; cout “Content-type:text/html\r\n\r\n”; cout “\n”; cout “\n”; cout “向 CGI 程序传递复选框数据\n”; cout “\n”; cout “\n”; maths_flag formData.queryCheckbox(“maths”); if( maths_flag ) { cout Maths Flag: ON endl; }else{ cout Maths Flag: OFF endl; } cout “\n”; physics_flag formData.queryCheckbox(“physics”); if( physics_flag ) { cout Physics Flag: ON endl; }else{ cout Physics Flag: OFF endl; } cout “\n”; cout “\n”; cout “\n”; return 0; } 向 CGI 程序传递单选按钮数据 当只需要选择一个选项时我们使用单选按钮。 下面的 HTML 代码实例是一个带有两个单选按钮的表单 数学 物理 下面的 C 程序会生成 cpp_radiobutton.cgi 脚本用于处理 Web 浏览器通过单选按钮给出的输入。 实例 #include #include #include #include stdio.h #include stdlib.h #include cgicc/CgiDefs.h #include cgicc/Cgicc.h #include cgicc/HTTPHTMLHeader.h #include cgicc/HTMLClasses.h using namespace std; using namespace cgicc; int main () { Cgicc formData; cout “Content-type:text/html\r\n\r\n”; cout “\n”; cout “\n”; cout “向 CGI 程序传递单选按钮数据\n”; cout “\n”; cout “\n”; form_iterator fi formData.getElement(“subject”); if( !fi-isEmpty() fi ! (*formData).end()) { cout Radio box selected: **fi endl; } cout “\n”; cout “\n”; cout “\n”; return 0; } 向 CGI 程序传递文本区域数据 当需要向 CGI 程序传递多行文本时我们使用 TEXTAREA 元素。 下面的 HTML 代码实例是一个带有 TEXTAREA 框的表单 请在这里输入文本... 下面的 C 程序会生成 cpp_textarea.cgi 脚本用于处理 Web 浏览器通过文本区域给出的输入。 实例 #include #include #include #include stdio.h #include stdlib.h #include cgicc/CgiDefs.h #include cgicc/Cgicc.h #include cgicc/HTTPHTMLHeader.h #include cgicc/HTMLClasses.h using namespace std; using namespace cgicc; int main () { Cgicc formData; cout “Content-type:text/html\r\n\r\n”; cout “\n”; cout “\n”; cout “向 CGI 程序传递文本区域数据\n”; cout “\n”; cout “\n”; form_iterator fi formData.getElement(“textcontent”); if( !fi-isEmpty() fi ! (*formData).end()) { cout Text Content: **fi endl; }else{ cout “No text entered” endl; } cout “\n”; cout “\n”; cout “\n”; return 0; } 向 CGI 程序传递下拉框数据 当有多个选项可用但只能选择一个或两个选项时我们使用下拉框。 下面的 HTML 代码实例是一个带有下拉框的表单 数学 物理 下面的 C 程序会生成 cpp_dropdown.cgi 脚本用于处理 Web 浏览器通过下拉框给出的输入。 实例 #include #include #include #include stdio.h #include stdlib.h #include cgicc/CgiDefs.h #include cgicc/Cgicc.h #include cgicc/HTTPHTMLHeader.h #include cgicc/HTMLClasses.h using namespace std; using namespace cgicc; int main () { Cgicc formData; cout “Content-type:text/html\r\n\r\n”; cout “\n”; cout “\n”; cout “向 CGI 程序传递下拉框数据\n”; cout “\n”; cout “\n”; form_iterator fi formData.getElement(“dropdown”); if( !fi-isEmpty() fi ! (*formData).end()) { cout Value Selected: **fi endl; } cout “\n”; cout “\n”; cout “\n”; return 0; } 在 CGI 中使用 Cookies HTTP 协议是一种无状态的协议。但对于一个商业网站它需要在不同页面间保持会话信息。例如一个用户在完成多个页面的步骤之后结束注册。但是如何在所有网页中保持用户的会话信息。 在许多情况下使用 cookies 是记忆和跟踪有关用户喜好、购买、佣金以及其他为追求更好的游客体验或网站统计所需信息的最有效的方法。 它是如何工作的 服务器以 cookie 的形式向访客的浏览器发送一些数据。如果浏览器接受了 cookie则 cookie 会以纯文本记录的形式存储在访客的硬盘上。现在当访客访问网站上的另一个页面时会检索 cookie。一旦找到 cookie服务器就知道存储了什么。 cookie 是一种纯文本的数据记录带有 5 个可变长度的字段 Expires : cookie 的过期日期。如果此字段留空cookie 会在访客退出浏览器时过期。 Domain : 网站的域名。 Path : 设置 cookie 的目录或网页的路径。如果您想从任意的目录或网页检索 cookie此字段可以留空。 Secure : 如果此字段包含单词 “secure”那么 cookie 只能通过安全服务器进行检索。如果此字段留空则不存在该限制。 NameValue : cookie 以键值对的形式被设置和获取。 设置 Cookies 向浏览器发送 cookies 是非常简单的。这些 cookies 会在 Content-type 字段之前与 HTTP 头一起被发送。假设您想设置 UserID 和 Password 为 cookies设置 cookies 的步骤如下所示 实例 #include using namespace std; int main () { cout “Set-Cookie:UserIDXYZ;\r\n”; cout “Set-Cookie:PasswordXYZ123;\r\n”; cout “Set-Cookie:Domainwww.w3cschool.cc;\r\n”; cout “Set-Cookie:Path/perl;\n”; cout “Content-type:text/html\r\n\r\n”; cout “\n”; cout “\n”; cout “CGI 中的 Cookies\n”; cout “\n”; cout “\n”; cout “设置 cookies” endl; cout “\n”; cout “\n”; cout “\n”; return 0; } 从这个实例中我们了解了如何设置 cookies。我们使用 Set-Cookie HTTP 头来设置 cookies。 在这里有一些设置 cookies 的属性是可选的比如 Expires、Domain 和 Path。值得注意的是cookies 是在发送行 Content-type:text/html\r\n\r\n 之前被设置的。 编译上面的程序生成 setcookies.cgi并尝试使用下面的链接设置 cookies。它会在您的计算机上设置四个 cookies /cgi-bin/setcookies.cgi 获取 Cookies 检索所有设置的 cookies 是非常简单的。cookies 被存储在 CGI 环境变量 HTTP_COOKIE 中且它们的形式如下 key1value1;key2value2;key3value3… 下面的实例演示了如何获取 cookies。 实例 #include #include #include #include stdio.h #include stdlib.h #include cgicc/CgiDefs.h #include cgicc/Cgicc.h #include cgicc/HTTPHTMLHeader.h #include cgicc/HTMLClasses.h using namespace std; using namespace cgicc; int main () { Cgicc cgi; const_cookie_iterator cci; cout “Content-type:text/html\r\n\r\n”; cout “\n”; cout “\n”; cout “CGI 中的 Cookies\n”; cout “\n”; cout “\n”; cout “table border “0” cellspacing “2””; // 获取环境变量 const CgiEnvironment env cgi.getEnvironment(); for( cci env.getCookieList().begin(); cci ! env.getCookieList().end(); cci ) { cout “” cci-getName() “”; cout cci-getValue(); cout “\n”; } cout “\n”; cout “\n”; cout “\n”; cout “\n”; return 0; } 现在编译上面的程序生成 getcookies.cgi并尝试使用下面的链接获取您的计算机上所有可用的 cookies /cgi-bin/getcookies.cgi 这会产生一个列表显示了上一节中设置的四个 cookies 以及您的计算机上所有其他的 cookies UserID XYZ Password XYZ123 Domain www.w3cschool.cc Path /perl 文件上传实例 为了上传一个文件HTML 表单必须把 enctype 属性设置为 multipart/form-data。带有文件类型的 input 标签会创建一个 “Browse” 按钮。 文件 这段代码的结果是下面的表单 文件未选择任何文件 注意上面的实例已经故意禁用了保存上传的文件在我们的服务器上。您可以在自己的服务器上尝试上面的代码。 下面是用于处理文件上传的脚本 cpp_uploadfile.cpp 实例 #include #include #include #include stdio.h #include stdlib.h #include cgicc/CgiDefs.h #include cgicc/Cgicc.h #include cgicc/HTTPHTMLHeader.h #include cgicc/HTMLClasses.h using namespace std; using namespace cgicc; int main () { Cgicc cgi; cout “Content-type:text/html\r\n\r\n”; cout “\n”; cout “\n”; cout “CGI 中的文件上传\n”; cout “\n”; cout “\n”; // 获取要被上传的文件列表 const_file_iterator file cgi.getFile(“userfile”); if(file ! cgi.getFiles().end()) { // 在 cout 中发送数据类型 cout HTTPContentHeader(file-getDataType()); // 在 cout 中写入内容 file-writeToStream(cout); } cout “文件上传成功\n”; cout “\n”; cout “\n”; return 0; } 上面的实例是在 cout 流中写入内容但您可以打开文件流并把上传的文件内容保存在目标位置的某个文件中。
http://www.zqtcl.cn/news/593246/

相关文章:

  • 网站设计文章国际转运网站建设
  • 南充市建设厅官方网站购物网站设计说明
  • 防疫网站网页设计wordpress不同侧边栏
  • 网站的建设多少钱长春市招标建设信息网
  • 网站加速代码百度浏览器app
  • 关于配色的网站企业宣传册文案范文
  • 免费推广网站教程湖南中核建设工程公司官方网站
  • 莱阳网站建设公司彩票类网站是如何做代理的
  • 食品公司网站建设广州做网站制作公司
  • 网站上传服务器教程搜索网站存在的关键字
  • 天河建设网站多少钱网络公司网站样本
  • 做的精美的门户网站推荐附近编程培训机构
  • 台州黄岩做网站太原网站建设王道下拉惠
  • 深圳设计网站公司互联网服务平台投诉中心
  • 做seo网站优化哪家强济南网站建设公司排名
  • tp5网站文档归档怎么做手机虚拟机哪个好用
  • 网站建设公司的业务范围万网做网站多少钱
  • 做网站要用写接口6wordpress 汽车租赁
  • 网站开发方向paypal账号注册
  • 如何选择做pc端网站重庆平台网站建设企业
  • 一个人做网站好累电子商城采购流程
  • 网站制作维护价格信息网站建设方案
  • 如何选择建网站公司能看人与动物做的网站
  • 温州网站建设方案外包不能访问子目录的网站
  • 建设拼多多一样网站需要多少钱wordpress企业站主题免费
  • 无锡网站制作哪家公司好做微信文章的网站
  • 网站 制作信产部网站备案
  • 做流程图表的网站网络营销推广网站收录
  • iis5.1怎么新建网站电子商务网站建设与管理实训内容答案
  • 做网站背景步骤知名的vi设计公司