搭过php相关环境的同学应该对fastcgi不陌生,那么fastcgi究竟是什么东西,为什么nginx可以通过fastcgi来对接php? Fastcgi Record Fastcgi其实是一个通信协议,和HTTP协议一样,都是进行数据交换的一个通道。 HTTP协议是浏览器和服务器中间件进行数据交换的协议,浏览器将HTTP头和HTTP体用某个规则组装成数据包,以TCP的方式发送到服务器中间件,服务器中间件按照规则将数据包解码,并按要求拿到用户需要的数据,再以HTTP协议的规则打包返回给服务器。http://www.mottoin.com/101409.html 类比HTTP协议来说,fastcgi协议则是服务器中间件和某个语言后端进行数据交换的协议。Fastcgi协议由多个record组成,record也有header和body一说,服务器中间件将这二者按照fastcgi的规则封装好发送给语言后端,语言后端解码以后拿到具体数据,进行指定操作,并将结果再按照该协议封装好后返回给服务器中间件。 和HTTP头不同,record的头固定8个字节,body是由头中的contentLength指定,其结构如下:
头由8个uchar类型的变量组成,每个变量1字节。其中, 语言端解析了fastcgi头以后,拿到 Body后面还有一段额外的数据(Padding),其长度由头中的paddingLength指定,起保留作用。不需要该Padding的时候,将其长度设置为0即可。 可见,一个fastcgi record结构最大支持的body大小是 Fastcgi Type 刚才我介绍了fastcgi一个record中各个结构的含义,其中第二个字节
也就是说,每次请求,会有多个record,他们的 借用该文章中的一个表格,列出最主要的几种
看了这个表格就很清楚了,服务器中间件和后端语言通信,第一个数据包就是 当后端语言接收到一个
|
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|