图2 单一主机内部传输示意图
图3 FTP 相同网络架构传输示意图
图4 不同架构网络透过TCP/IP 连结架构图
本文采用TCP/IP 通讯协议组中的TCP 通讯协议做为传输层(Transport Layer)主要的通讯协议,因为TCP 具有联机导向、可信赖以及字节流的特性。联机导向(connection-oriented):当Server 端与Client 端建立联机前会作数据的交换,以确定联机的建立。信赖度:TCP 利用以下几种方式提供信赖度:(1) 数据被分解成TCP 认为最佳大小的区块(chuck)后传送。如下图5 显示之Server-Client 通讯流程:
图5: Server-Client 通讯流程
HTTP(HyperText Transport Protocol)
HTTP(HyperText Transport Protocol)自1990 年以来就被全球信息网采用为基础通讯协议,它是一种应用阶层(Application-level)的通讯协议,特性是轻便、快速,特别适合如Web 这种分布式、合作式的超媒体信息系统。HTTP 具通用性(generic)、无记忆性(stateless),且为对象导向,HTTP 特别具有数据型态(typing),并可协商数据表征(data representation),所以依此建造的系统可以不受传输数据内容的影响。HTTP 虽早自1990 年起就已被普遍使用,但过去许多年并无统一规范,此项不明确的规范后来通称为HTTP/0.9。
直到1996 年6 月一份仅供参考的文件方才由Internet Society 的HTTP Working Group 出版,称为HTTP/1.0。HTTP/1.0 虽有正式文号(RFC1945)[5],但仅为一临时性文件,有效期为六个月,此文件到1996 年年底已到期。到1997 年一月,一份正式的文件,HTTP/1.1(RFC2068)[5]适时出炉,至此HTTP 才算有了一份正式的标准草案。
HTTP 规范用户(client)与服务器(server)之间的通讯,用户是一个程序,它按照HTTP 的规范建立一个通达服务器(另一个程序)的连结(connection)以送出其「要求」(request);所谓「要求」就是对在某一服务器上的「资源」(resource)请其做某种动作,服务器收到要求后,则将其「回复」(response)送回。HTTP/0.9 是一个简单的「Request/Response」通讯规范,其目的仅在传输原数据。HTTP/1.0主要的改进在于允许所传输的资料可以采取类似MIME 的格式,也就是说,可以指定所传输数据的格式,信息也可以允许使用「修饰语」(modifiers)改变要求与回复的运作意义。如此一来就大大的扩展HTTP 可应用的范围。
HTTP/1.1 主要的改进在:具分层架构的代行者(hierarchical proxies)、传送对象的暂存(caching)、常续的连结(persistent connections)、拟真主机(virtual hosts)。本论文主要发展并证明Web-Server 嵌入式系统的可行性,除了受限于硬件环境外,且绝大部分的Browser 支持HTTP/1.0,所以本论文采用HTTP/1.0 作为发展基础。
HTTP/1.0 传输格式
就像大部分的网络通讯协议,HTTP 使用client-server model:Client 端开启1个连结(connection)并送出request message 到server 端;server 端接收到后回传response message,此message 通常包含client 端所要求的数据,在结束传输后server 关闭此连结。Http/1.0 使用了许多由MIME(Mutipurpose Internet Mail Extensions)定义的格式,可参照RFC1521 文件[5]。Request 和response message格式相似,包含:(1)an initial line, (2)Message header(zero or more HTTP header fields), (3)a blank line , (4)an optional message body (e.g. a file, or query data, or query output)。对于每一部分,将分别加以说明:Initial line:Initial request line:主要分为三个部分,method name(将于稍后提到)、request resource 的区域路径、和HTTP 版本。基本形式如下:GET /path/to/file/index.html HTTP/1.0 在此简单介绍HTTP/1.0 的指令集(the set of common method)。指令集可以扩充,但不能保证可以让所有的client 端与server 端接受。而最常使用的指令有三种:GET、HEAD、POST。
(a)The GET Method:简单来说,GET method 就是对server 端要求data(所有在request message 所要求的信息),在过程中server 端不会给予Text 型态source,而是转换成Entity-body(message body)放入response 中;除非source 本身即是以text 文件方式储存显示。
(b)The HEAD Method:HEAD method 与GET method 大致相同,但是不会有Entity-Body 的部分。即使用HEAD method 对于server 端要求回传status lines 和headers 而省略message body。若只想取得server 端source 的URI(Uniform Resource Identifier)[6]数据可使用此方法。
(c)The POST Method:在之前旧版的HTML 语法,POST method 与GET method的差异性在于前者可透过其它方式传输数据,例如CGI SCRJPT. 目前的HTML 语法GET 与POST 皆可使用CGI SCRJPT。而两者间的差异在于传输数据时,GET于URL 后端加入传送数据;而POST 则是放入Header,再回传给client 端。此部分的差异将于2-4 小节CGI 的应用部分讨论。图6 表示HTTP message 整体架构:
图6 HTTP 通讯格式
Initial response line(status line):主要分为三个部分, HTTP 版本, response status code,及status code 的英文描述。基本形式如下:
HTTP/1.0 200 OK,or HTTP/1.0 404 Not Found
列出常见status code 所代表的涵义,如下表
(1)Message Headers(HTTP header fields):
整个HTTP header fields 包含:General-Header、Request-Header、Response-Header、Entity-Header。Header fields 格式遵循了一定的规范[4],基本格式如下:
field-name:SP[field-value]CRLF
SP 是表示a single space;[Field-value]是表不header 内容,而CRLF 是表示结束字符(ASCII code)。
The Message Body(Entity Body):
对于request 部分,为client 端输入的数据或上传的档案;对于response 部分,为接受client 端要求,回送client 端要求的资料。而当HTTP message 包含有数据的时候,通常会有另外的Headers 描述此数据。
CGI (Common Gateway Interface)
原始的HTML 语言是设计用来展现静态的数据,它让人使用一种简单的语法展现出丰富的多媒体数据,就像广告广告牌一样。如果使用者需要的数据具有时效性,必需时常更新,这时该怎么办呢? 又或者你想留下使用者的数据,让你的网页能跟使用者达到互动的效果,这时又该如何? 由于上述种种需求,于是就诞生了CGI。CGI 是Common Gateway Interface 的缩写,中文翻做『共通网关接口』。它是一种标准接口程序,能让你的网页跟WWW server 沟通,达到跟使用者互动的效果。而且透过CGI 程序,可以让你动态的产生网页,秀出server 上的最新数据。当你连结到一个CGI 对象时,你取回的文件并非是一份静态数据,而是一个藉由程序动态产生的HTML 数据流。传回来的资料可以随时更改,或者针对使用者的特殊查询而有不同的反应。简单来说,CGI 程序就是能够动态产生WWW 网页,并让一般使用者经由WWW 取用系统内的数据。