http服务器究竟做了什么(二)

上篇http服务器究竟做了什么(一)提到http服务器会有接口让第三方程序来接入,从而实现业务分离的作用.接口肯定有接口的规范,例如我国家用插座输出电压规范是220v,厂商都是根据这个规范来生产家电的.那么http服务器接口的规范是什么呢?他有有个专有名词:Common Gateway Interface(通用网关接口),简称CGI.

服务器与CGI主要通过标准输入输出来通信和交互.CGI本质上是一种特定的程序, CGI的一个目的是要独立于任何语言的,所以CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。 如php,perl,tcl等。下图描述了CGI与服务器的关系:


可以看出,进程的标准输入输出是他们通信的桥梁,环境变量是运输工具.对于CGI程序来说,它继承了系统的环境变量。CGI环境变量在CGI程序启动时初始化,在结束时销毁。当一个CGI程序不是被HTTP服务器调用时,它的环境变量几乎是系统环境变量的复制。当这个CGI程序被HTTP服务器调用时(一般是他的子进程,即fork出来的),它的环境变量就会多了以下关于HTTP服务器、客户端、CGI传输过程等项目。有哪些环境变量呢?按照分类如下:

与请求相关的环境变量

REQUEST_METHOD

服务器与CGI程序之间的信息传输方式

QUERY_STRING

采用GET时所传输的信息

CONTENT_LENGTH

STDIO中的有效信息长度

CONTENT_TYPE

指示所传来的信息的MIME类型

CONTENT_FILE

使用Windows HTTPd/WinCGI标准时,用来传送数据的文件名

PATH_INFO

路径信息

PATH_TRANSLATED

CGI程序的完整路径名

SCRIPT_NAME

所调用的CGI程序的名字

与服务器相关的环境变量

GATEWAY_INTERFACE

服务器所实现的CGI版本

SERVER_NAME

服务器的IP或名字

SERVER_PORT

主机的端口号

SERVER_SOFTWARE

调用CGI程序的HTTP服务器的名称和版本号

与客户端相关的环境变量

REMOTE_ADDR

客户机的主机名

REMOTE_HOST

客户机的IP地址

ACCEPT

例出能被次请求接受的应答方式

ACCEPT_ENCODING

列出客户机支持的编码方式

ACCEPT_LANGUAGE

表明客户机可接受语言的ISO代码

AUTORIZATION

表明被证实了的用户

FORM

列出客户机的EMAIL地址

IF_MODIFIED_SINGCE

当用get方式请求并且只有当文档比指定日期更早时才返回数据

PRAGMA

设定将来要用到的服务器代理

REFFERER

指出连接到当前文档的文档的URL

USER_AGENT

客户端浏览器的信息

前面提到,浏览器与服务器是通过http协议通信的.服务器收到浏览器请求后会启用CGI程序,根据不同的业务请求来写入不同的环境变量.例如GET和POST请求,服务器会向CGI程序的REQUEST_METHOD环境变量写入不同的值,分别为'GET','POST'.关于浏览器的GET和POST请求后面还会提到.

等CGI程序处理请求之后,就要向服务器返回结果数据了,他们仍然是通过标准输入输出来进行的.服务器再把数据发送给浏览器,我们就得到请求结果了.

Talk is cheap, show me the code. 接下来的一篇通过程序实例来说明上面的过程.


参考资料:

1 http://www.php-internals.com/book/?p=chapt02/02-02-03-fastcgi

2 https://blog.csdn.net/liunian_siyu/article/details/60964966

3 http://www.cnblogs.com/liuzhang/p/3929198.html



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值