1.协议
Web客户端和服务器之间的交互基于文本的应用级协议,HTTP协议。Http协议是基于TCP/IP的,对网页连接进行抓包,首先会进行TCP/IP的三次握手。
2.Web内容
使用HTML语言编写,包含指令,告诉浏览器如何显示文本和图像对象。包含动态内容和静态内容。
服务动态内容:运行可执行文件并返回输出到客户端。eg: http://bluefish.ics.cs.cmu.edu:8000/sgi-bin/adder?15000&213
服务静态内容:去磁盘文件返回给客户端。eg: http://www.google.com:80/index.html
组成分析:www.google.com:80是客户端使用的前缀,决定服务器在哪里及其端口。后面是静态内容或可执行文件。“?”字符分隔文件名和参数,不同参数用“&”连接,参数不允许有空格,必须用“%20”表示。URL是域名的时候(www.google.com),浏览器在URL后面扩展缺失的“/”,并将之传给服务器(www.google.com/),服务器又把“/”扩展到某个默认的文件名(默认主页)(www.ggg.com/index.html)。
3.服务动态内容过程
服务器接受请求:GET /cgi-bin/adder?15000&213 HTTP/1.1
调用fork创建子进程,并调用execve在子进程中执行/cgi-biin/adder程序,像adder这样的程序,常长被称为CGI程序,因为它遵循CGI标准的规则。子进程将CGI环境变量设置为“15000&213”,adder程序在运行时可用Linux getenv函数来引用。
CGI将动态内容发送到标准的输出,在子进程加载并运行CGI程序之前,它使用Linux dup2函数将标准输出重定向到与客户端关联的连接描述符。
任何CGI程序的标准输出都会到达客户端。